Merge branch 'master' into master-ios

This commit is contained in:
spaced4ndy
2023-04-13 20:49:23 +04:00
77 changed files with 11614 additions and 953 deletions
+1 -1
View File
@@ -87,7 +87,7 @@ Join our translators to help SimpleX grow!
|🇮🇹 it|Italiano |[unbranched](https://github.com/unbranched)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/it/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/it/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/it/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/it/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/it/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/it/)||
|🇳🇱 nl|Nederlands|[mika-nl](https://github.com/mika-nl)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/nl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/nl/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/nl/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/nl/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/nl/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/nl/)||
|🇷🇺 ru|Русский ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/ru/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ru/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ru/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ru/)|||
|🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/)||
|🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)<br><br>[Float-hu](https://github.com/Float-hu)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)<br>&nbsp;|<br><br>[![website](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/)||
Languages in progress: Arabic, Hindi, Japanese, Spanish and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us!
+2 -2
View File
@@ -11,8 +11,8 @@ android {
applicationId "chat.simplex.app"
minSdk 26
targetSdk 32
versionCode 111
versionName "4.6.1-beta.2"
versionCode 112
versionName "4.6.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
@@ -2042,7 +2042,11 @@ enum class CICallStatus {
}
}
fun durationText(sec: Int): String = "%02d:%02d".format(sec / 60, sec % 60)
fun durationText(sec: Int): String {
val s = sec % 60
val m = sec / 60
return if (m < 60) "%02d:%02d".format(m, s) else "%02d:%02d:%02d".format(m / 60, m % 60, s)
}
@Serializable
sealed class MsgErrorType() {
@@ -108,6 +108,7 @@ class AppPreferences(val context: Context) {
val chatLastStart = mkDatePreference(SHARED_PREFS_CHAT_LAST_START, null)
val developerTools = mkBoolPreference(SHARED_PREFS_DEVELOPER_TOOLS, false)
val networkUseSocksProxy = mkBoolPreference(SHARED_PREFS_NETWORK_USE_SOCKS_PROXY, false)
val networkProxyHostPort = mkStrPreference(SHARED_PREFS_NETWORK_PROXY_HOST_PORT, "localhost:9050")
private val _networkSessionMode = mkStrPreference(SHARED_PREFS_NETWORK_SESSION_MODE, TransportSessionMode.default.name)
val networkSessionMode: SharedPreference<TransportSessionMode> = SharedPreference(
get = fun(): TransportSessionMode {
@@ -224,6 +225,7 @@ class AppPreferences(val context: Context) {
private const val SHARED_PREFS_CHAT_LAST_START = "ChatLastStart"
private const val SHARED_PREFS_DEVELOPER_TOOLS = "DeveloperTools"
private const val SHARED_PREFS_NETWORK_USE_SOCKS_PROXY = "NetworkUseSocksProxy"
private const val SHARED_PREFS_NETWORK_PROXY_HOST_PORT = "NetworkProxyHostPort"
private const val SHARED_PREFS_NETWORK_SESSION_MODE = "NetworkSessionMode"
private const val SHARED_PREFS_NETWORK_HOST_MODE = "NetworkHostMode"
private const val SHARED_PREFS_NETWORK_REQUIRED_HOST_MODE = "NetworkRequiredHostMode"
@@ -1765,7 +1767,16 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
fun getNetCfg(): NetCfg {
val useSocksProxy = appPrefs.networkUseSocksProxy.get()
val socksProxy = if (useSocksProxy) ":9050" else null
val proxyHostPort = appPrefs.networkProxyHostPort.get()
val socksProxy = if (useSocksProxy) {
if (proxyHostPort?.startsWith("localhost:") == true) {
proxyHostPort.removePrefix("localhost")
} else {
proxyHostPort ?: ":9050"
}
} else {
null
}
val hostMode = HostMode.valueOf(appPrefs.networkHostMode.get()!!)
val requiredHostMode = appPrefs.networkRequiredHostMode.get()
val sessionMode = appPrefs.networkSessionMode.get()
@@ -1,6 +1,5 @@
package chat.simplex.app.views.chat
import android.app.Activity
import android.content.res.Configuration
import android.graphics.Bitmap
import android.net.Uri
@@ -134,7 +133,6 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: () -> Unit) {
searchText,
useLinkPreviews = useLinkPreviews,
linkMode = chatModel.simplexLinkMode.value,
allowVideoAttachment = chatModel.controller.appPrefs.xftpSendEnabled.get(),
chatModelIncognito = chatModel.incognito.value,
back = {
hideKeyboard(view)
@@ -308,7 +306,6 @@ fun ChatLayout(
searchValue: State<String>,
useLinkPreviews: Boolean,
linkMode: SimplexLinkMode,
allowVideoAttachment: Boolean,
chatModelIncognito: Boolean,
back: () -> Unit,
info: () -> Unit,
@@ -340,7 +337,6 @@ fun ChatLayout(
sheetContent = {
ChooseAttachmentView(
attachmentOption,
allowVideoAttachment,
hide = { scope.launch { attachmentBottomSheetState.hide() } }
)
},
@@ -1083,7 +1079,6 @@ fun PreviewChatLayout() {
searchValue,
useLinkPreviews = true,
linkMode = SimplexLinkMode.DESCRIPTION,
allowVideoAttachment = true,
chatModelIncognito = false,
back = {},
info = {},
@@ -1144,7 +1139,6 @@ fun PreviewGroupChatLayout() {
searchValue,
useLinkPreviews = true,
linkMode = SimplexLinkMode.DESCRIPTION,
allowVideoAttachment = true,
chatModelIncognito = false,
back = {},
info = {},
@@ -4,22 +4,29 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Videocam
import androidx.compose.material.icons.outlined.Close
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.app.R
import chat.simplex.app.model.durationText
import chat.simplex.app.ui.theme.DEFAULT_PADDING_HALF
import chat.simplex.app.ui.theme.HighOrLowlight
import chat.simplex.app.views.chat.item.SentColorLight
import chat.simplex.app.views.helpers.UploadContent
import chat.simplex.app.views.helpers.base64ToBitmap
@Composable
fun ComposeImageView(images: List<String>, cancelImages: () -> Unit, cancelEnabled: Boolean) {
fun ComposeImageView(media: ComposePreview.MediaPreview, cancelImages: () -> Unit, cancelEnabled: Boolean) {
Row(
Modifier
.padding(top = 8.dp)
@@ -31,13 +38,32 @@ fun ComposeImageView(images: List<String>, cancelImages: () -> Unit, cancelEnabl
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(DEFAULT_PADDING_HALF),
) {
items(images.size) { index ->
val imageBitmap = base64ToBitmap(images[index]).asImageBitmap()
Image(
imageBitmap,
"preview image",
modifier = Modifier.widthIn(max = 80.dp).height(60.dp)
)
itemsIndexed(media.images) { index, item ->
val content = media.content[index]
if (content is UploadContent.Video) {
Box(contentAlignment = Alignment.Center) {
val imageBitmap = base64ToBitmap(item).asImageBitmap()
Image(
imageBitmap,
"preview video",
modifier = Modifier.widthIn(max = 80.dp).height(60.dp)
)
Icon(
Icons.Default.Videocam,
"preview video",
Modifier
.size(20.dp),
tint = Color.White
)
}
} else {
val imageBitmap = base64ToBitmap(item).asImageBitmap()
Image(
imageBitmap,
"preview image",
modifier = Modifier.widthIn(max = 80.dp).height(60.dp)
)
}
}
}
if (cancelEnabled) {
@@ -9,12 +9,11 @@ import android.content.*
import android.content.pm.PackageManager
import android.graphics.*
import android.graphics.drawable.AnimatedImageDrawable
import android.media.MediaMetadataRetriever
import android.net.Uri
import android.os.Build
import android.provider.MediaStore
import android.webkit.MimeTypeMap
import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContract
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
@@ -49,8 +48,7 @@ import java.nio.file.Files
sealed class ComposePreview {
@Serializable object NoPreview: ComposePreview()
@Serializable class CLinkPreview(val linkPreview: LinkPreview?): ComposePreview()
@Serializable class ImagePreview(val images: List<String>, val content: List<UploadContent>): ComposePreview()
@Serializable class VideoPreview(val images: List<String>, val content: List<UploadContent>): ComposePreview()
@Serializable class MediaPreview(val images: List<String>, val content: List<UploadContent>): ComposePreview()
@Serializable data class VoicePreview(val voice: String, val durationMs: Int, val finished: Boolean): ComposePreview()
@Serializable class FilePreview(val fileName: String, val uri: Uri): ComposePreview()
}
@@ -96,8 +94,7 @@ data class ComposeState(
val sendEnabled: () -> Boolean
get() = {
val hasContent = when (preview) {
is ComposePreview.ImagePreview -> true
is ComposePreview.VideoPreview -> true
is ComposePreview.MediaPreview -> true
is ComposePreview.VoicePreview -> true
is ComposePreview.FilePreview -> true
else -> message.isNotEmpty() || liveMessage != null
@@ -110,8 +107,7 @@ data class ComposeState(
val linkPreviewAllowed: Boolean
get() =
when (preview) {
is ComposePreview.ImagePreview -> false
is ComposePreview.VideoPreview -> false
is ComposePreview.MediaPreview -> false
is ComposePreview.VoicePreview -> false
is ComposePreview.FilePreview -> false
else -> useLinkPreviews
@@ -161,8 +157,8 @@ fun chatItemPreview(chatItem: ChatItem): ComposePreview {
is MsgContent.MCText -> ComposePreview.NoPreview
is MsgContent.MCLink -> ComposePreview.CLinkPreview(linkPreview = mc.preview)
// TODO: include correct type
is MsgContent.MCImage -> ComposePreview.ImagePreview(images = listOf(mc.image), listOf(UploadContent.SimpleImage(getAppFileUri(fileName))))
is MsgContent.MCVideo -> ComposePreview.VideoPreview(images = listOf(mc.image), listOf(UploadContent.SimpleImage(getAppFileUri(fileName))))
is MsgContent.MCImage -> ComposePreview.MediaPreview(images = listOf(mc.image), listOf(UploadContent.SimpleImage(getAppFileUri(fileName))))
is MsgContent.MCVideo -> ComposePreview.MediaPreview(images = listOf(mc.image), listOf(UploadContent.SimpleImage(getAppFileUri(fileName))))
is MsgContent.MCVoice -> ComposePreview.VoicePreview(voice = fileName, mc.duration / 1000, true)
is MsgContent.MCFile -> ComposePreview.FilePreview(fileName, getAppFileUri(fileName))
is MsgContent.MCUnknown, null -> ComposePreview.NoPreview
@@ -192,7 +188,7 @@ fun ComposeView(
val bitmap: Bitmap? = getBitmapFromUri(uri)
if (bitmap != null) {
val imagePreview = resizeImageToStrSize(bitmap, maxDataSize = 14000)
composeState.value = composeState.value.copy(preview = ComposePreview.ImagePreview(listOf(imagePreview), listOf(UploadContent.SimpleImage(uri))))
composeState.value = composeState.value.copy(preview = ComposePreview.MediaPreview(listOf(imagePreview), listOf(UploadContent.SimpleImage(uri))))
}
}
}
@@ -203,52 +199,50 @@ fun ComposeView(
Toast.makeText(context, generalGetString(R.string.toast_permission_denied), Toast.LENGTH_SHORT).show()
}
}
val processPickedImage = { uris: List<Uri>, text: String? ->
val processPickedMedia = { uris: List<Uri>, text: String? ->
val content = ArrayList<UploadContent>()
val imagesPreview = ArrayList<String>()
uris.forEach { uri ->
val drawable = getDrawableFromUri(uri)
var bitmap: Bitmap? = if (drawable != null) getBitmapFromUri(uri) else null
val isAnimNewApi = Build.VERSION.SDK_INT >= 28 && drawable is AnimatedImageDrawable
val isAnimOldApi = Build.VERSION.SDK_INT < 28 &&
(getFileName(SimplexApp.context, uri)?.endsWith(".gif") == true || getFileName(SimplexApp.context, uri)?.endsWith(".webp") == true)
if (isAnimNewApi || isAnimOldApi) {
// It's a gif or webp
val fileSize = getFileSize(context, uri)
if (fileSize != null && fileSize <= maxFileSize) {
content.add(UploadContent.AnimatedImage(uri))
} else {
bitmap = null
AlertManager.shared.showAlertMsg(
generalGetString(R.string.large_file),
String.format(generalGetString(R.string.maximum_supported_file_size), formatBytes(maxFileSize))
)
var bitmap: Bitmap? = null
val isImage = MimeTypeMap.getSingleton().getMimeTypeFromExtension(getFileName(SimplexApp.context, uri)?.split(".")?.last())?.contains("image/") == true
when {
isImage -> {
// Image
val drawable = getDrawableFromUri(uri)
bitmap = if (drawable != null) getBitmapFromUri(uri) else null
val isAnimNewApi = Build.VERSION.SDK_INT >= 28 && drawable is AnimatedImageDrawable
val isAnimOldApi = Build.VERSION.SDK_INT < 28 &&
(getFileName(SimplexApp.context, uri)?.endsWith(".gif") == true || getFileName(SimplexApp.context, uri)?.endsWith(".webp") == true)
if (isAnimNewApi || isAnimOldApi) {
// It's a gif or webp
val fileSize = getFileSize(context, uri)
if (fileSize != null && fileSize <= maxFileSize) {
content.add(UploadContent.AnimatedImage(uri))
} else {
bitmap = null
AlertManager.shared.showAlertMsg(
generalGetString(R.string.large_file),
String.format(generalGetString(R.string.maximum_supported_file_size), formatBytes(maxFileSize))
)
}
} else {
content.add(UploadContent.SimpleImage(uri))
}
}
else -> {
// Video
val res = getBitmapFromVideo(uri)
bitmap = res.preview
val durationMs = res.duration
content.add(UploadContent.Video(uri, durationMs?.div(1000)?.toInt() ?: 0))
}
} else {
content.add(UploadContent.SimpleImage(uri))
}
if (bitmap != null) {
imagesPreview.add(resizeImageToStrSize(bitmap, maxDataSize = 14000))
}
}
if (imagesPreview.isNotEmpty()) {
composeState.value = composeState.value.copy(message = text ?: composeState.value.message, preview = ComposePreview.ImagePreview(imagesPreview, content))
}
}
val processPickedVideo = { uris: List<Uri>, text: String? ->
val content = ArrayList<UploadContent>()
val imagesPreview = ArrayList<String>()
uris.forEach { uri ->
val (bitmap: Bitmap?, durationMs: Long?) = getBitmapFromVideo(uri)
content.add(UploadContent.Video(uri, durationMs?.div(1000)?.toInt() ?: 0))
if (bitmap != null) {
imagesPreview.add(resizeImageToStrSize(bitmap, maxDataSize = 14000))
}
}
if (imagesPreview.isNotEmpty()) {
composeState.value = composeState.value.copy(message = text ?: composeState.value.message, preview = ComposePreview.VideoPreview(imagesPreview, content))
composeState.value = composeState.value.copy(message = text ?: composeState.value.message, preview = ComposePreview.MediaPreview(imagesPreview, content))
}
}
val processPickedFile = { uri: Uri?, text: String? ->
@@ -267,10 +261,7 @@ fun ComposeView(
}
}
}
val galleryImageLauncher = rememberLauncherForActivityResult(contract = PickMultipleImagesFromGallery()) { processPickedImage(it, null) }
val galleryImageLauncherFallback = rememberGetMultipleContentsLauncher { processPickedImage(it, null) }
val galleryVideoLauncher = rememberLauncherForActivityResult(contract = PickMultipleVideosFromGallery()) { processPickedVideo(it, null) }
val galleryVideoLauncherFallback = rememberGetMultipleContentsLauncher { processPickedVideo(it, null) }
val mediaLauncherWithFiles = rememberGetMultipleContentsLauncher { processPickedMedia(it, null) }
val filesLauncher = rememberGetContentLauncher { processPickedFile(it, null) }
val recState: MutableState<RecordingState> = remember { mutableStateOf(RecordingState.NotStarted) }
@@ -287,20 +278,8 @@ fun ComposeView(
}
attachmentOption.value = null
}
AttachmentOption.PickImage -> {
try {
galleryImageLauncher.launch(0)
} catch (e: ActivityNotFoundException) {
galleryImageLauncherFallback.launch("image/*")
}
attachmentOption.value = null
}
AttachmentOption.PickVideo -> {
try {
galleryVideoLauncher.launch(0)
} catch (e: ActivityNotFoundException) {
galleryVideoLauncherFallback.launch("video/*")
}
AttachmentOption.PickMedia -> {
mediaLauncherWithFiles.launch(if (xftpSendEnabled) "image/*;video/*" else "image/*")
attachmentOption.value = null
}
AttachmentOption.PickFile -> {
@@ -460,28 +439,20 @@ fun ComposeView(
when (val preview = cs.preview) {
ComposePreview.NoPreview -> msgs.add(MsgContent.MCText(msgText))
is ComposePreview.CLinkPreview -> msgs.add(checkLinkPreview())
is ComposePreview.ImagePreview -> {
is ComposePreview.MediaPreview -> {
preview.content.forEachIndexed { index, it ->
val file = when (it) {
is UploadContent.SimpleImage -> saveImage(context, it.uri)
is UploadContent.AnimatedImage -> saveAnimImage(context, it.uri)
else -> return@forEachIndexed
}
if (file != null) {
files.add(file)
msgs.add(MsgContent.MCImage(if (preview.content.lastIndex == index) msgText else "", preview.images[index]))
}
}
}
is ComposePreview.VideoPreview -> {
preview.content.forEachIndexed { index, it ->
val file = when (it) {
is UploadContent.Video -> saveFileFromUri(context, it.uri)
else -> return@forEachIndexed
}
if (file != null) {
files.add(file)
msgs.add(MsgContent.MCVideo(if (preview.content.lastIndex == index) msgText else "", preview.images[index], it.duration))
if (it is UploadContent.Video) {
msgs.add(MsgContent.MCVideo(if (preview.content.lastIndex == index) msgText else "", preview.images[index], it.duration))
} else {
msgs.add(MsgContent.MCImage(if (preview.content.lastIndex == index) msgText else "", preview.images[index]))
}
}
}
}
@@ -516,8 +487,7 @@ fun ComposeView(
)
}
if (sent == null &&
(cs.preview is ComposePreview.ImagePreview ||
cs.preview is ComposePreview.VideoPreview ||
(cs.preview is ComposePreview.MediaPreview ||
cs.preview is ComposePreview.FilePreview ||
cs.preview is ComposePreview.VoicePreview)
) {
@@ -642,13 +612,8 @@ fun ComposeView(
when (val preview = composeState.value.preview) {
ComposePreview.NoPreview -> {}
is ComposePreview.CLinkPreview -> ComposeLinkView(preview.linkPreview, ::cancelLinkPreview)
is ComposePreview.ImagePreview -> ComposeImageView(
preview.images,
::cancelImages,
cancelEnabled = !composeState.value.editing
)
is ComposePreview.VideoPreview -> ComposeImageView(
preview.images,
is ComposePreview.MediaPreview -> ComposeImageView(
preview,
::cancelImages,
cancelEnabled = !composeState.value.editing
)
@@ -686,7 +651,7 @@ fun ComposeView(
when (val shared = chatModel.sharedContent.value) {
is SharedContent.Text -> onMessageChange(shared.text)
is SharedContent.Images -> processPickedImage(shared.uris, shared.text)
is SharedContent.Images -> processPickedMedia(shared.uris, shared.text)
is SharedContent.File -> processPickedFile(shared.uri, shared.text)
null -> {}
}
@@ -75,7 +75,7 @@ fun SendMsgView(
) {
Box(Modifier.padding(vertical = 8.dp)) {
val cs = composeState.value
val showProgress = cs.inProgress && (cs.preview is ComposePreview.ImagePreview || cs.preview is ComposePreview.VideoPreview || cs.preview is ComposePreview.FilePreview)
val showProgress = cs.inProgress && (cs.preview is ComposePreview.MediaPreview || cs.preview is ComposePreview.FilePreview)
val showVoiceButton = cs.message.isEmpty() && showVoiceRecordIcon && !composeState.value.editing &&
cs.liveMessage == null && (cs.preview is ComposePreview.NoPreview || recState.value is RecordingState.Started)
val showDeleteTextButton = rememberSaveable { mutableStateOf(false) }
@@ -86,7 +86,7 @@ fun ChatPreviewView(
fun attachment(): Pair<ImageVector, String?>? =
when (draft.preview) {
is ComposePreview.FilePreview -> Icons.Filled.InsertDriveFile to draft.preview.fileName
is ComposePreview.ImagePreview -> Icons.Outlined.Image to null
is ComposePreview.MediaPreview -> Icons.Outlined.Image to null
is ComposePreview.VoicePreview -> Icons.Filled.PlayArrow to durationText(draft.preview.durationMs / 1000)
else -> null
}
@@ -366,7 +366,7 @@ fun PassphraseField(
showStrength: Boolean = false,
isValid: (String) -> Boolean,
keyboardActions: KeyboardActions = KeyboardActions(),
dependsOn: MutableState<String>? = null,
dependsOn: State<Any?>? = null,
) {
var valid by remember { mutableStateOf(validKey(key.value)) }
var showKey by remember { mutableStateOf(false) }
@@ -479,7 +479,7 @@ private fun passphraseEntropy(s: String): Double {
return s.length * log2(poolSize.toDouble())
}
private enum class PassphraseStrength(val color: Color) {
enum class PassphraseStrength(val color: Color) {
VERY_WEAK(Color.Red), WEAK(WarningOrange), REASONABLE(WarningYellow), STRONG(SimplexGreen);
companion object {
@@ -14,15 +14,13 @@ import chat.simplex.app.views.newchat.ActionButton
sealed class AttachmentOption {
object TakePhoto: AttachmentOption()
object PickImage: AttachmentOption()
object PickVideo: AttachmentOption()
object PickMedia: AttachmentOption()
object PickFile: AttachmentOption()
}
@Composable
fun ChooseAttachmentView(
attachmentOption: MutableState<AttachmentOption?>,
allowVideoAttachment: Boolean,
hide: () -> Unit
) {
Box(
@@ -44,15 +42,9 @@ fun ChooseAttachmentView(
hide()
}
ActionButton(null, stringResource(R.string.from_gallery_button), icon = Icons.Outlined.Collections) {
attachmentOption.value = AttachmentOption.PickImage
attachmentOption.value = AttachmentOption.PickMedia
hide()
}
if (allowVideoAttachment) {
ActionButton(null, stringResource(R.string.from_gallery_button), icon = Icons.Outlined.Videocam) {
attachmentOption.value = AttachmentOption.PickVideo
hide()
}
}
ActionButton(null, stringResource(R.string.choose_file), icon = Icons.Outlined.InsertDriveFile) {
attachmentOption.value = AttachmentOption.PickFile
hide()
@@ -3,10 +3,15 @@ package chat.simplex.app.views.helpers
import androidx.compose.foundation.background
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.shape.ZeroCornerSize
import androidx.compose.foundation.text.*
import androidx.compose.material.*
import androidx.compose.material.TextFieldDefaults.indicatorLine
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material.icons.outlined.Error
import androidx.compose.runtime.*
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
@@ -14,13 +19,18 @@ import androidx.compose.ui.focus.*
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.*
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.app.ui.theme.HighOrLowlight
import chat.simplex.app.views.database.PassphraseStrength
import chat.simplex.app.views.database.validKey
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.launch
@OptIn(ExperimentalComposeUiApi::class)
@Composable
@@ -110,3 +120,109 @@ fun DefaultBasicTextField(
}
)
}
@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun DefaultConfigurableTextField(
state: MutableState<TextFieldValue>,
placeholder: String,
modifier: Modifier = Modifier,
showPasswordStrength: Boolean = false,
isValid: (String) -> Boolean,
keyboardActions: KeyboardActions = KeyboardActions(),
keyboardType: KeyboardType = KeyboardType.Text,
dependsOn: State<Any?>? = null,
) {
var valid by remember { mutableStateOf(validKey(state.value.text)) }
var showKey by remember { mutableStateOf(false) }
val icon = if (valid) {
if (showKey) Icons.Filled.VisibilityOff else Icons.Filled.Visibility
} else Icons.Outlined.Error
val iconColor = if (valid) {
if (showPasswordStrength && state.value.text.isNotEmpty()) PassphraseStrength.check(state.value.text).color else HighOrLowlight
} else Color.Red
val keyboard = LocalSoftwareKeyboardController.current
val keyboardOptions = KeyboardOptions(
imeAction = if (keyboardActions.onNext != null) ImeAction.Next else ImeAction.Done,
autoCorrect = keyboardType != KeyboardType.Password,
keyboardType = keyboardType
)
val enabled = true
val colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Unspecified,
textColor = MaterialTheme.colors.onBackground,
focusedIndicatorColor = Color.Unspecified,
unfocusedIndicatorColor = Color.Unspecified,
)
val color = MaterialTheme.colors.onBackground
val shape = MaterialTheme.shapes.small.copy(bottomEnd = ZeroCornerSize, bottomStart = ZeroCornerSize)
val interactionSource = remember { MutableInteractionSource() }
BasicTextField(
value = state.value,
modifier = modifier
.fillMaxWidth()
.background(colors.backgroundColor(enabled).value, shape)
.indicatorLine(enabled, false, interactionSource, colors)
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth,
minHeight = TextFieldDefaults.MinHeight
),
onValueChange = {
state.value = it
},
cursorBrush = SolidColor(colors.cursorColor(false).value),
visualTransformation = if (showKey || keyboardType != KeyboardType.Password)
VisualTransformation.None
else
VisualTransformation { TransformedText(AnnotatedString(it.text.map { "*" }.joinToString(separator = "")), OffsetMapping.Identity) },
keyboardOptions = keyboardOptions,
keyboardActions = KeyboardActions(onDone = {
keyboard?.hide()
keyboardActions.onDone?.invoke(this)
}),
singleLine = true,
textStyle = TextStyle.Default.copy(
color = color,
fontWeight = FontWeight.Normal,
fontSize = 16.sp
),
interactionSource = interactionSource,
decorationBox = @Composable { innerTextField ->
TextFieldDefaults.TextFieldDecorationBox(
value = state.value.text,
innerTextField = innerTextField,
placeholder = { Text(placeholder, color = HighOrLowlight) },
singleLine = true,
enabled = enabled,
isError = !valid,
trailingIcon = {
if (keyboardType == KeyboardType.Password || !valid) {
IconButton({ showKey = !showKey }) {
Icon(icon, null, tint = iconColor)
}
}
},
interactionSource = interactionSource,
contentPadding = TextFieldDefaults.textFieldWithLabelPadding(start = 0.dp, end = 0.dp),
visualTransformation = VisualTransformation.None,
colors = colors
)
}
)
LaunchedEffect(Unit) {
launch {
snapshotFlow { state.value }
.distinctUntilChanged()
.collect {
valid = isValid(it.text)
}
}
launch {
snapshotFlow { dependsOn?.value }
.distinctUntilChanged()
.collect {
valid = isValid(state.value.text)
}
}
}
}
@@ -174,7 +174,18 @@ fun rememberGetContentLauncher(cb: (Uri?) -> Unit): ManagedActivityResultLaunche
@Composable
fun rememberGetMultipleContentsLauncher(cb: (List<Uri>) -> Unit): ManagedActivityResultLauncher<String, List<Uri>> =
rememberLauncherForActivityResult(contract = ActivityResultContracts.GetMultipleContents(), cb)
rememberLauncherForActivityResult(contract = GetMultipleContentsAndMimeTypes(), cb)
class GetMultipleContentsAndMimeTypes: ActivityResultContracts.GetMultipleContents() {
override fun createIntent(context: Context, input: String): Intent {
val mimeTypes = input.split(";")
return super.createIntent(context, mimeTypes[0]).apply {
if (mimeTypes.isNotEmpty()) {
putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes.toTypedArray())
}
}
}
}
fun ManagedActivityResultLauncher<Void?, Uri?>.launchWithFallback() {
try {
@@ -102,15 +102,6 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) {
saveCfg(newCfg)
}
fun updateSettingsDialog(action: () -> Unit) {
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.update_network_settings_question),
text = generalGetString(R.string.updating_settings_will_reconnect_client_to_all_servers),
confirmText = generalGetString(R.string.update_network_settings_confirmation),
onConfirm = action
)
}
AdvancedNetworkSettingsLayout(
networkTCPConnectTimeout,
networkTCPTimeout,
@@ -121,10 +112,10 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) {
networkTCPKeepIntvl,
networkTCPKeepCnt,
resetDisabled = if (currentCfg.value.useSocksProxy) currentCfg.value == NetCfg.proxyDefaults else currentCfg.value == NetCfg.defaults,
reset = { updateSettingsDialog(::reset) },
reset = { showUpdateNetworkSettingsDialog(::reset) },
footerDisabled = buildCfg() == currentCfg.value,
revert = { updateView(currentCfg.value) },
save = { updateSettingsDialog { saveCfg(buildCfg()) } }
save = { showUpdateNetworkSettingsDialog { saveCfg(buildCfg()) } }
)
}
@@ -415,6 +406,15 @@ fun FooterButton(icon: ImageVector, title: String, action: () -> Unit, disabled:
}
}
fun showUpdateNetworkSettingsDialog(action: () -> Unit) {
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.update_network_settings_question),
text = generalGetString(R.string.updating_settings_will_reconnect_client_to_all_servers),
confirmText = generalGetString(R.string.update_network_settings_confirmation),
onConfirm = action
)
}
@Preview(showBackground = true)
@Composable
fun PreviewAdvancedNetworkSettingsLayout() {
@@ -1,18 +1,26 @@
package chat.simplex.app.views.usersettings
import SectionCustomFooter
import SectionDivider
import SectionItemView
import SectionItemWithValue
import SectionSpacer
import SectionTextFooter
import SectionView
import SectionViewSelectable
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.*
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import chat.simplex.app.R
@@ -44,6 +52,7 @@ fun NetworkAndServersView(
networkUseSocksProxy = networkUseSocksProxy,
onionHosts = onionHosts,
sessionMode = sessionMode,
proxyPort = remember { derivedStateOf { chatModel.controller.appPrefs.networkProxyHostPort.state.value?.split(":")?.lastOrNull()?.toIntOrNull() ?: 9050 } },
showModal = showModal,
showSettingsModal = showSettingsModal,
showCustomModal = showCustomModal,
@@ -87,7 +96,7 @@ fun NetworkAndServersView(
OnionHosts.PREFER -> generalGetString(R.string.network_use_onion_hosts_prefer_desc_in_alert)
OnionHosts.REQUIRED -> generalGetString(R.string.network_use_onion_hosts_required_desc_in_alert)
}
updateNetworkSettingsDialog(
showUpdateNetworkSettingsDialog(
title = generalGetString(R.string.update_onion_hosts_settings_question),
startsWith,
onDismiss = {
@@ -114,7 +123,7 @@ fun NetworkAndServersView(
TransportSessionMode.User -> generalGetString(R.string.network_session_mode_user_description)
TransportSessionMode.Entity -> generalGetString(R.string.network_session_mode_entity_description)
}
updateNetworkSettingsDialog(
showUpdateNetworkSettingsDialog(
title = generalGetString(R.string.update_network_session_mode_question),
startsWith,
onDismiss = { sessionMode.value = prevValue }
@@ -140,6 +149,7 @@ fun NetworkAndServersView(
networkUseSocksProxy: MutableState<Boolean>,
onionHosts: MutableState<OnionHosts>,
sessionMode: MutableState<TransportSessionMode>,
proxyPort: State<Int>,
showModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit),
@@ -163,7 +173,7 @@ fun NetworkAndServersView(
}
SectionItemView {
UseSocksProxySwitch(networkUseSocksProxy, toggleSocksProxy)
UseSocksProxySwitch(networkUseSocksProxy, proxyPort, toggleSocksProxy, showSettingsModal)
}
SectionDivider()
UseOnionHosts(onionHosts, networkUseSocksProxy, showSettingsModal, useOnion)
@@ -174,7 +184,10 @@ fun NetworkAndServersView(
}
SettingsActionItem(Icons.Outlined.Cable, stringResource(R.string.network_settings), showSettingsModal { AdvancedNetworkSettingsView(it) })
}
Spacer(Modifier.height(8.dp))
if (networkUseSocksProxy.value) {
SectionCustomFooter { Text(annotatedStringResource(R.string.disable_onion_hosts_when_not_supported)) }
}
Spacer(Modifier.height(16.dp))
SectionView(generalGetString(R.string.settings_section_title_calls)) {
SettingsActionItem(Icons.Outlined.ElectricalServices, stringResource(R.string.webrtc_ice_servers), showModal { RTCServersView(it) })
}
@@ -184,7 +197,9 @@ fun NetworkAndServersView(
@Composable
fun UseSocksProxySwitch(
networkUseSocksProxy: MutableState<Boolean>,
toggleSocksProxy: (Boolean) -> Unit
proxyPort: State<Int>,
toggleSocksProxy: (Boolean) -> Unit,
showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit)
) {
Row(
Modifier.fillMaxWidth(),
@@ -201,7 +216,19 @@ fun UseSocksProxySwitch(
stringResource(R.string.network_socks_toggle),
tint = HighOrLowlight
)
Text(stringResource(R.string.network_socks_toggle))
if (networkUseSocksProxy.value) {
Row {
Text(generalGetString(R.string.network_socks_toggle_use_socks_proxy) + " (")
Text(
generalGetString(R.string.network_proxy_port).format(proxyPort.value),
Modifier.clickable { showSettingsModal { SockProxySettings(it) }() },
color = MaterialTheme.colors.primary
)
Text(")")
}
} else {
Text(stringResource(R.string.network_socks_toggle))
}
}
Switch(
checked = networkUseSocksProxy.value,
@@ -214,6 +241,83 @@ fun UseSocksProxySwitch(
}
}
@Composable
fun SockProxySettings(m: ChatModel) {
Column(
Modifier
.fillMaxWidth()
.verticalScroll(rememberScrollState())
.padding(bottom = DEFAULT_BOTTOM_PADDING),
) {
val defaultHostPort = remember { "localhost:9050" }
AppBarTitle(generalGetString(R.string.network_socks_proxy_settings))
val hostPort by remember { m.controller.appPrefs.networkProxyHostPort.state }
val hostUnsaved = rememberSaveable(stateSaver = TextFieldValue.Saver) {
mutableStateOf(TextFieldValue(hostPort?.split(":")?.firstOrNull() ?: "localhost"))
}
val portUnsaved = rememberSaveable(stateSaver = TextFieldValue.Saver) {
mutableStateOf(TextFieldValue(hostPort?.split(":")?.lastOrNull() ?: "9050"))
}
val save = {
withBGApi {
m.controller.appPrefs.networkProxyHostPort.set(hostUnsaved.value.text + ":" + portUnsaved.value.text)
m.controller.apiSetNetworkConfig(m.controller.getNetCfg())
}
}
SectionView {
SectionItemView {
ResetToDefaultsButton({
showUpdateNetworkSettingsDialog {
m.controller.appPrefs.networkProxyHostPort.set(defaultHostPort)
val newHost = defaultHostPort.split(":").first()
val newPort = defaultHostPort.split(":").last()
hostUnsaved.value = hostUnsaved.value.copy(newHost, TextRange(newHost.length))
portUnsaved.value = portUnsaved.value.copy(newPort, TextRange(newPort.length))
save()
}
}, disabled = hostPort == defaultHostPort)
}
SectionDivider()
SectionItemView {
DefaultConfigurableTextField(
hostUnsaved,
stringResource(R.string.host_verb),
modifier = Modifier,
isValid = ::validHost,
keyboardActions = KeyboardActions(onNext = { defaultKeyboardAction(ImeAction.Next) }),
keyboardType = KeyboardType.Text,
)
}
SectionDivider()
SectionItemView {
DefaultConfigurableTextField(
portUnsaved,
stringResource(R.string.port_verb),
modifier = Modifier,
isValid = ::validPort,
keyboardActions = KeyboardActions(onDone = { defaultKeyboardAction(ImeAction.Done); save() }),
keyboardType = KeyboardType.Number,
)
}
}
SectionCustomFooter {
NetworkSectionFooter(
revert = {
val prevHost = m.controller.appPrefs.networkProxyHostPort.get()?.split(":")?.firstOrNull() ?: "localhost"
val prevPort = m.controller.appPrefs.networkProxyHostPort.get()?.split(":")?.lastOrNull() ?: "9050"
hostUnsaved.value = hostUnsaved.value.copy(prevHost, TextRange(prevHost.length))
portUnsaved.value = portUnsaved.value.copy(prevPort, TextRange(prevPort.length))
},
save = { showUpdateNetworkSettingsDialog { save() } },
revertDisabled = hostPort == (hostUnsaved.value.text + ":" + portUnsaved.value.text),
saveDisabled = hostPort == (hostUnsaved.value.text + ":" + portUnsaved.value.text) ||
remember { derivedStateOf { !validHost(hostUnsaved.value.text) } }.value ||
remember { derivedStateOf { !validPort(portUnsaved.value.text) } }.value
)
}
}
}
@Composable
private fun UseOnionHosts(
onionHosts: MutableState<OnionHosts>,
@@ -282,7 +386,32 @@ private fun SessionModePicker(
)
}
private fun updateNetworkSettingsDialog(
@Composable
private fun NetworkSectionFooter(revert: () -> Unit, save: () -> Unit, revertDisabled: Boolean, saveDisabled: Boolean) {
Row(
Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
FooterButton(Icons.Outlined.Replay, stringResource(R.string.network_options_revert), revert, revertDisabled)
FooterButton(Icons.Outlined.Check, stringResource(R.string.network_options_save), save, saveDisabled)
}
}
// https://stackoverflow.com/a/106223
private fun validHost(s: String): Boolean {
val validIp = Regex("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$")
val validHostname = Regex("^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])[.])*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$");
return s.matches(validIp) || s.matches(validHostname)
}
// https://ihateregex.io/expr/port/
private fun validPort(s: String): Boolean {
val validPort = Regex("^(6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4})$")
return s.isNotBlank() && s.matches(validPort)
}
private fun showUpdateNetworkSettingsDialog(
title: String,
startsWith: String = "",
message: String = generalGetString(R.string.updating_settings_will_reconnect_client_to_all_servers),
@@ -307,6 +436,7 @@ fun PreviewNetworkAndServersLayout() {
developerTools = true,
xftpSendEnabled = remember { mutableStateOf(true) },
networkUseSocksProxy = remember { mutableStateOf(true) },
proxyPort = remember { mutableStateOf(9050) },
showModal = { {} },
showSettingsModal = { {} },
showCustomModal = { {} },
@@ -1073,7 +1073,7 @@
<string name="enter_password_to_show">Für die Anzeige das Passwort im Suchfeld eingeben</string>
<string name="make_profile_private">Privates Profil erzeugen!</string>
<string name="user_mute">Stummschalten</string>
<string name="tap_to_activate_profile">Tippen Sie, um das Profil zu aktivieren.</string>
<string name="tap_to_activate_profile">Tippen Sie auf das Profil um es zu aktivieren.</string>
<string name="should_be_at_least_one_profile">Es muss mindestens ein Benutzer-Profil vorhanden sein.</string>
<string name="should_be_at_least_one_visible_profile">Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein.</string>
<string name="user_unmute">Stummschaltung aufheben</string>
@@ -1105,10 +1105,10 @@
<string name="settings_section_title_experimenta">EXPERIMENTELL</string>
<string name="database_upgrade">Datenbank-Aktualisierung</string>
<string name="mtr_error_different">Unterschiedlicher Migrationsstand in der App/Datenbank: %s / %s</string>
<string name="downgrade_and_open_chat">Herabstufen und den Chat öffnen</string>
<string name="downgrade_and_open_chat">Datenbank herabstufen und den Chat öffnen</string>
<string name="incompatible_database_version">Inkompatible Datenbank-Version</string>
<string name="database_downgrade_warning">Warnung: Sie könnten einige Daten verlieren!</string>
<string name="database_downgrade">Datenbank-Herabstufung</string>
<string name="database_downgrade">Datenbank auf alte Version herabstufen</string>
<string name="developer_options">Datenbank-IDs und Transport-Isolationsoption.</string>
<string name="mtr_error_no_down_migration">Die Datenbank-Version ist neuer als die App, keine Abwärts-Migration für: %s</string>
<string name="hide_dev_options">Verberge:</string>
@@ -15,7 +15,7 @@
<string name="smp_servers_preset_add">Añadir servidores predefinidos</string>
<string name="all_group_members_will_remain_connected">Todos los miembros del grupo permanecerán conectados.</string>
<string name="allow_irreversible_message_deletion_only_if">Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite.</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore se usará para almacenar de forma segura la frase de contraseña después de reiniciar la aplicación o cambiar la frase de contraseña - permitirá recibir notificaciones.</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore se usará para almacenar de forma segura la contraseña después de reiniciar la aplicación o cambiar la frase de contraseña - permitirá recibir notificaciones.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Permitir a tus contactos enviar mensajes temporales</string>
<string name="allow_your_contacts_to_send_voice_messages">Permitir a tus contactos enviar mensajes de voz.</string>
<string name="chat_preferences_always">siempre</string>
@@ -47,7 +47,7 @@
<string name="accept">Aceptar</string>
<string name="audio_call_no_encryption">llamada de audio (sin cifrado e2e)</string>
<string name="icon_descr_audio_call">llamada de audio</string>
<string name="settings_audio_video_calls">Llamadas y videollamadas</string>
<string name="settings_audio_video_calls">Llamadas y Videollamadas</string>
<string name="icon_descr_audio_off">Audio desactivado</string>
<string name="icon_descr_audio_on">Audio activado</string>
<string name="integrity_msg_bad_id">ID de mensaje erróneo</string>
@@ -55,7 +55,7 @@
<string name="users_delete_all_chats_deleted">Se eliminarán todos los chats y mensajes. ¡No puede deshacerse!</string>
<string name="accept_feature">Aceptar</string>
<string name="allow_to_send_disappearing">Permitir enviar mensajes temporales.</string>
<string name="keychain_is_storing_securely">Android Keystore se utiliza para almacenar de forma segura la frase de contraseña - permite que el servicio de notificación funcione.</string>
<string name="keychain_is_storing_securely">Android Keystore se utiliza para almacenar de forma segura la contraseña - permite que el servicio de notificación funcione.</string>
<string name="users_add">Añadir perfil</string>
<string name="incognito_random_profile_description">Se enviará un perfil aleatorio a tu contacto</string>
<string name="color_primary">Acento</string>
@@ -250,8 +250,8 @@
<string name="icon_descr_email">Email</string>
<string name="connect_button">Conectar</string>
<string name="connect_via_link">Conectar mediante enlace</string>
<string name="database_passphrase_and_export">Base de datos
\ny frase de contraseña</string>
<string name="database_passphrase_and_export">Base de Datos
\ny Contraseña</string>
<string name="contribute">Contribuye</string>
<string name="core_build_timestamp">Core compilado: %s</string>
<string name="core_version">Core versión: v%s</string>
@@ -407,7 +407,7 @@
<string name="v4_4_french_interface">Interfaz en francés</string>
<string name="image_descr">Imagen</string>
<string name="file_not_found">Archivo no encontrado</string>
<string name="how_to_use_simplex_chat">Guia de uso</string>
<string name="how_to_use_simplex_chat">Guía de uso</string>
<string name="full_name_optional__prompt">Nombre completo (opcional)</string>
<string name="callstate_ended">finalizado</string>
<string name="settings_section_title_help">AYUDA</string>
@@ -540,7 +540,7 @@
<string name="ok">OK</string>
<string name="only_stored_on_members_devices">(sólo almacenado por miembros del grupo)</string>
<string name="markdown_help">Ayuda sintaxis markdown</string>
<string name="network_and_servers">Redes y servidores</string>
<string name="network_and_servers">Redes y Servidores</string>
<string name="network_use_onion_hosts_prefer_desc">Se usarán hosts .onion cuando estén disponibles.</string>
<string name="italic">cursiva</string>
<string name="incoming_audio_call">Llamada entrante</string>
@@ -677,7 +677,7 @@
<string name="reject">Rechazar</string>
<string name="open_verb">Abrir</string>
<string name="icon_descr_call_pending_sent">Llamada pendiente</string>
<string name="privacy_and_security">Privacidad y seguridad</string>
<string name="privacy_and_security">Privacidad y Seguridad</string>
<string name="store_passphrase_securely_without_recover">Guarda la contraseña de forma segura, NO podrás acceder al chat si la pierdes.</string>
<string name="save_archive">Guardar archivo</string>
<string name="restore_database_alert_desc">Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer.</string>
@@ -812,7 +812,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">Comienza en GitHub</string>
<string name="star_on_github">Dar 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>
@@ -1023,18 +1023,18 @@
\n- borrar mensajes de los miembros.
\n- desactivar el rol a miembros (a rol \"observador\")</string>
<string name="to_reveal_profile_enter_password">Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página Tus perfiles Chat.</string>
<string name="settings_send_files_via_xftp">Enviar archivos mediante XFTP</string>
<string name="settings_send_files_via_xftp">Enviar vídeos y archivos mediante XFTP</string>
<string name="database_upgrade">Actualización de la base de datos</string>
<string name="database_downgrade">Degradación de la base de datos</string>
<string name="database_downgrade">Volviendo a versión anterior de la base de datos</string>
<string name="invalid_migration_confirmation">Confirmación de migración no válida</string>
<string name="upgrade_and_open_chat">Actualizar y abrir Chat</string>
<string name="database_migrations">Migraciones: %s</string>
<string name="mtr_error_different">migración diferente en la aplicación/base de datos: %s / %s</string>
<string name="downgrade_and_open_chat">Degradar y abrir Chat</string>
<string name="downgrade_and_open_chat">Volver a versión anterior y abrir Chat</string>
<string name="database_downgrade_warning">Atención: ¡puedes perder algunos datos!</string>
<string name="incompatible_database_version">Versión de base de datos incompatible</string>
<string name="confirm_database_upgrades">Confirmar actualizaciones de la bases de datos</string>
<string name="mtr_error_no_down_migration">la versión de la base de datos es más reciente que la aplicación, pero no hay migración hacia abajo para: %s</string>
<string name="mtr_error_no_down_migration">la versión de la base de datos es más reciente que la aplicación, pero no hay migración hacia versión anterior para: %s</string>
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
<string name="developer_options">ID de base de datos y opción de aislamiento de transporte.</string>
<string name="file_will_be_received_when_contact_completes_uploading">El archivo se recibirá cuando tu contacto termine de subirlo.</string>
@@ -1050,4 +1050,13 @@
<string name="unhide_chat_profile">Mostrar perfil de chat</string>
<string name="unhide_profile">Mostrar perfil</string>
<string name="delete_profile">Eliminar perfil</string>
<string name="video_descr">Vídeo</string>
<string name="video_will_be_received_when_contact_is_online">El vídeo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="waiting_for_video">Esperando el vídeo</string>
<string name="icon_descr_video_asked_to_receive">Ha pedido recibir el video</string>
<string name="videos_limit_title">¡Demasiados vídeos!</string>
<string name="icon_descr_video_snd_complete">Vídeo enviado</string>
<string name="video_will_be_received_when_contact_completes_uploading">El vídeo se recibirá cuando tu contacto termine de subirlo.</string>
<string name="videos_limit_desc">Solo se pueden enviar 10 vídeos de forma simultánea</string>
<string name="icon_descr_waiting_for_video">Esperando el vídeo</string>
</resources>
@@ -1022,7 +1022,7 @@
<string name="group_welcome_title">Message d\'accueil</string>
<string name="you_can_hide_or_mute_user_profile">Vous pouvez masquer ou mettre en sourdine un profil d\'utilisateur - maintenez-le enfoncé pour accéder au menu.</string>
<string name="you_will_still_receive_calls_and_ntfs">Vous continuerez à recevoir des appels et des notifications des profils mis en sourdine lorsqu\'ils sont actifs.</string>
<string name="settings_send_files_via_xftp">Envoi de fichiers via XFTP</string>
<string name="settings_send_files_via_xftp">Envoi de vidéos et de fichiers via XFTP</string>
<string name="database_downgrade">Rétrogradation de la base de données</string>
<string name="database_upgrade">Mise à niveau de la base de données</string>
<string name="incompatible_database_version">Version de la base de données incompatible</string>
@@ -1049,4 +1049,13 @@
<string name="cancel_file__question">Annuler le transfert de fichiers \?</string>
<string name="file_transfer_will_be_cancelled_warning">Le transfert de fichiers sera annulé. S\'il est en cours, il sera interrompu.</string>
<string name="profile_password">Mot de passe de profil</string>
<string name="videos_limit_title">Trop de vidéos !</string>
<string name="video_descr">Vidéo</string>
<string name="icon_descr_video_snd_complete">Vidéo envoyée</string>
<string name="video_will_be_received_when_contact_completes_uploading">La vidéo ne sera reçue que lorsque votre contact aura fini de la transférer.</string>
<string name="icon_descr_waiting_for_video">En attente de la vidéo</string>
<string name="waiting_for_video">En attente de la vidéo</string>
<string name="video_will_be_received_when_contact_is_online">La vidéo ne sera reçue que lorsque votre contact sera en ligne. Veuillez patienter ou vérifier plus tard !</string>
<string name="icon_descr_video_asked_to_receive">Requête de réception de la vidéo</string>
<string name="videos_limit_desc">Seulement 10 vidéos peuvent être envoyées en même temps</string>
</resources>
@@ -1022,7 +1022,7 @@
<string name="user_hide">Nascondi</string>
<string name="v4_6_group_welcome_message_descr">Imposta il messaggio mostrato ai nuovi membri!</string>
<string name="user_unmute">Riattiva audio</string>
<string name="settings_send_files_via_xftp">Invia file via XFTP</string>
<string name="settings_send_files_via_xftp">Invia video e file via XFTP</string>
<string name="database_downgrade">Downgrade del database</string>
<string name="database_upgrade">Aggiornamento del database</string>
<string name="incompatible_database_version">Versione del database incompatibile</string>
@@ -1049,4 +1049,13 @@
<string name="delete_chat_profile">Elimina il profilo di chat</string>
<string name="delete_profile">Elimina profilo</string>
<string name="profile_password">Password del profilo</string>
<string name="videos_limit_desc">È possibile inviare solo 10 video contemporaneamente</string>
<string name="videos_limit_title">Troppi video!</string>
<string name="icon_descr_video_asked_to_receive">Richiesta di ricevere il video</string>
<string name="video_descr">Video</string>
<string name="icon_descr_video_snd_complete">Video inviato</string>
<string name="video_will_be_received_when_contact_completes_uploading">Il video verrà ricevuto quando il tuo contatto completerà l\'invio.</string>
<string name="video_will_be_received_when_contact_is_online">Il video verrà ricevuto quando il tuo contatto sarà in linea, attendi o controlla più tardi!</string>
<string name="icon_descr_waiting_for_video">In attesa del video</string>
<string name="waiting_for_video">In attesa del video</string>
</resources>
@@ -12,7 +12,7 @@
<string name="connection_error_auth">연결 오류 (인증)</string>
<string name="smp_server_test_create_queue">대기열 생성</string>
<string name="database_initialization_error_title">데이터베이스를 초기화할 수 없어요</string>
<string name="notifications_mode_service_desc">앱이 백그라운드에서 항상 실행요. 대신 메시지가 도착하자마자 바로 알림이 요.</string>
<string name="notifications_mode_service_desc">앱이 백그라운드에서 항상 실행되어요. 대신 메시지가 도착하자마자 바로 알림이 요.</string>
<string name="notifications_mode_periodic_desc">10분마다 최대 1분간 새 메시지 확인</string>
<string name="notification_contact_connected">연결됨</string>
<string name="notification_preview_somebody">숨긴 대화 상대 :</string>
@@ -95,8 +95,8 @@
<string name="change_database_passphrase_question">데이터베이스 암호를 바꾸겠습니까\?</string>
<string name="confirm_new_passphrase">새로운 암호 확인…</string>
<string name="chat_archive_section">채팅 기록 보관함</string>
<string name="rcv_group_event_changed_your_role">내 역할이 %s 역할로 변경되었습니다.</string>
<string name="rcv_conn_event_switch_queue_phase_changing">주소 바꾸</string>
<string name="rcv_group_event_changed_your_role">내 역할이 %s 역할로 변경.</string>
<string name="rcv_conn_event_switch_queue_phase_changing">주소 바꾸는 중</string>
<string name="snd_conn_event_switch_queue_phase_changing">주소 바꾸기…</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">%s의 주소 바꾸기…</string>
<string name="rcv_group_event_member_connected">연결됨</string>
@@ -119,7 +119,7 @@
<string name="cant_delete_user_profile">사용자 프로필을 삭제할 수 없습니다</string>
<string name="chat_preferences_always">항상</string>
<string name="chat_preferences_contact_allows">대화 상대가 허용했어요.</string>
<string name="contact_preferences">연락처 설정</string>
<string name="contact_preferences">연락처 개별 설정</string>
<string name="allow_voice_messages_only_if">대화 상대도 허용한 경우에만 음성 메시지를 보낼 수 있습니다.</string>
<string name="allow_your_contacts_irreversibly_delete">모두에게서 메시지 영구 삭제 허용하기.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">대화 상대에게 자동 삭제되는 메시지 허용하기.</string>
@@ -166,7 +166,7 @@
<string name="settings_section_title_icon">앱 아이콘</string>
<string name="incognito_random_profile_from_contact_description">링크를 보낸 사람한테 랜덤으로 만들어진 익명 프로필이 보내져요</string>
<string name="network_session_mode_user_description">별도로 분리된 TCP 연결(그리고 SOCKS 자격 증명)이 <b>각각의 채팅 프로필</b>에 사용될 거예요.</string>
<string name="network_session_mode_entity_description">별도로 분리된 TCP 연결(및 SOCKS 자격 증명)이 <b>각각의 연락처 및 그룹 구성원</b>에게 사용될 거예요.
<string name="network_session_mode_entity_description">별도로 분리된 TCP 연결(및 SOCKS 자격 증명)이 <b>각각의 대화 상대 및 그룹 구성원</b>에게 사용될 거예요.
\n<b>참고</b>: 연결이 많은 경우 배터리 및 트래픽 소비가 엄청 높을 수 있고 일부 연결이 실패할 수 있어요.</string>
<string name="icon_descr_asked_to_receive">이미지 수신 요청됨</string>
<string name="v4_6_audio_video_calls">음성 및 영상 전화</string>
@@ -184,7 +184,7 @@
<string name="icon_descr_call_progress">전화 연결 중</string>
<string name="icon_descr_cancel_link_preview">링크 미리보기 취소</string>
<string name="icon_descr_cancel_image_preview">이미지 미리보기 취소</string>
<string name="rcv_group_event_changed_member_role">%s 역할에서 %s 역할 변경되었습니다</string>
<string name="rcv_group_event_changed_member_role">%s 에서 %s 역할 변경</string>
<string name="chat_database_section">채팅 데이터베이스</string>
<string name="alert_title_cant_invite_contacts">대화 상대를 초대할 수 없습니다!</string>
<string name="change_verb">변경</string>
@@ -221,7 +221,7 @@
<string name="delete_message__question">메시지를 삭제할까요\?</string>
<string name="for_me_only">나에게서만 삭제</string>
<string name="delete_member_message__question">멤버의 메시지를 삭제할까요\?</string>
<string name="maximum_supported_file_size">현재 지원되는 최대 파일 크기는 <xliff:g id="maxFileSize">%1$s</xliff:g>입니다.</string>
<string name="maximum_supported_file_size">현재 지원되는 최대 파일 크기는 <xliff:g id="maxFileSize">%1$s</xliff:g> 에요.</string>
<string name="image_decoding_exception_title">디코딩 오류</string>
<string name="button_delete_contact">대화 상대 삭제</string>
<string name="delete_contact_question">연락처를 삭제할까요\?</string>
@@ -242,11 +242,11 @@
<string name="database_passphrase">데이터베이스 비밀번호</string>
<string name="delete_files_and_media_for_all_users">모든 채팅 프로필 파일 삭제</string>
<string name="database_error">데이터베이스 에러</string>
<string name="passphrase_is_different">데이터베이스 비밀번호가 암호 저장소에 저장된 것과 일치하지 않습니다.</string>
<string name="passphrase_is_different">데이터베이스 비밀번호가 암호 저장소에 저장된 것과 일치하지 않아요.</string>
<string name="database_passphrase_is_required">채팅을 열려면 데이터베이스 비밀번호가 필요해요.</string>
<string name="delete_archive">보관된 채팅 삭제</string>
<string name="delete_chat_archive_question">보관된 채팅을 삭제할까요\?</string>
<string name="num_contacts_selected">%d 개의 연락처가 선택되었습니다.</string>
<string name="num_contacts_selected">%d 개의 연락처가 선택되었어요.</string>
<string name="info_row_database_id">데이터베이스 아이디</string>
<string name="users_delete_profile_for">다음 채팅 프로필 삭제</string>
<string name="theme_dark">어둡게</string>
@@ -270,7 +270,7 @@
<string name="ttl_d">%d일</string>
<string name="ttl_days">%d일</string>
<string name="button_delete_group">그룹 삭제</string>
<string name="rcv_conn_event_switch_queue_phase_completed">주소 변경되었습니다.</string>
<string name="rcv_conn_event_switch_queue_phase_completed">주소 변경</string>
<string name="database_encryption_will_be_updated">데이터베이스 비밀번호가 업데이트되고 암호 저장소에 보관됩니다.</string>
<string name="database_will_be_encrypted_and_passphrase_stored">데이터베이스는 암호화되고, 비밀번호는 암호 저장소에 보관될 거에요.</string>
<string name="users_delete_question">채팅 프로필을 삭제할까요\?</string>
@@ -337,7 +337,7 @@
<string name="callstate_waiting_for_answer">응답 대기 중…</string>
<string name="callstate_waiting_for_confirmation">확인 대기 중…</string>
<string name="alert_title_skipped_messages">읽지 않는 메시지</string>
<string name="alert_title_cant_invite_contacts_descr">이 그룹에서 익명 프로필을 사용하고 있어요. 원래 프로필이 노출되는 걸 방지하기 위해 대화 상대 초대가 허용되지 않아요.</string>
<string name="alert_title_cant_invite_contacts_descr">이 그룹에서 익명 프로필을 사용하고 있어요. 원래의 내 프로필이 노출되는 걸 방지하기 위해 대화 상대 초대가 허용되지 않아요.</string>
<string name="button_remove_member">멤버 삭제하기</string>
<string name="chat_item_ttl_seconds">%s 초</string>
<string name="alert_message_group_invitation_expired">이 링크로 참여할 수 없어요. 이미 삭제된 링크에요.</string>
@@ -372,7 +372,7 @@
\n1. 대화 상대가 메시지를 보낸 지 30일 지나서 서버에서 삭제된 경우
\n2. 메시지를 수신하는 데 사용된 서버가 업데이트되고 재부팅된 경우
\n3. 침해된 연결의 경우
\n서버 업데이트를 받으려면 설정을 통해 개발자에게 연락해 주세요.
\n서버 업데이트를 받으려면 설정에서 개발자에게 연락해 주세요.
\n저희 개발팀은 메시지 손실을 방지하기 위해 중복된 서버를 추가할 예정이에요.</string>
<string name="auth_simplex_lock_turned_on">SimpleX 잠금 켜짐</string>
<string name="callstate_received_answer">응답됨…</string>
@@ -387,11 +387,11 @@
<string name="description_via_group_link_incognito">그룹 링크로 익명 채팅</string>
<string name="description_via_group_link">그룹 링크로 채팅</string>
<string name="description_via_one_time_link">일회용 링크로 채팅</string>
<string name="description_you_shared_one_time_link_incognito">일회용 익명 연락처를 공유했어요.</string>
<string name="description_you_shared_one_time_link">일회용 프로필 연락처를 공유했어요.</string>
<string name="description_via_contact_address_link_incognito">상대의 연락처 링크로 익명 채팅</string>
<string name="description_via_contact_address_link">상대의 연락처 링크로 채팅</string>
<string name="description_via_one_time_link_incognito">일회용 연락처로 익명 채팅</string>
<string name="description_you_shared_one_time_link_incognito">일회용 익명 링크를 공유했어요.</string>
<string name="description_you_shared_one_time_link">일회용 링크를 공유했어요.</string>
<string name="description_via_contact_address_link_incognito">상대의 연락처 링크로 익명 연결</string>
<string name="description_via_contact_address_link">상대의 연락처 링크로 연결</string>
<string name="description_via_one_time_link_incognito">일회용 연락처로 익명 연결</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">SMP 서버 주소가 올바른 형식이고 줄로 구분되어 있고 중복이 없는지 확인해 주세요.</string>
<string name="error_saving_smp_servers">SMP 서버 저장 오류</string>
<string name="error_setting_network_config">네트워크 설정 업데이트 오류</string>
@@ -476,7 +476,7 @@
<string name="feature_offered_item">%s 제안</string>
<string name="feature_offered_item_with_param">%s 제안: %2s</string>
<string name="icon_descr_instant_notifications">즉시 알림</string>
<string name="hide_notification"></string>
<string name="hide_notification">기기</string>
<string name="hide_verb">숨기기</string>
<string name="for_everybody">모두에게</string>
<string name="icon_descr_edited">수정됨</string>
@@ -493,7 +493,7 @@
<string name="group_member_role_owner">소유자</string>
<string name="group_member_status_group_deleted">그룹 삭제됨</string>
<string name="group_member_status_invited">초대됨</string>
<string name="group_member_status_removed">삭제</string>
<string name="group_member_status_removed">강퇴</string>
<string name="icon_descr_expand_role">역할 선택지 펼치기</string>
<string name="files_and_media_section">파일 &amp; 미디어</string>
<string name="group_invitation_item_description">그룹으로 초대 <xliff:g id="group_name">%1$s</xliff:g></string>
@@ -568,7 +568,7 @@
<string name="import_database">데이터베이스 가져오기</string>
<string name="import_database_confirmation">가져오기</string>
<string name="incognito">익명 모드</string>
<string name="incognito_info_find">익명 채팅에 사용되는 프로필을 찾으려면 채팅 상단에 있는 연락처 또는 그룹 이름을 탭하세요.</string>
<string name="incognito_info_find">익명 채팅에 사용되는 프로필을 확인하려면 채팅 상단에 있는 연락처 또는 그룹 이름을 탭하세요.</string>
<string name="image_will_be_received_when_contact_completes_uploading">대화 상대가 업로드를 완료하면 이미지가 수신될 거예요.</string>
<string name="image_descr_profile_image">프로필 이미지</string>
<string name="incognito_info_allows">하나의 프로필로 여러 사람과 연락할 필요 없이 무수히 많은 익명 프로필로 연락할 수 있어요.</string>
@@ -616,4 +616,152 @@
<string name="invalid_QR_code">잘못된 QR 코드</string>
<string name="incorrect_code">잘못된 보안 코드!</string>
<string name="invalid_contact_link">잘못된 링크!</string>
<string name="marked_deleted_description">삭제됨으로 표시됨</string>
<string name="moderated_item_description">%s에 의해 조정됨</string>
<string name="live">라이브</string>
<string name="moderated_description">조정됨</string>
<string name="network_error_desc"><xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> 에서 네트워크 연결 상태를 확인한 후 다시 시도하세요.</string>
<string name="la_notice_title_simplex_lock">SimpleX 잠금</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">정보를 보호하려면 SimpleX 잠금을 켜세요.
\n이 기능이 활성화하기 전에 인증을 완료하라는 메시지가 표시될 거예요.</string>
<string name="notification_new_contact_request">새로운 대화 요청</string>
<string name="notification_preview_mode_hidden">숨겨짐</string>
<string name="notification_preview_mode_contact_desc">대화 상대 이름만 표시</string>
<string name="notification_preview_new_message">새로운 메시지</string>
<string name="notifications_mode_off">앱이 열릴 때 실행</string>
<string name="notifications_mode_periodic">주기적으로 실행됨</string>
<string name="notification_display_mode_hidden_desc">연락처 이름 및 메시지 숨기기</string>
<string name="la_notice_turn_on">켜기</string>
<string name="message_delivery_error_desc">대화 상대가 나와의 연결을 삭제했을 가능성이 커요.</string>
<string name="message_delivery_error_title">메시지 전달 오류</string>
<string name="moderate_verb">조정</string>
<string name="moderate_message_will_be_deleted_warning">모든 멤버에게서 메시지가 삭제될 거예요.</string>
<string name="moderate_message_will_be_marked_warning">이 메시지는 모든 멤버에게 조정됨으로 표시될 거예요.</string>
<string name="no_details">세부 정보 없음</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 모바일: <b>모바일 앱에서 열기</b>를 누른 다음 앱에서 <b>연결</b>을 누르세요.</string>
<string name="mark_code_verified">확인됨으로 표시</string>
<string name="network_and_servers">네트워크 및 서버</string>
<string name="new_database_archive">새 데이터베이스 보관함</string>
<string name="new_member_role">새 멤버 역할</string>
<string name="no_contacts_to_add">추가할 연락처 없음</string>
<string name="no_contacts_selected">선택한 연락처 없음</string>
<string name="network_status">네트워크 상태</string>
<string name="language_system">시스템</string>
<string name="messages_section_title">메시지</string>
<string name="messages_section_description">이 설정은 현재 내 프로필의 메시지에 적용되어요.</string>
<string name="member_info_section_title_member">멤버</string>
<string name="member_role_will_be_changed_with_invitation">역할이 \"%s\"(으)로 변경되고, 회원은 새로운 초대를 받게 될 거예요.</string>
<string name="network_options_revert">되돌리기</string>
<string name="message_deletion_prohibited">이 채팅에서는 메시지 영구 삭제가 허용되지 않았어요.</string>
<string name="leave_group_button">나가기</string>
<string name="large_file">큰 파일!</string>
<string name="network_settings_title">네트워크 설정</string>
<string name="network_use_onion_hosts_required_desc">연결하려면 Onion 호스트가 필요해요.</string>
<string name="network_option_ping_count">핑 횟수</string>
<string name="network_option_ping_interval">핑 간격</string>
<string name="network_option_protocol_timeout">프로토콜 타임아웃</string>
<string name="network_option_seconds_label"></string>
<string name="network_option_tcp_connection_timeout">TCP 연결 시간 초과</string>
<string name="muted_when_inactive">비활성 시 음소거!</string>
<string name="message_deletion_prohibited_in_chat">이 채팅에서는 메시지 영구 삭제가 허용되지 않아요.</string>
<string name="make_private_connection">비공개 연결하기</string>
<string name="no_received_app_files">수신 또는 전송된 파일 없음</string>
<string name="network_options_save">저장하기</string>
<string name="make_profile_private">프로필을 비공개로 설정하세요!</string>
<string name="live_message">라이브 메시지!</string>
<string name="mark_read">읽음으로 표시</string>
<string name="mark_unread">읽지 않음으로 표시</string>
<string name="mute_chat">음소거</string>
<string name="markdown_in_messages">메시지에 사용된 마크다운</string>
<string name="network_socks_toggle">SOCKS 프록시 사용 (포트 9050)</string>
<string name="network_disable_socks">직접적인 인터넷 연결을 사용할까요\?</string>
<string name="network_enable_socks">SOCKS 프록시를 사용할까요\?</string>
<string name="network_disable_socks_info">설정하면 메시징 서버에서 내 IP 주소와 내가 연결하려는 서버를 볼 수 있어요.</string>
<string name="network_use_onion_hosts">.onion 호스트 사용</string>
<string name="network_use_onion_hosts_no">아니요</string>
<string name="network_use_onion_hosts_prefer">사용 가능한 경우</string>
<string name="network_use_onion_hosts_required">필요함</string>
<string name="network_use_onion_hosts_prefer_desc">사용 가능한 경우 Onion 호스트가 사용될 거예요.</string>
<string name="network_use_onion_hosts_no_desc">Onion 호스트가 사용되지 않을 거예요.</string>
<string name="network_session_mode_transport_isolation">전송 격리</string>
<string name="network_use_onion_hosts_no_desc_in_alert">Onion 호스트가 사용되지 않을 거예요.</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">사용 가능한 경우 Onion 호스트가 사용될 거예요.</string>
<string name="network_use_onion_hosts_required_desc_in_alert">연결하려면 Onion 호스트가 필요해요.</string>
<string name="next_generation_of_private_messaging">차세대 사생활 보호 메시징</string>
<string name="new_passphrase">새 비밀번호…</string>
<string name="network_option_enable_tcp_keep_alive">TCP 연결 유지 활성화</string>
<string name="new_in_version">%s의 새로운 기능</string>
<string name="markdown_help">마크다운 도움말</string>
<string name="many_people_asked_how_can_it_deliver">많은 사람들의 질문 : <i><xliff:g id="appName">SimpleX</xliff:g>에는 사용자 식별자가 없는데도 어떻게 메시지를 전달할 수 있어요\?</i></string>
<string name="leave_group_question">그룹에서 나갈까요\?</string>
<string name="mtr_error_no_down_migration">데이터베이스 버전이 앱보다 최신이지만 다음에 대한 다운 마이그레이션 없음: %s</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">멤버가 그룹에서 제거되어요. 이 작업은 되돌릴 수 없어요!</string>
<string name="member_role_will_be_changed_with_notification">역할이 \"%s\"(으)로 변경되어요. 그룹의 모든 멤버에게 알림이 전송됩니다.</string>
<string name="network_options_reset_to_defaults">기본값으로 재설정</string>
<string name="notification_preview_mode_message">메시지 내용</string>
<string name="notification_preview_mode_message_desc">대화 상대 이름 및 메시지 표시</string>
<string name="only_you_can_delete_messages">나만 메시지를 영구 삭제할 수 있어요(대화 상대는 \"삭제됨\" 표시만 할 수 있음).</string>
<string name="profile_will_be_sent_to_contact_sending_link">이 링크를 보낸 상대에게 프로필이 전송될 거예요.</string>
<string name="receiving_files_not_yet_supported">파일 수신은 아직 지원되지 않아요.</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">올바른 링크를 사용했는지 확인하거나 상대에게 다른 링크를 보내달라고 말해 주세요</string>
<string name="periodic_notifications">주기적 알림</string>
<string name="periodic_notifications_desc">주기적으로 새 메시지를 확인해요 — 하루에 몇 퍼센트의 배터리를 사용할 거예요. 푸시 알림을 사용하지 않아요 — 기기의 데이터가 서버로 전송되지 않아요.</string>
<string name="periodic_notifications_disabled">주기적 알림이 비활성화되었어요.</string>
<string name="ntf_channel_calls">SimpleX Chat 통화</string>
<string name="ntf_channel_messages">SimpleX Chat 메시지</string>
<string name="observer_cant_send_message_desc">그룹 관리자에게 문의해 주세요.</string>
<string name="observer_cant_send_message_title">메시지를 보낼 수 없습니다!</string>
<string name="ok"></string>
<string name="reject_contact_button">거절</string>
<string name="password_to_show">비밀번호 표시</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">사용자 디바이스에만 <b>2계층 종단 간 암호화</b> 로 전송된 사용자 프로필, 연락처, 그룹 및 메시지를 저장되어요.</string>
<string name="read_more_in_github">자세한 내용은 GitHub에서 확인해 주세요.</string>
<string name="privacy_and_security">개인 정보 및 보안</string>
<string name="notifications_will_be_hidden">알림은 앱이 중지되기 전까지만 전달될 거예요!</string>
<string name="only_you_can_send_disappearing">자동 삭제되는 메시지는 나만 보낼 수 있어요.</string>
<string name="prohibit_sending_disappearing_messages">자동 삭제되는 메시지 허용되지 않음.</string>
<string name="prohibit_sending_voice_messages">음성 메시지 허용되지 않음.</string>
<string name="prohibit_sending_disappearing">자동 삭제되는 메시지 허용되지 않음.</string>
<string name="old_database_archive">이전 데이터베이스 기록</string>
<string name="rcv_group_event_member_added"><xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g> 초대됨</string>
<string name="rcv_group_event_member_left">나감</string>
<string name="rcv_group_event_user_deleted">강퇴됨</string>
<string name="rcv_group_event_member_deleted"><xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g> 강퇴됨</string>
<string name="only_group_owners_can_change_prefs">그룹 소유자만 그룹 설정을 변경할 수 있어요.</string>
<string name="receiving_via">다음을 통해 수신</string>
<string name="only_your_contact_can_send_disappearing">대화 상대만 자동 삭제되는 메시지를 보낼 수 있어요.</string>
<string name="prohibit_direct_messages">멤버들 간의 1:1 채팅이 허용되지 않음.</string>
<string name="only_you_can_send_voice">나만 음성 메시지를 보낼 수 있어요.</string>
<string name="only_your_contact_can_send_voice">대화 상대만 음성 메시지를 보낼 수 있어요.</string>
<string name="prohibit_message_deletion">메시지 영구 삭제 허용되지 않음.</string>
<string name="prohibit_sending_voice">음성 메시지 허용되지 않음.</string>
<string name="only_your_contact_can_delete">상대만 메시지를 영구 삭제할 수 있어요(나는 \"삭제됨\"으로 표시만 할 수 있음).</string>
<string name="only_group_owners_can_enable_voice">그룹 소유자만 음성 메시지를 사용 가능하도록 설정할 수 있어요.</string>
<string name="one_time_link">일회성 초대 링크</string>
<string name="paste_button">붙여넣기</string>
<string name="profile_is_only_shared_with_your_contacts">프로필은 대화 상대들하고만 공유됩니다.</string>
<string name="privacy_redefined">프라이버시의 재정의</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">오픈 소스 프로토콜과 코드 - 누구나 자신만의 서버를 구축할 수 있어요.</string>
<string name="onboarding_notifications_mode_off">앱이 실행 중일 때</string>
<string name="read_more_in_github_with_link">ㅍ자세한 내용은 \u0020<font color="#0088ff">GitHub</font> 에서 확인해 주세요.</string>
<string name="relay_server_protects_ip">릴레이 서버는 IP 주소를 숨겨주지만, 통화 시간을 관찰 할 수 있어요.</string>
<string name="rcv_group_event_invited_via_your_group_link">그룹 링크로 초대</string>
<string name="onboarding_notifications_mode_subtitle">설정을 통해 나중에 변경할 수 있어요.</string>
<string name="onboarding_notifications_mode_title">비공개 알림</string>
<string name="reject">거절</string>
<string name="open_simplex_chat_to_accept_call"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>을 열어 전화 받기</string>
<string name="open_verb">열기</string>
<string name="protect_app_screen">앱 잠금</string>
<string name="personal_welcome"><xliff:g>%1$s</xliff:g>님, 환영합니다!</string>
<string name="only_stored_on_members_devices">(그룹 구성원에게만 저장됨)</string>
<string name="paste_connection_link_below_to_connect">아래 칸에 받은 링크를 붙여넣기하여 대화 상대와 연결해 주세요.</string>
<string name="rate_the_app">앱 평가하기</string>
<string name="onboarding_notifications_mode_periodic">주기적</string>
<string name="onboarding_notifications_mode_service">즉시</string>
<string name="paste_the_link_you_received">받은 링크 붙여넣기</string>
<string name="relay_server_if_necessary">릴레이 서버는 필요한 경우에만 사용되어요. 릴레이 서버가 사용되지 않으면 제3자가 내 IP 주소를 관찰할 수 있어요.</string>
<string name="open_chat">채팅 열기</string>
<string name="people_can_connect_only_via_links_you_share">공유한 링크를 통해서만 나에게 연결할 수 있어요.</string>
<string name="rcv_group_event_updated_group_profile">그룹 프로필 업데이트됨</string>
<string name="profile_password">프로필 비밀번호</string>
</resources>
@@ -47,4 +47,315 @@
<string name="auth_unavailable">Tapatybės nustatymas neprieinamas</string>
<string name="impossible_to_recover_passphrase"><b>Turėkite omenyje</b>: jeigu prarasite slaptafrazę, NEBEGALĖSITE jos atkurti ar pakeisti.</string>
<string name="cancel_verb">Atsisakyti</string>
<string name="callstate_connecting">jungiamasi…</string>
<string name="connect_via_link_verb">Prisijungti</string>
<string name="server_connected">prisijungta</string>
<string name="server_connecting">jungiamasi</string>
<string name="display_name_connection_established">ryšys užmegztas</string>
<string name="display_name_connecting">jungiasi…</string>
<string name="connection_error">Ryšio klaida</string>
<string name="smp_server_test_connect">Prisijungti</string>
<string name="notification_contact_connected">Prisijungė</string>
<string name="connect_button">Prisijungti</string>
<string name="group_member_status_connected">prisijungė</string>
<string name="contact_connection_pending">jungiasi…</string>
<string name="group_connection_pending">jungiasi…</string>
<string name="icon_descr_server_status_connected">Prisijungta</string>
<string name="confirm_verb">Patvirtinti</string>
<string name="configure_ICE_servers">Konfigūruoti ICE serverius</string>
<string name="callstate_connected">prisijungta</string>
<string name="rcv_group_event_member_connected">prisijungė</string>
<string name="info_row_connection">Ryšys</string>
<string name="confirm_database_upgrades">Patvirtinti duomenų bazių naujinimus</string>
<string name="group_member_status_connecting">jungiasi</string>
<string name="network_session_mode_entity">Ryšys</string>
<string name="database_passphrase_will_be_updated">Duomenų bazės šifravimo slaptafrazė bus atnaujinta.</string>
<string name="core_version">Branduolio versija: v%s</string>
<string name="delete_address__question">Ištrinti adresą\?</string>
<string name="save_preferences_question">Įrašyti nuostatas\?</string>
<string name="create_profile">Sukurti profilį</string>
<string name="callstatus_rejected">atmestas skambutis</string>
<string name="callstate_ended">užbaigtas</string>
<string name="onboarding_notifications_mode_title">Privatūs pranešimai</string>
<string name="ignore">Nepaisyti</string>
<string name="icon_descr_flip_camera">Apversti kamerą</string>
<string name="icon_descr_call_rejected">Atmestas skambutis</string>
<string name="privacy_and_security">Privatumas ir saugumas</string>
<string name="settings_section_title_device">ĮRENGINYS</string>
<string name="settings_section_title_help">PAGALBA</string>
<string name="encrypt_database">Šifruoti</string>
<string name="remove_passphrase">Šalinti</string>
<string name="button_delete_group">Ištrinti grupę</string>
<string name="v4_2_group_links">Grupių nuorodos</string>
<string name="server_error">klaida</string>
<string name="simplex_link_mode_description">Aprašas</string>
<string name="error_saving_smp_servers">Klaida įrašant SMP serverius</string>
<string name="error_setting_network_config">Klaida atnaujinant tinklo konfigūraciją</string>
<string name="failed_to_create_user_title">Klaida kuriant profilį!</string>
<string name="failed_to_parse_chat_title">Nepavyko įkelti pokalbio</string>
<string name="failed_to_parse_chats_title">Nepavyko įkelti pokalbių</string>
<string name="failed_to_active_user_title">Klaida perjungiant profilį!</string>
<string name="error_sending_message">Klaida siunčiant žinutę</string>
<string name="error_creating_address">Klaida kuriant adresą</string>
<string name="error_joining_group">Klaida prisijungiant prie grupės</string>
<string name="error_receiving_file">Klaida gaunant failą</string>
<string name="error_changing_address">Klaida keičiant adresą</string>
<string name="error_deleting_contact">Klaida ištrinant adresatą</string>
<string name="error_deleting_group">Klaida ištrinant grupę</string>
<string name="smp_server_test_disconnect">Atsijungti</string>
<string name="error_deleting_user">Klaida ištrinant naudotojo profilį</string>
<string name="notification_display_mode_hidden_desc">Slėpti adresatą ir žinutę</string>
<string name="copy_verb">Kopijuoti</string>
<string name="reply_verb">Atsakyti</string>
<string name="delete_message__question">Ištrinti žinutę\?</string>
<string name="icon_descr_file">Failas</string>
<string name="maximum_supported_file_size">Šiuo metu didžiausias palaikomas failo dydis yra <xliff:g id="maxFileSize">%1$s</xliff:g>.</string>
<string name="file_not_found">Failas nerastas</string>
<string name="file_saved">Failas įrašytas</string>
<string name="icon_descr_server_status_disconnected">Atsijungta</string>
<string name="icon_descr_server_status_error">Klaida</string>
<string name="ask_your_contact_to_enable_voice">Paprašykite adresato, kad įjungtų balso žinučių siuntimą.</string>
<string name="reset_verb">Atstatyti</string>
<string name="delete_group_menu_action">Ištrinti</string>
<string name="image_descr_qr_code">QR kodas</string>
<string name="icon_descr_help">pagalba</string>
<string name="icon_descr_email">El. paštas</string>
<string name="create_one_time_link">Sukurti vienkartinio pakvietimo nuorodą</string>
<string name="scan_code">Skenuoti kodą</string>
<string name="database_passphrase_and_export">Duomenų bazės slaptafrazė ir eksportavimas</string>
<string name="smp_servers_delete_server">Ištrinti serverį</string>
<string name="error_saving_ICE_servers">Klaida įrašant ICE serverius</string>
<string name="save_servers_button">Įrašyti</string>
<string name="files_and_media_section">Failai ir medija</string>
<string name="delete_files_and_media_all">Ištrinti visus failus</string>
<string name="delete_files_and_media_question">Ištrinti failus ir mediją\?</string>
<string name="delete_archive">Ištrinti archyvą</string>
<string name="delete_chat_archive_question">Ištrinti pokalbio archyvą\?</string>
<string name="snd_group_event_group_profile_updated">grupės profilis atnaujintas</string>
<string name="info_row_group">Grupė</string>
<string name="users_delete_question">Ištrinti pokalbio profilį\?</string>
<string name="network_options_revert">Sugrąžinti</string>
<string name="network_options_save">Įrašyti</string>
<string name="feature_enabled">įjungta</string>
<string name="delete_after">Ištrinti po</string>
<string name="error_updating_user_privacy">Klaida atnaujinant naudotojo privatumą</string>
<string name="simplex_service_notification_text">Gaunamos žinutės…</string>
<string name="hide_notification">Slėpti</string>
<string name="save_verb">Įrašyti</string>
<string name="delete_verb">Ištrinti</string>
<string name="edit_verb">Taisyti</string>
<string name="hide_verb">Slėpti</string>
<string name="reveal_verb">Atskleisti</string>
<string name="for_me_only">Ištrinti man</string>
<string name="for_everybody">Visiems</string>
<string name="icon_descr_edited">taisyta</string>
<string name="observer_cant_send_message_desc">Susisiekite su grupės administratoriumi.</string>
<string name="button_delete_contact">Ištrinti adresatą</string>
<string name="delete_contact_question">Ištrinti adresatą\?</string>
<string name="create_group">Sukurti slaptą grupę</string>
<string name="from_gallery_button">Iš galerijos</string>
<string name="toast_permission_denied">Leidimas atmestas!</string>
<string name="reject_contact_button">Atmesti</string>
<string name="incorrect_code">Neteisingas saugumo kodas!</string>
<string name="smp_servers_save">Įrašyti serverius</string>
<string name="smp_save_servers_question">Įrašyti serverius\?</string>
<string name="core_build_timestamp">Branduolys sudarytas: %s</string>
<string name="create_address">Sukurti adresą</string>
<string name="delete_address">Ištrinti adresą</string>
<string name="error_saving_user_password">Klaida įrašant naudotojo slaptažodį</string>
<string name="create_profile_button">Sukurti</string>
<string name="how_it_works">Kaip tai veikia</string>
<string name="incoming_audio_call">Gaunamas garso skambutis</string>
<string name="incoming_video_call">Gaunamas vaizdo skambutis</string>
<string name="reject">Atmesti</string>
<string name="no_call_on_lock_screen">Išjungti</string>
<string name="settings_experimental_features">Eksperimentinės ypatybės</string>
<string name="database_passphrase">Duomenų bazės slaptafrazė</string>
<string name="delete_database">Ištrinti duomenų bazę</string>
<string name="export_database">Eksportuoti duomenų bazę</string>
<string name="import_database">Importuoti duomenų bazę</string>
<string name="set_password_to_export_desc">Duomenų bazė yra šifruota naudojant atsitiktinę slaptafrazę. Prieš eksportuodami duomenų bazę, pakeiskite slaptafrazę.</string>
<string name="error_exporting_chat_database">Klaida eksportuojant pokalbio duomenų bazę</string>
<string name="error_stopping_chat">Klaida sustabdant pokalbį</string>
<string name="import_database_question">Importuoti pokalbio duomenų bazę\?</string>
<string name="current_passphrase">Dabartinė slaptafrazė…</string>
<string name="encrypted_with_random_passphrase">Duomenų bazė yra šifruota naudojant atsitiktinę slaptafrazę, kurią galite pakeisti.</string>
<string name="encrypt_database_question">Šifruoti duomenų bazę\?</string>
<string name="error_with_info">Klaida: %s</string>
<string name="button_edit_group_profile">Taisyti grupės profilį</string>
<string name="group_link">Grupės nuoroda</string>
<string name="button_create_group_link">Sukurti nuorodą</string>
<string name="info_row_database_id">Duomenų bazės ID</string>
<string name="error_changing_role">Klaida keičiant vaidmenį</string>
<string name="conn_level_desc_direct">tiesioginis</string>
<string name="conn_level_desc_indirect">netiesioginis (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="create_secret_group_title">Sukurti slaptą grupę</string>
<string name="error_saving_group_profile">Klaida įrašant grupės profilį</string>
<string name="dont_show_again">Daugiau neberodyti</string>
<string name="theme_dark">Tamsus</string>
<string name="reset_color">Atstatyti spalvas</string>
<string name="save_color">Įrašyti spalvą</string>
<string name="group_preferences">Grupės nuostatos</string>
<string name="full_deletion">Ištrinti visiems</string>
<string name="direct_messages">Tiesioginės žinutės</string>
<string name="v4_4_disappearing_messages">Išnykstančios žinutės</string>
<string name="timed_messages">Išnykstančios žinutės</string>
<string name="v4_4_french_interface">Sąsaja prancūzų kalba</string>
<string name="v4_3_improved_privacy_and_security">Patobulintas privatumas ir saugumas</string>
<string name="num_contacts_selected">Pažymėta adresatų: %d</string>
<string name="delete_chat_profile_question">Ištrinti pokalbio profilį\?</string>
<string name="error_importing_database">Klaida importuojant pokalbio duomenų bazę</string>
<string name="delete_messages_after">Ištrinti žinutes po</string>
<string name="database_will_be_encrypted">Duomenų bazė bus šifruota.</string>
<string name="alert_title_no_group">Grupė nerasta!</string>
<string name="error_deleting_link_for_group">Klaida ištrinant grupės nuorodą</string>
<string name="error_updating_link_for_group">Klaida atnaujinant grupės nuorodą</string>
<string name="database_upgrade">Duomenų bazės naujinimas</string>
<string name="incompatible_database_version">Nesuderinama duomenų bazės versija</string>
<string name="group_member_status_group_deleted">grupė ištrinta</string>
<string name="save_and_update_group_profile">Įrašyti ir atnaujinti grupės profilį</string>
<string name="delete_messages">Ištrinti žinutes</string>
<string name="error_changing_message_deletion">Klaida keičiant nustatymą</string>
<string name="error_encrypting_database">Klaida šifruojant duomenų bazę</string>
<string name="encrypted_database">Šifruota duomenų bazė</string>
<string name="restore_database_alert_confirm">Atkurti</string>
<string name="create_group_link">Sukurti grupės nuorodą</string>
<string name="delete_link">Ištrinti nuorodą</string>
<string name="delete_link_question">Ištrinti nuorodą\?</string>
<string name="error_creating_link_for_group">Klaida kuriant grupės nuorodą</string>
<string name="how_simplex_works">Kaip <xliff:g id="appName">SimpleX</xliff:g> veikia</string>
<string name="database_encrypted">Duomenų bazė šifruota!</string>
<string name="group_member_status_creator">kūrėjas</string>
<string name="delete_group_question">Ištrinti grupę\?</string>
<string name="user_hide">Slėpti</string>
<string name="error_saving_file">Klaida įrašant failą</string>
<string name="hide_dev_options">Slėpti:</string>
<string name="database_error">Duomenų bazės klaida</string>
<string name="file_with_path">Failas: %s</string>
<string name="profile_password">Profilio slaptažodis</string>
<string name="remove_member_confirmation">Šalinti</string>
<string name="v4_3_improved_server_configuration">Patobulinta serverio konfigūracija</string>
<string name="delete_chat_profile">Ištrinti pokalbio profilį</string>
<string name="delete_profile">Ištrinti profilį</string>
<string name="share_one_time_link">Sukurti vienkartinio pakvietimo nuorodą</string>
<string name="delete_contact_menu_action">Ištrinti</string>
<string name="save_and_notify_contact">Įrašyti ir pranešti adresatui</string>
<string name="enable_automatic_deletion_question">Įjungti automatinį žinučių ištrynimą\?</string>
<string name="error_deleting_database">Klaida ištrinant pokalbio duomenų bazę</string>
<string name="error_starting_chat">Klaida pradedant pokalbį</string>
<string name="hide_profile">Slėpti profilį</string>
<string name="import_database_confirmation">Importuoti</string>
<string name="save_and_notify_contacts">Įrašyti ir pranešti adresatams</string>
<string name="callstate_starting">pradedama…</string>
<string name="use_chat">Naudoti pokalbį</string>
<string name="icon_descr_speaker_off">Išjungti garsiakalbį</string>
<string name="icon_descr_speaker_on">Įjungti garsiakalbį</string>
<string name="alert_title_skipped_messages">Praleistos žinutės</string>
<string name="settings_section_title_settings">NUSTATYMAI</string>
<string name="theme_system">Sistemos</string>
<string name="unknown_message_format">nežinomas žinutės formatas</string>
<string name="simplex_link_contact">SimpleX adresato adresas</string>
<string name="simplex_link_group">SimpleX grupės nuoroda</string>
<string name="simplex_link_invitation">SimpleX vienkartinis pakvietimas</string>
<string name="simplex_link_mode">SimpleX nuorodos</string>
<string name="settings_notification_preview_mode_title">Rodyti peržiūrą</string>
<string name="auth_unlock">Atrakinti</string>
<string name="share_verb">Bendrinti</string>
<string name="tap_to_start_new_chat">Bakstelėkite, norėdami pradėti naują pokalbį</string>
<string name="share_file">Bendrinti failą…</string>
<string name="icon_descr_settings">Nustatymai</string>
<string name="show_QR_code">Rodyti QR kodą</string>
<string name="share_invitation_link">Bendrinti pakvietimo nuorodą</string>
<string name="smp_servers">SMP serveriai</string>
<string name="use_simplex_chat_servers__question">Naudoti <xliff:g id="appNameFull">SimpleX Chat</xliff:g> serverius\?</string>
<string name="network_disable_socks">Naudoti tiesioginį interneto ryšį\?</string>
<string name="update_network_settings_confirmation">Atnaujinti</string>
<string name="update_network_settings_question">Atnaujinti tinklo nustatymus\?</string>
<string name="ntf_channel_messages">SimpleX Chat žinutės</string>
<string name="ntf_channel_calls">SimpleX Chat skambučiai</string>
<string name="notification_preview_mode_message_desc">Rodyti adresatą ir žinutę</string>
<string name="notification_preview_mode_contact_desc">Rodyti tik adresatą</string>
<string name="auth_stop_chat">Stabdyti pokalbį</string>
<string name="share_message">Bendrinti žinutę…</string>
<string name="use_camera_button">Naudoti kamerą</string>
<string name="thank_you_for_installing_simplex">Dėkojame, kad įdiegėte <xliff:g id="appNameFull">SimpleX Chat</xliff:g>!</string>
<string name="smp_servers_use_server">Naudoti serverį</string>
<string name="network_socks_toggle">Naudoti SOCKS įgaliotąjį serverį (prievadas 9050)</string>
<string name="network_enable_socks">Naudoti SOCKS įgaliotąjį serverį\?</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="share_link">Bendrinti nuorodą</string>
<string name="tap_to_activate_profile">Bakstelėkite, norėdami aktyvuoti profilį.</string>
<string name="language_system">Sistemos</string>
<string name="v4_6_audio_video_calls_descr">Bluetooth palaikymas ir kiti patobulinimai.</string>
<string name="group_invitation_tap_to_join">Bakstelėkite, norėdami prisijungti</string>
<string name="show_call_on_lock_screen">Rodyti</string>
<string name="stop_chat_confirmation">Stabdyti</string>
<string name="upgrade_and_open_chat">Naujinti ir atverti pokalbį</string>
<string name="switch_verb">Perjungti</string>
<string name="icon_descr_received_msg_status_unread">neskaityta</string>
<string name="show_dev_options">Rodyti:</string>
<string name="stop_chat_question">Stabdyti pokalbį\?</string>
<string name="update_database">Atnaujinti</string>
<string name="unknown_error">Nežinoma klaida</string>
<string name="add_contact_or_create_group">Pradėti naują pokalbį</string>
<string name="callstate_waiting_for_answer">laukiama, kol bus atsiliepta…</string>
<string name="callstate_waiting_for_confirmation">laukiama patvirtinimo…</string>
<string name="icon_descr_video_off">Išjungti vaizdą</string>
<string name="icon_descr_video_on">Įjungti vaizdą</string>
<string name="your_privacy">Jūsų privatumas</string>
<string name="settings_section_title_you">JŪS</string>
<string name="wrong_passphrase_title">Neteisinga slaptafrazė!</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="sender_you_pronoun">jūs</string>
<string name="description_via_group_link">per grupės nuorodą</string>
<string name="description_via_contact_address_link">per adresato adreso nuorodą</string>
<string name="description_via_one_time_link">per vienkartinę nuorodą</string>
<string name="simplex_link_connection">per <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
<string name="simplex_link_mode_browser">Per naršyklę</string>
<string name="waiting_for_file">Laukiama failo</string>
<string name="voice_message_with_duration">Balso žinutė (<xliff:g id="duration">%1$s</xliff:g>)</string>
<string name="voice_message_send_text">Balso žinutė…</string>
<string name="view_security_code">Rodyti saugumo kodą</string>
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g> adresas</string>
<string name="your_SMP_servers">Jūsų SMP serveriai</string>
<string name="your_ICE_servers">Jūsų ICE serveriai</string>
<string name="users_add">Pridėti profilį</string>
<string name="users_delete_all_chats_deleted">Visi pokalbiai ir žinutės bus ištrinti to neįmanoma bus atšaukti!</string>
<string name="welcome">Sveiki!</string>
<string name="attach">Pridėti</string>
<string name="observer_cant_send_message_title">Jūs negalite siųsti žinučių!</string>
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g> logotipas</string>
<string name="your_settings">Jūsų nustatymai</string>
<string name="smp_servers_your_server">Jūsų serveris</string>
<string name="smp_servers_your_server_address">Jūsų serverio adresas</string>
<string name="smp_servers_add_to_another_device">Pridėti į kitą įrenginį</string>
<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="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>
<string name="your_ice_servers">Jūsų ICE serveriai</string>
<string name="snd_group_event_user_left">jūs išėjote</string>
<string name="group_member_role_admin">administratorius</string>
<string name="incognito_random_profile">Jūsų atsitiktinis profilis</string>
<string name="chat_preferences_you_allow">Jūs leidžiate</string>
<string name="your_preferences">Jūsų nuostatos</string>
<string name="v4_3_voice_messages">Balso žinutės</string>
<string name="voice_messages">Balso žinutės</string>
<string name="chat_preferences_yes">taip</string>
<string name="you_joined_this_group">Jūs prisijungėte prie šios grupės</string>
<string name="database_downgrade_warning">Įspėjimas: galite prarasti tam tikrus duomenis!</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Jūs nustosite gauti žinutes iš šios grupės. Pokalbio istorija bus išsaugota.</string>
<string name="group_info_member_you">jūs: <xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="personal_welcome">Sveiki, <xliff:g>%1$s</xliff:g>!</string>
<string name="your_chats">Jūsų pokalbiai</string>
<string name="wrong_passphrase">Neteisinga duomenų bazės slaptafrazė</string>
<string name="icon_descr_video_snd_complete">Vaizdo įrašas išsiųstas</string>
<string name="voice_message">Balso žinutė</string>
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g> komanda</string>
<string name="whats_new">Kas naujo</string>
</resources>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -308,7 +308,7 @@
<string name="files_and_media_section">文件和媒体</string>
<string name="current_passphrase">现有密码……</string>
<string name="encrypt_database">加密</string>
<string name="encrypted_database">加密数据库</string>
<string name="encrypted_database">加密数据库</string>
<string name="enter_correct_passphrase">输入正确密码。</string>
<string name="icon_descr_group_inactive">不活跃群组</string>
<string name="group_member_status_creator">创建者</string>
@@ -11,7 +11,7 @@
<string name="accept_contact_button">接受</string>
<string name="about_simplex_chat">關於 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="accept_connection_request__question">接受連線請求?</string>
<string name="callstatus_accepted">已接受收聽電</string>
<string name="callstatus_accepted">已接受</string>
<string name="network_enable_socks_info">要在端口 9050 啟動 SOCKS 代理伺服器嗎?在啟用這個選項之前,必須先啟動代理伺服器。</string>
<string name="group_member_role_admin">管理員</string>
<string name="above_then_preposition_continuation">然後選按:</string>
@@ -23,7 +23,7 @@
<string name="display_name__field">顯示名稱:</string>
<string name="full_name__field">全名:</string>
<string name="onboarding_notifications_mode_service_desc"><b>使用更多電量</b>!通知服務會長期在背景中運行 – 一但有訊息就會顯示在通知內。</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>對電量也不錯</b>。通知服務會每十分鐘運行一次。你可能會錯過電話通話或訊息。</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>對電量也不錯</b>。通知服務會每十分鐘運行一次。你可能會錯過通話或訊息。</string>
<string name="answer_call">回應通話請求</string>
<string name="clear_contacts_selection_button">清除</string>
<string name="allow_direct_messages">允許在群組內選擇成員後傳送訊息。</string>
@@ -36,7 +36,7 @@
<string name="database_initialization_error_title">無法初始化數據庫</string>
<string name="notifications_mode_service">一直開啟</string>
<string name="auth_disable_simplex_lock">關閉 SimpleX 鎖定</string>
<string name="auth_enable_simplex_lock"> SimpleX 鎖定</string>
<string name="auth_enable_simplex_lock"> SimpleX 鎖定</string>
<string name="copy_verb">複製</string>
<string name="reply_verb">回覆</string>
<string name="share_verb">分享</string>
@@ -76,13 +76,13 @@
<string name="save_preferences_question">儲存設定?</string>
<string name="display_name">顯示名稱</string>
<string name="full_name_optional__prompt">全名(可選)</string>
<string name="callstatus_error">通話出現錯誤</string>
<string name="callstatus_error">通話出</string>
<string name="callstatus_calling">正在撥打 …</string>
<string name="callstatus_in_progress">通話中</string>
<string name="secret">私密</string>
<string name="callstate_connected">已連接</string>
<string name="onboarding_notifications_mode_off_desc"><b>對電量最好</b>。 只有在應用程式運行中的時侯才可以接收訊息,後台服務並不會使用。</string>
<string name="encrypted_video_call">端對端加密視訊通話</string>
<string name="onboarding_notifications_mode_off_desc"><b>對電量最好</b>。 只有在應用程式運行中的時侯才可以接收訊息通知,後台服務並不會使用。</string>
<string name="encrypted_video_call">已經完成端對端加密視訊通話</string>
<string name="video_call_no_encryption">視訊通話(沒有端對端加密)</string>
<string name="call_already_ended">通話已經結束了!</string>
<string name="icon_descr_audio_off">關閉語音</string>
@@ -100,8 +100,8 @@
<string name="auto_accept_images">自動接收圖片</string>
<string name="full_backup">備份應用程式資料</string>
<string name="settings_section_title_icon">應用程式圖示</string>
<string name="chat_database_imported">已匯入對話資料</string>
<string name="keychain_is_storing_securely">Android 金鑰庫是用於安全地儲存密碼 - 確保通知服務的運作</string>
<string name="chat_database_imported">已匯入對話數據</string>
<string name="keychain_is_storing_securely">Android 金鑰庫是用於安全地儲存密碼 - 確保通知服務的運作</string>
<string name="impossible_to_recover_passphrase"><b>請注意</b>:如果你忘記了密碼你將不能再次復原或更改密碼。</string>
<string name="keychain_allows_to_receive_ntfs">當你重新啟動應用程式或更改密碼後, Android 金鑰庫將會用來安全地儲存密碼 - 將會允許接到通知。</string>
<string name="chat_is_stopped_indication">聊天室已停止運作</string>
@@ -122,7 +122,7 @@
<string name="v4_3_improved_server_configuration_desc">使用二維碼掃描並新增伺服器。</string>
<string name="chat_is_running">聊天室運行中</string>
<string name="chat_database_section">聊天室數據庫</string>
<string name="chat_is_stopped">聊天室已停止</string>
<string name="chat_is_stopped">聊天室已停止運作</string>
<string name="stop_chat_confirmation">停止</string>
<string name="chat_database_deleted">已刪除數據庫的對話內容</string>
<string name="stop_chat_to_enable_database_actions">停止聊天室以啟用數據庫功能。</string>
@@ -147,7 +147,7 @@
<string name="ttl_month">%d 月</string>
<string name="callstatus_ended">通話結束 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="icon_descr_cancel_file_preview">取消檔案預覽</string>
<string name="cannot_receive_file">無法接收文件</string>
<string name="cannot_receive_file">無法接收檔案</string>
<string name="failed_to_create_user_duplicate_title">重複的顯示名稱!</string>
<string name="network_session_mode_entity_description">一個單獨的 TCP 連接(和 SOCKS 憑證)將用於<b>每個聯絡人和群組內的成員</b>
\n<b>請注意</b>:如果你有很多連接,你的電話電量和數據流量的消耗率會大大增加,一些連接有機會會連接失敗。</string>
@@ -159,7 +159,7 @@
<string name="group_preferences">群組設定</string>
<string name="contact_preferences">聯絡人設定</string>
<string name="share_image">分享圖片 …</string>
<string name="both_you_and_your_contacts_can_delete">你和你的聯絡人都可以不可逆地刪除已經傳送的訊息</string>
<string name="both_you_and_your_contacts_can_delete">你和你的聯絡人都可以不可逆地刪除已經傳送的訊息</string>
<string name="server_connected">已連接</string>
<string name="simplex_link_mode_description">簡介</string>
<string name="simplex_link_mode_full">完整連結</string>
@@ -185,8 +185,8 @@
<string name="smp_servers_check_address">檢查輸入的伺服器地址然後再試一次。</string>
<string name="chat_console">終端機對話</string>
<string name="star_on_github">於 Github 給個星星</string>
<string name="incognito_info_protects">匿名聊天模式會保護你的真實個人檔案名稱和頭像 — 當有新聯絡人的時候會自動建立一個隨機性的個人檔案</string>
<string name="incognito_info_allows">這樣就會每一個對話中也擁有不同的顯示名稱並且沒有任何的個人資料可用於分享或有機會外洩</string>
<string name="incognito_info_protects">匿名聊天模式會保護你的真實個人檔案名稱和頭像 — 當有新聯絡人的時候會自動建立一個隨機性的個人檔案</string>
<string name="incognito_info_allows">這樣是允許每一個對話中也擁有不同的顯示名稱並且沒有任何的個人資料可用於分享或有機會外洩</string>
<string name="incognito_info_find">若要查找用於匿名聊天模式連接的個人檔案,請點擊聯絡人或群組名稱。</string>
<string name="allow_disappearing_messages_only_if">只有你的聯絡人允許的情況下,才允許自動銷毀訊息。</string>
<string name="allow_your_contacts_to_send_disappearing_messages">允許你的聯絡人傳送自動銷毀的訊息。</string>
@@ -195,7 +195,7 @@
<string name="allow_to_delete_messages">允許將不可撤銷的訊息刪除。</string>
<string name="allow_to_send_voice">允許傳送語音訊息。</string>
<string name="delete_after">多久後刪除</string>
<string name="all_group_members_will_remain_connected">群組內所有成員會保持連接</string>
<string name="all_group_members_will_remain_connected">群組內所有成員會保持連接</string>
<string name="color_primary">自訂顏色</string>
<string name="moderated_description">即時顯示訊息</string>
<string name="simplex_link_group">SimpleX 群組連結</string>
@@ -205,10 +205,10 @@
<string name="failed_to_create_user_duplicate_desc">你已經有一個個人檔案的顯示名稱和現在選擇建立的個人檔案名稱相同。請選擇其他名稱。</string>
<string name="failed_to_active_user_title">個人檔案切換失敗!</string>
<string name="error_joining_group">加入群組時出錯</string>
<string name="sender_cancelled_file_transfer">傳送者已取消傳檔案。</string>
<string name="sender_cancelled_file_transfer">傳送者已取消傳檔案。</string>
<string name="error_receiving_file">接收檔案時出錯</string>
<string name="error_creating_address">建立地址時出錯</string>
<string name="v4_5_private_filenames_descr">為了保護私人檔案,圖片或語音文件使用 UTC。</string>
<string name="v4_5_private_filenames_descr">為了保護私人檔案,圖片或語音檔案會使用 UTC。</string>
<string name="sending_files_not_yet_supported">目前還不支援傳送檔案</string>
<string name="receiving_files_not_yet_supported">目前還不支援接收檔案</string>
<string name="sender_you_pronoun"></string>
@@ -268,7 +268,7 @@
<string name="auth_device_authentication_is_disabled_turning_off">裝置內的螢幕鎖定已關閉。正在關閉 SimpleX 鎖定。</string>
<string name="save_verb">儲存</string>
<string name="images_limit_title">太多圖片!</string>
<string name="error_saving_file">儲存檔案的時候出現錯誤</string>
<string name="error_saving_file">儲存檔案的時候出</string>
<string name="notification_new_contact_request">有新的聯絡人連線請求</string>
<string name="auth_confirm_credential">確認你的憑據</string>
<string name="hide_verb">隱藏</string>
@@ -281,11 +281,11 @@
<string name="error_smp_test_failed_at_step">測試在步驟 %s 失敗。</string>
<string name="error_smp_test_server_auth">伺服器需要授權才能建立佇列,請檢查密碼</string>
<string name="error_smp_test_certificate">伺服器地址的憑證指紋可能不正確</string>
<string name="icon_descr_instant_notifications">即時收到通知</string>
<string name="icon_descr_instant_notifications">即時通知</string>
<string name="service_notifications">即時通知!</string>
<string name="service_notifications_disabled">已禁用即時收到通知!</string>
<string name="service_notifications_disabled">已禁用即時通知功能</string>
<string name="database_initialization_error_desc">數據庫目前沒有正常運作。點擊查看更多</string>
<string name="ntf_channel_calls">SimpleX Chat 話來電</string>
<string name="ntf_channel_calls">SimpleX Chat 話來電</string>
<string name="settings_notifications_mode_title">通知服務</string>
<string name="settings_notification_preview_mode_title">顯示預覽</string>
<string name="settings_notification_preview_title">通知預覽</string>
@@ -293,7 +293,7 @@
<string name="auth_unlock">已解鎖</string>
<string name="auth_log_in_using_credential">使用你的憑據登入</string>
<string name="auth_open_chat_console">使用終端機開啟對話</string>
<string name="message_delivery_error_title">傳送訊息有錯誤</string>
<string name="message_delivery_error_title">傳送訊息時出錯</string>
<string name="message_delivery_error_desc">大概你的聯絡人已經刪除了和你的對話並且已經沒有和你有連線。</string>
<string name="for_me_only">只為我刪除</string>
<string name="for_everybody">為所有人刪除</string>
@@ -329,7 +329,7 @@
<string name="smp_server_test_secure_queue">安全佇列</string>
<string name="smp_server_test_delete_queue">刪除佇列</string>
<string name="smp_server_test_disconnect">斷開連接</string>
<string name="turn_off_battery_optimization">為了使用它,請 <b>禁用電量優化</b> 為了 <xliff:g id="appName">SimpleX</xliff:g> 在下一個對話中。否則,將會禁用通知。</string>
<string name="turn_off_battery_optimization">為了使用它,請 <b>禁用電量優化</b> 為了 <xliff:g id="appName">SimpleX</xliff:g> 在下一個對話中。否則,將會禁用通知功能</string>
<string name="enter_passphrase_notification_desc">在接收通知之前,請你輸入數據庫的密碼</string>
<string name="periodic_notifications_desc">應用程式會定期推送新訊息 — 它每天會消耗百分之幾的電量。 應用程式將不使用推送通知 — 你裝置中的數據不會傳送至伺服器。</string>
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服務</string>
@@ -352,7 +352,7 @@
<string name="edit_verb">修改</string>
<string name="delete_verb">刪除</string>
<string name="reveal_verb">展露</string>
<string name="delete_message__question">確定要刪除訊息?</string>
<string name="delete_message__question">刪除訊息?</string>
<string name="delete_message_cannot_be_undone_warning">訊息會刪除 - 並且不能還原!</string>
<string name="delete_message_mark_deleted_warning">訊息將被標記為刪除。 接收訊息的人(多個) 能夠展露此訊息。</string>
<string name="icon_descr_received_msg_status_unread">未讀</string>
@@ -394,7 +394,7 @@
<string name="view_security_code">查看安全碼</string>
<string name="verify_security_code">驗證安全碼</string>
<string name="icon_descr_send_message">傳送訊息</string>
<string name="error_deleting_user">刪除個人檔案時出現錯誤</string>
<string name="error_deleting_user">刪除個人檔案時出</string>
<string name="auth_stop_chat">停止對話</string>
<string name="image_decoding_exception_desc">圖片不能解碼,嘗試其他圖片或聯絡開發人員。</string>
<string name="icon_descr_file">檔案</string>
@@ -439,8 +439,8 @@
<string name="section_title_welcome_message">歡迎訊息</string>
<string name="edit_image">編輯圖片</string>
<string name="italic">斜體</string>
<string name="callstatus_rejected">已拒絕收聽電</string>
<string name="callstatus_connecting">連接話中 …</string>
<string name="callstatus_rejected">已拒絕</string>
<string name="callstatus_connecting">連接話中 …</string>
<string name="callstate_waiting_for_confirmation">等待對方確定 …</string>
<string name="contribute">貢獻</string>
<string name="rate_the_app">評價程式</string>
@@ -482,7 +482,7 @@
<string name="your_chat_profile_will_be_sent_to_your_contact">你的個人檔案會傳送給
\n你的聯絡人</string>
<string name="paste_connection_link_below_to_connect">將你收到的連結貼上至下面的框內以開展你與你的聯絡人對話。</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">如果你不能面對面接觸此聯絡人,你可以於 <b>視訊話中掃描二維碼</b>,或者你可以分享一個邀請連結給此聯絡人。</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">如果你不能面對面接觸此聯絡人,你可以於 <b>視訊話中掃描二維碼</b>,或者你可以分享一個邀請連結給此聯絡人。</string>
<string name="your_profile_will_be_sent">你的個人檔案會傳送給你的聯絡人。</string>
<string name="paste_button">貼上</string>
<string name="this_string_is_not_a_connection_link">這些字串不是連接連結!</string>
@@ -506,7 +506,7 @@
<string name="how_to">如何?</string>
<string name="configure_ICE_servers">配置 ICE 伺服器</string>
<string name="saved_ICE_servers_will_be_removed">已儲存的 WebRTC ICE 伺服器將會移除。</string>
<string name="error_saving_ICE_servers">儲存 ICE 伺服器時有錯誤</string>
<string name="error_saving_ICE_servers">儲存 ICE 伺服器時出錯</string>
<string name="network_use_onion_hosts_no">不要</string>
<string name="network_use_onion_hosts_required">需要</string>
<string name="network_use_onion_hosts_prefer_desc">Onion 主機會當有的時侯啟用</string>
@@ -535,10 +535,10 @@
<string name="network_socks_toggle">使用 SOCKS 代理伺服器 (端口 9050)</string>
<string name="network_enable_socks">使用 SOCKS 代理伺服器</string>
<string name="save_and_notify_group_members">儲存並通知群組內的聯絡人</string>
<string name="exit_without_saving">退出並且不儲存</string>
<string name="exit_without_saving">退出並且不儲存</string>
<string name="you_control_your_chat">你的對話由你控制!</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">一個保護你的隱私和傳送安全通訊的應用程式平台。</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">我們不會在伺服器內儲存你的任何聯絡人和息(一旦傳送)。</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">我們不會在伺服器內儲存你的任何聯絡人和息(一旦傳送)。</string>
<string name="create_profile">建立個人檔案</string>
<string name="callstate_received_confirmation">回應已確認</string>
<string name="you_can_connect_to_simplex_chat_founder">你可以透過 <font color="#0088ff">連接到 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 開發人員提出任何問題並同意更新</font></string>
@@ -558,7 +558,7 @@
<string name="is_not_verified">%s 並未驗證</string>
<string name="your_simplex_contact_address">你的 <xliff:g id="appName">SimpleX</xliff:g> 聯絡地址</string>
<string name="your_chat_profiles">你的個人檔案</string>
<string name="database_passphrase_and_export">資料庫密碼及匯出</string>
<string name="database_passphrase_and_export">數據庫密碼及匯出</string>
<string name="send_us_an_email">傳送電郵</string>
<string name="chat_lock">SimpleX 鎖定</string>
<string name="smp_servers">SMP 服務</string>
@@ -592,7 +592,7 @@
<string name="files_and_media_section">檔案及媒體檔案</string>
<string name="restart_the_app_to_create_a_new_chat_profile">重新啟動應用程式以建立新的個人檔案。</string>
<string name="delete_files_and_media_question">刪除所有檔案及媒體檔案?</string>
<string name="delete_files_and_media_for_all_users">刪除所有你的個人檔案及媒體檔案</string>
<string name="delete_files_and_media_for_all_users">刪除所有你的個人對話檔案</string>
<string name="total_files_count_and_size">%d 檔案(s) 的總共大小為 %s</string>
<string name="messages_section_title">訊息</string>
<string name="chat_item_ttl_none">永不</string>
@@ -600,7 +600,7 @@
<string name="current_passphrase">目前的密碼 …</string>
<string name="encrypt_database">加密</string>
<string name="error_changing_message_deletion">修改設定時出錯</string>
<string name="notifications_will_be_hidden">通知服務只會在應用程式關閉前才會傳送</string>
<string name="notifications_will_be_hidden">通知只會在應用程式關閉前才會傳送</string>
<string name="remove_passphrase">移除</string>
<string name="remove_passphrase_from_keychain">要從金鑰庫移除密碼?</string>
<string name="confirm_new_passphrase">確定新密碼 …</string>
@@ -622,7 +622,7 @@
<string name="button_edit_group_profile">修改群組內的設定</string>
<string name="create_group_link">建立群組連結</string>
<string name="button_create_group_link">建立連結</string>
<string name="delete_link_question">確定要刪除連結?</string>
<string name="delete_link_question">刪除連結?</string>
<string name="button_remove_member">移除成員</string>
<string name="member_role_will_be_changed_with_notification">成員的身份會修改為 \"%s\". 所有在群組內的成員都會收到通知</string>
<string name="member_role_will_be_changed_with_invitation">成員的身份會修改為 \"%s\". 該成員將收到新的邀請</string>
@@ -641,10 +641,10 @@
<string name="v4_5_message_draft">訊息草稿</string>
<string name="v4_5_message_draft_descr">保留最後一則帶附件的訊息草稿。</string>
<string name="v4_5_transport_isolation">傳輸隔離</string>
<string name="import_database_question">匯入對話資料庫?</string>
<string name="import_database_question">匯入對話數據庫?</string>
<string name="store_passphrase_securely_without_recover">請放置你的密碼於安全的地方,如果你遺失了密碼將不可能再次存取它。</string>
<string name="keychain_error">鎖匙鏈錯誤</string>
<string name="no_contacts_selected">沒有聯絡人可選擇</string>
<string name="keychain_error">金鑰庫錯誤</string>
<string name="no_contacts_selected">沒有聯絡人可選擇</string>
<string name="group_link">群組連結</string>
<string name="delete_link">刪除連結</string>
<string name="group_is_decentralized">群組是完全去中心化的 - 只有群組內的成員能看到。</string>
@@ -652,7 +652,7 @@
<string name="ttl_hours">%d 個小時</string>
<string name="whats_new">新功能</string>
<string name="v4_2_auto_accept_contact_requests_desc">帶有可選即時性的訊息</string>
<string name="error_deleting_database">刪除數據庫時出現錯誤</string>
<string name="error_deleting_database">刪除數據庫時出</string>
<string name="import_database_confirmation">匯入</string>
<string name="chat_item_ttl_seconds">%s 秒(s)</string>
<string name="error_encrypting_database">加密數據庫時出錯</string>
@@ -682,13 +682,13 @@
<string name="ignore">無視</string>
<string name="incoming_audio_call">語音通話來電</string>
<string name="paste_the_link_you_received">貼上你收到的連結</string>
<string name="status_e2e_encrypted">已經端對端加密</string>
<string name="status_e2e_encrypted">已經完成端對端加密</string>
<string name="status_no_e2e_encryption">沒有端對端加密</string>
<string name="icon_descr_speaker_off">關閉喇叭</string>
<string name="settings_section_title_messages">訊息</string>
<string name="privacy_and_security">私隱 &amp; 安全性</string>
<string name="settings_section_title_themes">主題</string>
<string name="v4_4_french_interface">國語言界面</string>
<string name="v4_4_french_interface">界面</string>
<string name="encrypted_audio_call">已經完成端對端加密的語音通話</string>
<string name="reject">拒絕</string>
<string name="integrity_msg_bad_id">錯誤的訊息 ID</string>
@@ -713,7 +713,7 @@
<string name="database_will_be_encrypted">數據庫將會加密。</string>
<string name="database_will_be_encrypted_and_passphrase_stored">數據庫將會加密並且密碼會儲存於金鑰庫。</string>
<string name="database_error">數據庫錯誤</string>
<string name="cannot_access_keychain">不能讀取金鑰庫以儲存資料庫密碼</string>
<string name="cannot_access_keychain">不能讀取金鑰庫以儲存數據庫密碼</string>
<string name="error_with_info">錯誤:%s</string>
<string name="file_with_path">檔案:%s</string>
<string name="database_passphrase_is_required">需要數據庫的密碼以開啟對話。</string>
@@ -727,7 +727,7 @@
<string name="restore_database_alert_title">還原數據庫的備份?</string>
<string name="database_restore_error">還原數據庫時出錯</string>
<string name="save_archive">儲存存檔</string>
<string name="delete_archive">刪除</string>
<string name="delete_archive">刪除存</string>
<string name="join_group_button">加入</string>
<string name="join_group_question">確定要加入群組?</string>
<string name="join_group_incognito_button">加入匿名聊天模式</string>
@@ -766,19 +766,19 @@
<string name="update_network_settings_question">更新網路設定?</string>
<string name="update_network_settings_confirmation">更新</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">更新設定會將客戶端重新連接到所有的伺服器。</string>
<string name="users_delete_question">刪除個人檔案</string>
<string name="users_delete_profile_for">刪除個人檔案</string>
<string name="users_delete_question">刪除對話資料</string>
<string name="users_delete_profile_for">刪除對話資訊給</string>
<string name="users_delete_with_connections">檔案和伺服器連接</string>
<string name="users_delete_data_only">只有本機檔案</string>
<string name="incognito_random_profile">你的隨機個人檔案</string>
<string name="incognito_random_profile_description">隨機的個人檔案將會傳送給你的聯絡人</string>
<string name="incognito_random_profile_description">隨機的個人檔案將會傳送給你的聯絡人</string>
<string name="theme_system">系統</string>
<string name="theme_light">明亮</string>
<string name="reset_color">重設顏色</string>
<string name="feature_off">關閉</string>
<string name="feature_received_prohibited">已接收,已禁止</string>
<string name="accept_feature_set_1_day">設定為一日</string>
<string name="contacts_can_mark_messages_for_deletion">聯絡人可以標記訊息為已刪除;你可以看到</string>
<string name="contacts_can_mark_messages_for_deletion">聯絡人可以標記訊息為已刪除;你可以看到那些訊息。</string>
<string name="prohibit_sending_voice_messages">禁止傳送語音訊息</string>
<string name="only_your_contact_can_send_disappearing">只有你的聯絡人可以傳送自動銷毀的訊息</string>
<string name="disappearing_prohibited_in_this_chat">自動銷毀訊息已被禁止於此聊天室。</string>
@@ -792,17 +792,17 @@
<string name="run_chat_section">運行對話</string>
<string name="database_passphrase">數據庫密碼</string>
<string name="export_database">匯出數據庫</string>
<string name="import_database">匯入資料</string>
<string name="import_database">匯入數據</string>
<string name="new_database_archive">新的數據庫存檔</string>
<string name="old_database_archive">舊的數據庫存檔</string>
<string name="delete_database">刪除數據庫</string>
<string name="error_starting_chat">開始新對話時出錯</string>
<string name="stop_chat_question">停止對話?</string>
<string name="set_password_to_export">設定密碼以匯出</string>
<string name="error_stopping_chat">停止對話時出現錯誤</string>
<string name="error_stopping_chat">停止對話時出</string>
<string name="set_password_to_export_desc">已受加密的數據庫是使用一個隨機性的文字。請在修改前將它匯出。</string>
<string name="error_exporting_chat_database">匯出數據庫時出現錯誤</string>
<string name="error_importing_database">匯入數據庫時出現錯誤</string>
<string name="error_exporting_chat_database">匯出數據庫時出</string>
<string name="error_importing_database">匯入數據庫時出</string>
<string name="database_passphrase_will_be_updated">受加密的數據庫密碼會再次更新。</string>
<string name="delete_chat_archive_question">刪除封存對話?</string>
<string name="encrypt_database_question">加密數據庫?</string>
@@ -827,15 +827,15 @@
<string name="status_contact_has_no_e2e_encryption">對話沒有經過端對端加密</string>
<string name="database_encrypted">數據庫已加密!</string>
<string name="encrypted_database">已加密數據庫</string>
<string name="chat_archive_section">對話封存</string>
<string name="chat_archive_section">封存對話</string>
<string name="snd_group_event_group_profile_updated">群組資料已經更新</string>
<string name="group_member_role_member">成員</string>
<string name="group_info_member_you">你:<xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="button_delete_group">刪除群組</string>
<string name="v4_4_live_messages">即時訊息</string>
<string name="chat_archive_header">對話封存</string>
<string name="error_removing_member">移除成員時出現錯誤</string>
<string name="error_changing_role">修改身份時出現錯誤</string>
<string name="chat_archive_header">封存對話</string>
<string name="error_removing_member">移除成員時出</string>
<string name="error_changing_role">修改身份時出</string>
<string name="info_row_group">群組</string>
<string name="info_row_connection">連線</string>
<string name="conn_level_desc_direct">直接</string>
@@ -850,7 +850,7 @@
<string name="group_members_can_send_disappearing">群組內的成員可以傳送自動銷毀的訊息。</string>
<string name="disappearing_messages_are_prohibited">自動銷毀訊息於這個群組內是禁用的。</string>
<string name="feature_offered_item">提供 %s</string>
<string name="error_saving_group_profile">儲存群組檔案時有錯誤</string>
<string name="error_saving_group_profile">儲存群組檔案時出錯</string>
<string name="network_options_revert">恢復</string>
<string name="theme">主題</string>
<string name="save_color">儲存顏色</string>
@@ -914,7 +914,7 @@
<string name="to_protect_privacy_simplex_has_ids_for_queues">為了保護隱私,而不像是其他平台般需要提取和存儲用戶的 ID資料,<xliff:g id="appName">SimpleX</xliff:g> 本平台具有SimpleX自家隊列的標識符,對於你的每個聯絡人也是獨一無二的。</string>
<string name="onboarding_notifications_mode_off">當應用程式是開啟</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">你可以控制通過哪一個伺服器 <b>來接收</b> 你的聯絡人訊息 – 這些伺服器用來接收他們傳送給你的訊息。</string>
<string name="allow_accepting_calls_from_lock_screen">透過設定啟用於上鎖畫面顯示來電通知</string>
<string name="allow_accepting_calls_from_lock_screen">透過設定啟用於上鎖畫面顯示來電通知</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">這操作不能還原 - 你現有的個人檔案,聯絡人,訊息和檔案將會不可逆地的失去。</string>
<string name="you_must_use_the_most_recent_version_of_database">你必須在裝置上使用最新版本的對話數據庫,否則你可能會停止接收某些聯絡人的訊息。</string>
<string name="delete_files_and_media_desc">這操作不能還原 - 所有已經接收和傳送的檔案和媒體檔案將會刪除。低解析度圖片將保留。</string>
@@ -948,15 +948,15 @@
<string name="settings_section_title_you"></string>
<string name="settings_experimental_features">實驗性功能</string>
<string name="database_is_not_encrypted">你對話的數據庫並未加受加密 - 設置密碼保護它。</string>
<string name="passphrase_is_different">資料庫密碼與存在金鑰庫中的密碼不同。</string>
<string name="passphrase_is_different">數據庫密碼與存在金鑰庫中的密碼不同。</string>
<string name="unknown_error">不明的錯誤</string>
<string name="restore_database_alert_desc">還原數據庫備份後請輸入舊密碼。這個操作是不能撤銷的!</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">你可以透過應用程式的設置或重新啟動應用程式來開始新的對話。</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">你可以透過應用程式的設定或透過數據庫去重新啟動應用程式來開始新的對話。</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">你已經被邀请加入至群組。加入後可與群組內的成員對話。</string>
<string name="you_joined_this_group">你已加入至群組</string>
<string name="icon_descr_contact_checked">已確認聯絡人</string>
<string name="your_chat_database">你的對話數據庫</string>
<string name="delete_chat_profile_question">刪除個人檔案</string>
<string name="delete_chat_profile_question">刪除對話資料</string>
<string name="wrong_passphrase">錯誤的數據庫密碼</string>
<string name="unknown_database_error_with_info">未知的數據庫錯誤:%s</string>
<string name="wrong_passphrase_title">密碼錯誤!</string>
@@ -971,60 +971,95 @@
<string name="snd_group_event_changed_role_for_yourself">你修改了自己的身份為 %s</string>
<string name="snd_conn_event_switch_queue_phase_completed">你修改了地址</string>
<string name="moderated_item_description">由 %s 管理</string>
<string name="moderate_message_will_be_deleted_warning">將為所有成員刪除該息。</string>
<string name="delete_member_message__question">刪除成員息?</string>
<string name="moderate_message_will_be_deleted_warning">將為所有成員刪除該息。</string>
<string name="delete_member_message__question">刪除成員息?</string>
<string name="moderate_verb">主持</string>
<string name="moderate_message_will_be_marked_warning">息將對所有成員標記為已審核。</string>
<string name="observer_cant_send_message_title">不能發送消息!</string>
<string name="you_are_observer">是觀察者</string>
<string name="moderate_message_will_be_marked_warning">息將對所有成員標記為已審核。</string>
<string name="observer_cant_send_message_title">不能傳送訊息!</string>
<string name="you_are_observer">是觀察者</string>
<string name="group_member_role_observer">觀察者</string>
<string name="error_updating_link_for_group">更新群組接時出錯</string>
<string name="error_updating_link_for_group">更新群組接時出錯</string>
<string name="observer_cant_send_message_desc">請聯繫群管理員。</string>
<string name="initial_member_role">初始角色</string>
<string name="language_system">系統</string>
<string name="you_can_hide_or_mute_user_profile">可以隱藏或靜音用戶配置文件 - 按住它以顯示菜單。</string>
<string name="smp_save_servers_question">保存服務器?</string>
<string name="you_can_hide_or_mute_user_profile">可以隱藏或靜音用戶檔案 - 按住它以顯示菜單。</string>
<string name="smp_save_servers_question">儲存伺服器?</string>
<string name="confirm_password">確認密碼</string>
<string name="hidden_profile_password">隱藏的個人資料密碼</string>
<string name="hide_profile">隱藏個人資料</string>
<string name="password_to_show">顯示密碼</string>
<string name="save_profile_password">存個人資料密碼</string>
<string name="to_reveal_profile_enter_password">要顯示的隱藏個人資料,請在的聊天個人資料頁面的搜索字段中輸入完整密碼。</string>
<string name="button_welcome_message">歡迎</string>
<string name="save_and_update_group_profile">存和更新組配置文件</string>
<string name="save_welcome_message_question">存歡迎息?</string>
<string name="save_profile_password">存個人資料密碼</string>
<string name="to_reveal_profile_enter_password">要顯示的隱藏個人資料,請在的聊天個人資料頁面的搜索字段中輸入完整密碼。</string>
<string name="button_welcome_message">歡迎</string>
<string name="save_and_update_group_profile">存和更新組配置檔案</string>
<string name="save_welcome_message_question">存歡迎息?</string>
<string name="cant_delete_user_profile">無法刪除用戶個人資料!</string>
<string name="user_hide">隱藏</string>
<string name="make_profile_private">將個人資料設為私密!</string>
<string name="v4_6_audio_video_calls">視頻通話</string>
<string name="v4_6_audio_video_calls">語音和視頻通話</string>
<string name="v4_6_chinese_spanish_interface">中文和西班牙文界面</string>
<string name="v4_6_reduced_battery_usage">進一步減少電池使用</string>
<string name="v4_6_group_moderation">組審核</string>
<string name="v4_6_group_moderation">組審核</string>
<string name="v4_6_reduced_battery_usage_descr">更多改進即將推出!</string>
<string name="v4_6_group_moderation_descr">現在管理員可以:
\n- 刪除成員的息。
\n- 刪除成員的息。
\n- 禁用成員(“觀察員”角色)</string>
<string name="v4_6_hidden_chat_profiles_descr">使用密碼保護的聊天資料!</string>
<string name="relay_server_protects_ip">中繼服器保護的 IP 地址,但它可以觀察通話的持續時間。</string>
<string name="v4_6_hidden_chat_profiles_descr">使用密碼保護的聊天資料!</string>
<string name="relay_server_protects_ip">中繼服器保護的 IP 地址,但它可以觀察通話的持續時間。</string>
<string name="button_add_welcome_message">添加歡迎信息</string>
<string name="error_saving_user_password">保存用戶密碼時出錯</string>
<string name="error_updating_user_privacy">更新用戶隱私時出錯</string>
<string name="relay_server_if_necessary">中繼服器僅在必要時使用。 另一方可以觀察到的 IP 地址。</string>
<string name="enter_password_to_show">在上面輸入密碼以顯示</string>
<string name="v4_6_group_welcome_message">组欢迎信</string>
<string name="relay_server_if_necessary">中繼服器僅在必要時使用。 另一方可以觀察到的 IP 地址。</string>
<string name="enter_password_to_show">輸入密碼去搜尋</string>
<string name="v4_6_group_welcome_message">組歡迎訊</string>
<string name="v4_6_hidden_chat_profiles">隱藏的聊天資料</string>
<string name="dont_show_again">不再顯示</string>
<string name="user_mute">靜音</string>
<string name="muted_when_inactive">Muted when inactive!</string>
<string name="v4_6_group_welcome_message_descr">設置向新成員顯示的息!</string>
<string name="tap_to_activate_profile">點擊以激活配置文件</string>
<string name="v4_6_group_welcome_message_descr">設置向新成員顯示的息!</string>
<string name="tap_to_activate_profile">點擊以激活配置檔案</string>
<string name="v4_6_audio_video_calls_descr">支持藍牙和其他改進。</string>
<string name="should_be_at_least_one_visible_profile">應該至少有一個可見的用戶配置文件</string>
<string name="group_welcome_title">歡迎</string>
<string name="should_be_at_least_one_visible_profile">至少有一個可見的用戶配置檔案</string>
<string name="group_welcome_title">歡迎</string>
<string name="v4_6_chinese_spanish_interface_descr">感謝用戶——通過 Weblate 做出貢獻!</string>
<string name="should_be_at_least_one_profile">應該至少有一個用戶配置文件</string>
<string name="should_be_at_least_one_profile">應該至少有一個用戶配置檔案</string>
<string name="user_unmute">取消靜音</string>
<string name="you_will_still_receive_calls_and_ntfs">當靜音配置文件處於活動狀態時,仍會收到來自靜音配置文件的電話和通知。</string>
<string name="you_will_still_receive_calls_and_ntfs">當靜音配置檔案處於活動狀態時,仍會收到來自靜音配置檔案的通話和通知。</string>
<string name="user_unhide">取消隱藏</string>
<string name="settings_send_files_via_xftp">通過 XFTP 傳送文件</string>
<string name="settings_send_files_via_xftp">通過 XFTP 傳送影片和檔案</string>
<string name="video_will_be_received_when_contact_is_online">影片將會在你的聯絡人在線時接收,請你等等或者稍後再檢查!</string>
<string name="confirm_database_upgrades">確認數據庫更新</string>
<string name="incompatible_database_version">數據庫版本不相容</string>
<string name="database_downgrade">數據庫降級</string>
<string name="database_upgrade">數據庫升級</string>
<string name="invalid_migration_confirmation">無效的遷移確認</string>
<string name="mtr_error_no_down_migration">數據庫現行版本比應用程式新,但是無法降級遷出:%s</string>
<string name="mtr_error_different">在應用程式/數據庫的不同遷移:%s/%s</string>
<string name="database_migrations">遷移:%s</string>
<string name="database_downgrade_warning">警告:你可能會遺失部分數據!</string>
<string name="image_will_be_received_when_contact_completes_uploading">圖片將會在你的聯絡人完成上傳後接收。</string>
<string name="file_will_be_received_when_contact_completes_uploading">檔案將會在你的聯絡人完成上傳後接收。</string>
<string name="settings_section_title_experimenta">實驗性</string>
<string name="xftp_requires_v461">通過 XFTP 去接收需要 v4.6.1 以上的版本。</string>
<string name="upgrade_and_open_chat">升級和開始對話</string>
<string name="cancel_file__question">取消傳輸檔案?</string>
<string name="file_transfer_will_be_cancelled_warning">檔案傳遞將會取消。若是在傳遞檔案中,亦會暫停。</string>
<string name="show_developer_options">顯示開發者選項</string>
<string name="delete_profile">刪除資料</string>
<string name="unhide_chat_profile">取消隱藏聊天資料</string>
<string name="unhide_profile">取消隱藏個人資料</string>
<string name="delete_chat_profile">刪除對話資料</string>
<string name="icon_descr_video_asked_to_receive">詢問以接收影片</string>
<string name="videos_limit_desc">同一時間只能傳送十段影片</string>
<string name="videos_limit_title">過量影片!</string>
<string name="video_descr">影片</string>
<string name="icon_descr_video_snd_complete">已傳送影片</string>
<string name="icon_descr_waiting_for_video">等待影片中</string>
<string name="video_will_be_received_when_contact_completes_uploading">影片將會在你的聯絡人完成上傳後接收</string>
<string name="waiting_for_video">等待影片中</string>
<string name="hide_dev_options">隱藏:</string>
<string name="show_dev_options">顯示:</string>
<string name="developer_options">數據庫IDs和傳輸隔離選項。</string>
<string name="downgrade_and_open_chat">降級和開啟對話</string>
<string name="profile_password">個人資料密碼</string>
</resources>
@@ -508,6 +508,11 @@
<string name="network_settings">Advanced network settings</string>
<string name="network_settings_title">Network settings</string>
<string name="network_socks_toggle">Use SOCKS proxy (port 9050)</string>
<string name="network_socks_proxy_settings">SOCKS proxy settings</string>
<string name="network_socks_toggle_use_socks_proxy">Use SOCKS proxy</string>
<string name="network_proxy_port">port %d</string>
<string name="host_verb">Host</string>
<string name="port_verb">Port</string>
<string name="network_enable_socks">Use SOCKS proxy?</string>
<string name="network_enable_socks_info">Access the servers via SOCKS proxy on port 9050? Proxy must be started before enabling this option.</string>
<string name="network_disable_socks">Use direct Internet connection?</string>
@@ -529,6 +534,7 @@
<string name="network_session_mode_user_description">A separate TCP connection (and SOCKS credential) will be used <b>for each chat profile you have in the app</b>.</string>
<string name="network_session_mode_entity_description">A separate TCP connection (and SOCKS credential) will be used <b>for each contact and group member</b>.\n<b>Please note</b>: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</string>
<string name="update_network_session_mode_question">Update transport isolation mode?</string>
<string name="disable_onion_hosts_when_not_supported">Set <i>Use .onion hosts</i> to No if SOCKS proxy does not support them.</string>
<string name="appearance_settings">Appearance</string>
<string name="app_version_title">App version</string>
<string name="app_version_name">App version: v%s</string>
+50 -18
View File
@@ -23,7 +23,10 @@ struct ContentView: View {
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
@AppStorage(DEFAULT_PRIVACY_PROTECT_SCREEN) private var protectScreen = false
@AppStorage(DEFAULT_NOTIFICATION_ALERT_SHOWN) private var notificationAlertShown = false
@State private var showSettings = false
@State private var showWhatsNew = false
@State private var showChooseLAMode = false
@State private var showSetPasscode = false
var body: some View {
ZStack {
@@ -31,6 +34,20 @@ struct ContentView: View {
if chatModel.showCallView, let call = chatModel.activeCall {
callView(call)
}
if !showSettings, let la = chatModel.laRequest {
LocalAuthView(authRequest: la)
} else if showSetPasscode {
SetAppPasscodeView {
prefPerformLA = true
showSetPasscode = false
privacyLocalAuthModeDefault.set(.passcode)
alertManager.showAlert(laTurnedOnAlert())
} cancel: {
prefPerformLA = false
showSetPasscode = false
alertManager.showAlert(laPasscodeNotSetAlert())
}
}
}
.onAppear {
if prefPerformLA { requestNtfAuthorization() }
@@ -40,6 +57,13 @@ struct ContentView: View {
initAuthenticate()
}
.alert(isPresented: $alertManager.presentAlert) { alertManager.alertView! }
.sheet(isPresented: $showSettings) {
SettingsView(showSettings: $showSettings)
}
.confirmationDialog("SimpleX Lock mode", isPresented: $showChooseLAMode, titleVisibility: .visible) {
Button("System authentication") { initialEnableLA() }
Button("Passcode entry") { showSetPasscode = true }
}
}
@ViewBuilder private func contentView() -> some View {
@@ -82,7 +106,7 @@ struct ContentView: View {
private func mainView() -> some View {
ZStack(alignment: .top) {
ChatListView().privacySensitive(protectScreen)
ChatListView(showSettings: $showSettings).privacySensitive(protectScreen)
.onAppear {
if !prefPerformLA { requestNtfAuthorization() }
// Local Authentication notice is to be shown on next start after onboarding is complete
@@ -132,6 +156,7 @@ struct ContentView: View {
}
private func initAuthenticate() {
logger.debug("initAuthenticate")
if CallController.useCallKit() && chatModel.showCallView && chatModel.activeCall != nil {
userAuthorized = false
} else if doAuthenticate {
@@ -152,14 +177,18 @@ struct ContentView: View {
private func justAuthenticate() {
userAuthorized = false
authenticate(reason: NSLocalizedString("Unlock", comment: "authentication reason")) { laResult in
let laMode = privacyLocalAuthModeDefault.get()
authenticate(reason: NSLocalizedString("Unlock app", comment: "authentication reason")) { laResult in
logger.debug("authenticate callback: \(String(describing: laResult))")
switch (laResult) {
case .success:
userAuthorized = true
canConnectCall = true
lastSuccessfulUnlock = ProcessInfo.processInfo.systemUptime
case .failed:
break
if laMode == .passcode {
AlertManager.shared.showAlert(laFailedAlert())
}
case .unavailable:
userAuthorized = true
prefPerformLA = false
@@ -185,25 +214,28 @@ struct ContentView: View {
Alert(
title: Text("SimpleX Lock"),
message: Text("To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled."),
primaryButton: .default(Text("Turn on")) {
authenticate(reason: NSLocalizedString("Enable SimpleX Lock", comment: "authentication reason")) { laResult in
switch laResult {
case .success:
prefPerformLA = true
alertManager.showAlert(laTurnedOnAlert())
case .failed:
prefPerformLA = false
alertManager.showAlert(laFailedAlert())
case .unavailable:
prefPerformLA = false
alertManager.showAlert(laUnavailableInstructionAlert())
}
}
},
primaryButton: .default(Text("Turn on")) { showChooseLAMode = true },
secondaryButton: .cancel()
)
}
private func initialEnableLA () {
privacyLocalAuthModeDefault.set(.system)
authenticate(reason: NSLocalizedString("Enable SimpleX Lock", comment: "authentication reason")) { laResult in
switch laResult {
case .success:
prefPerformLA = true
alertManager.showAlert(laTurnedOnAlert())
case .failed:
prefPerformLA = false
alertManager.showAlert(laFailedAlert())
case .unavailable:
prefPerformLA = false
alertManager.showAlert(laUnavailableInstructionAlert())
}
}
}
func notificationAlert() -> Alert {
Alert(
title: Text("Notifications are disabled!"),
+1
View File
@@ -21,6 +21,7 @@ final class ChatModel: ObservableObject {
@Published var chatDbChanged = false
@Published var chatDbEncrypted: Bool?
@Published var chatDbStatus: DBMigrationResult?
@Published var laRequest: LocalAuthRequest?
// list of chat "previews"
@Published var chats: [Chat] = []
// map of connections network statuses, key is agent connection id
+2 -1
View File
@@ -106,7 +106,8 @@ struct SimpleXApp: App {
private func authenticationExpired() -> Bool {
if let enteredBackground = enteredBackground {
return ProcessInfo.processInfo.systemUptime - enteredBackground >= 30
let delay = Double(UserDefaults.standard.integer(forKey: DEFAULT_LA_LOCK_DELAY))
return ProcessInfo.processInfo.systemUptime - enteredBackground >= delay
} else {
return true
}
@@ -11,7 +11,7 @@ import SimpleXChat
struct ChatListView: View {
@EnvironmentObject var chatModel: ChatModel
@State private var showSettings = false
@Binding var showSettings: Bool
@State private var searchText = ""
@State private var showAddChat = false
@State var userPickerVisible = false
@@ -114,9 +114,6 @@ struct ChatListView: View {
}
}
}
.sheet(isPresented: $showSettings) {
SettingsView(showSettings: $showSettings)
}
}
private func unreadBadge(_ text: Text? = Text(" "), size: CGFloat = 18) -> some View {
@@ -224,9 +221,9 @@ struct ChatListView_Previews: PreviewProvider {
]
return Group {
ChatListView()
ChatListView(showSettings: Binding.constant(false))
.environmentObject(chatModel)
ChatListView()
ChatListView(showSettings: Binding.constant(false))
.environmentObject(ChatModel())
}
}
@@ -40,7 +40,7 @@ struct DatabaseEncryptionView: View {
@State private var progressIndicator = false
@State private var useKeychainToggle = storeDBPassphraseGroupDefault.get()
@State private var initialRandomDBPassphrase = initialRandomDBPassphraseGroupDefault.get()
@State private var storedKey = getDatabaseKey() != nil
@State private var storedKey = kcDatabasePassword.get() != nil
@State private var currentKey = ""
@State private var newKey = ""
@State private var confirmNewKey = ""
@@ -124,7 +124,7 @@ struct DatabaseEncryptionView: View {
}
}
.onAppear {
if initialRandomDBPassphrase { currentKey = getDatabaseKey() ?? "" }
if initialRandomDBPassphrase { currentKey = kcDatabasePassword.get() ?? "" }
}
.disabled(m.chatRunning != false)
.alert(item: $alert) { item in databaseEncryptionAlert(item) }
@@ -140,7 +140,7 @@ struct DatabaseEncryptionView: View {
encryptionStartedDefault.set(false)
initialRandomDBPassphraseGroupDefault.set(false)
if useKeychain {
if setDatabaseKey(newKey) {
if kcDatabasePassword.set(newKey) {
await resetFormAfterEncryption(true)
await operationEnded(.databaseEncrypted)
} else {
@@ -184,7 +184,7 @@ struct DatabaseEncryptionView: View {
title: Text("Remove passphrase from keychain?"),
message: Text("Instant push notifications will be hidden!\n") + storeSecurelyDanger(),
primaryButton: .destructive(Text("Remove")) {
if removeDatabaseKey() {
if kcDatabasePassword.remove() {
logger.debug("passphrase removed from keychain")
setUseKeychain(false)
storedKey = false
@@ -13,7 +13,7 @@ struct DatabaseErrorView: View {
@EnvironmentObject var m: ChatModel
@State var status: DBMigrationResult
@State private var dbKey = ""
@State private var storedDBKey = getDatabaseKey()
@State private var storedDBKey = kcDatabasePassword.get()
@State private var useKeychain = storeDBPassphraseGroupDefault.get()
@State private var showRestoreDbButton = false
@State private var starting = false
@@ -131,7 +131,7 @@ struct DatabaseErrorView: View {
}
private func saveAndRunChat() {
if setDatabaseKey(dbKey) {
if kcDatabasePassword.set(dbKey) {
storeDBPassphraseGroupDefault.set(true)
initialRandomDBPassphraseGroupDefault.set(false)
}
@@ -355,7 +355,7 @@ struct DatabaseView: View {
do {
let config = ArchiveConfig(archivePath: archivePath.path)
try await apiImportArchive(config: config)
_ = removeDatabaseKey()
_ = kcDatabasePassword.remove()
await operationEnded(.archiveImported)
} catch let error {
await operationEnded(.error(title: "Error importing chat database", error: responseError(error)))
@@ -375,7 +375,7 @@ struct DatabaseView: View {
Task {
do {
try await apiDeleteStorage()
_ = removeDatabaseKey()
_ = kcDatabasePassword.remove()
storeDBPassphraseGroupDefault.set(true)
await operationEnded(.chatDeleted)
appFilesCountAndSize = directoryFileCountAndSize(getAppFilesDirectory())
@@ -8,6 +8,7 @@
import SwiftUI
import LocalAuthentication
import SimpleXChat
enum LAResult {
case success
@@ -25,7 +26,31 @@ func authorize(_ text: String, _ authorized: Binding<Bool>) {
}
}
func authenticate(reason: String, completed: @escaping (LAResult) -> Void) {
struct LocalAuthRequest {
var title: LocalizedStringKey? // if title is null, reason is shown
var reason: String
var password: String
var completed: (LAResult) -> Void
static var sample = LocalAuthRequest(title: "Enter Passcode", reason: "Authenticate", password: "", completed: { _ in })
}
func authenticate(title: LocalizedStringKey? = nil, reason: String, completed: @escaping (LAResult) -> Void) {
logger.debug("authenticate")
switch privacyLocalAuthModeDefault.get() {
case .system: systemAuthenticate(reason, completed)
case .passcode:
if let password = kcAppPassword.get() {
DispatchQueue.main.async {
ChatModel.shared.laRequest = LocalAuthRequest(title: title, reason: reason, password: password, completed: completed)
}
} else {
completed(.unavailable(authError: NSLocalizedString("No app password", comment: "Authentication unavailable")))
}
}
}
func systemAuthenticate(_ reason: String, _ completed: @escaping (LAResult) -> Void) {
let laContext = LAContext()
var authAvailabilityError: NSError?
if laContext.canEvaluatePolicy(.deviceOwnerAuthentication, error: &authAvailabilityError) {
@@ -52,6 +77,13 @@ func laTurnedOnAlert() -> Alert {
)
}
func laPasscodeNotSetAlert() -> Alert {
mkAlert(
title: "SimpleX Lock not enabled!",
message: "You can turn on SimpleX Lock via Settings."
)
}
func laFailedAlert() -> Alert {
mkAlert(
title: "Authentication failed",
@@ -72,3 +104,4 @@ func laUnavailableTurningOffAlert() -> Alert {
message: "Device authentication is disabled. Turning off SimpleX Lock."
)
}
@@ -0,0 +1,34 @@
//
// LocalAuthView.swift
// SimpleX (iOS)
//
// Created by Evgeny on 10/04/2023.
// Copyright © 2023 SimpleX Chat. All rights reserved.
//
import SwiftUI
struct LocalAuthView: View {
@EnvironmentObject var m: ChatModel
var authRequest: LocalAuthRequest
@State private var password = ""
var body: some View {
PasscodeView(passcode: $password, title: authRequest.title ?? "Enter Passcode", reason: authRequest.reason, submitLabel: "Submit") {
let r: LAResult = password == authRequest.password
? .success
: .failed(authError: NSLocalizedString("Incorrect passcode", comment: "PIN entry"))
m.laRequest = nil
authRequest.completed(r)
} cancel: {
m.laRequest = nil
authRequest.completed(.failed(authError: NSLocalizedString("Authentication cancelled", comment: "PIN entry")))
}
}
}
struct LocalAuthView_Previews: PreviewProvider {
static var previews: some View {
LocalAuthView(authRequest: LocalAuthRequest.sample)
}
}
@@ -0,0 +1,156 @@
//
// PasscodeEntry.swift
// SimpleX (iOS)
//
// Created by Evgeny on 10/04/2023.
// Copyright © 2023 SimpleX Chat. All rights reserved.
//
import SwiftUI
struct PasscodeEntry: View {
@EnvironmentObject var m: ChatModel
var width: CGFloat
var height: CGFloat
@Binding var password: String
@State private var showPassword = false
var body: some View {
VStack {
passwordView()
.padding(.bottom, 4)
if width < height * 2 / 3 {
verticalPasswordGrid()
} else {
horizontalPasswordGrid()
}
}
}
@ViewBuilder private func passwordView() -> some View {
Text(
password == ""
? " "
: splitPassword()
)
.font(showPassword ? .title2.monospacedDigit() : .body)
.onTapGesture {
showPassword = !showPassword
}
.frame(height: 30)
}
private func splitPassword() -> String {
let n = password.count < 8 ? 8 : 4
return password.enumerated().reduce("") { acc, c in
acc
+ (showPassword ? String(c.element) : "")
+ ((c.offset + 1) % n == 0 ? " " : "")
}
}
private func verticalPasswordGrid() -> some View {
let s = width / 3
return VStack(spacing: 0) {
digitsRow(s, 1, 2, 3)
Divider()
digitsRow(s, 4, 5, 6)
Divider()
digitsRow(s, 7, 8, 9)
Divider()
HStack(spacing: 0) {
passwordEdit(s, image: "multiply") {
password = ""
}
Divider()
passwordDigit(s, 0)
Divider()
passwordEdit(s, image: "delete.backward") {
if password != "" { password.removeLast() }
}
}
.frame(height: s)
}
.frame(width: width, height: s * 4 * 0.97)
}
private func horizontalPasswordGrid() -> some View {
let s = height / 5
return VStack(spacing: 0) {
horizontalDigitsRow(s, 1, 2, 3) {
passwordEdit(s, image: "multiply") {
password = ""
}
}
Divider()
horizontalDigitsRow(s, 4, 5, 6) {
passwordDigit(s, 0)
}
Divider()
horizontalDigitsRow(s, 7, 8, 9) {
passwordEdit(s, image: "delete.backward") {
if password != "" { password.removeLast() }
}
}
}
.frame(width: s * 4, height: s * 3 * 0.97)
}
private func digitsRow(_ size: CGFloat, _ d1: Int, _ d2: Int, _ d3: Int) -> some View {
HStack(spacing: 0) {
passwordDigit(size, d1)
Divider()
passwordDigit(size, d2)
Divider()
passwordDigit(size, d3)
}
.frame(height: size * 0.97)
}
private func horizontalDigitsRow<V: View>(_ size: CGFloat, _ d1: Int, _ d2: Int, _ d3: Int, _ button: @escaping () -> V) -> some View {
HStack(spacing: 0) {
digitsRow(size, d1, d2, d3)
Divider()
button()
}
.frame(height: size * 0.97)
}
private func passwordDigit(_ size: CGFloat, _ d: Int) -> some View {
let s = String(describing: d)
return passwordButton(size) {
if password.count < 16 {
password = password + s
}
} label: {
Text(s).font(.title)
}
.disabled(password.count >= 16)
}
private func passwordEdit(_ size: CGFloat, image: String, action: @escaping () -> Void) -> some View {
passwordButton(size, action: action) {
Image(systemName: image)
}
}
private func passwordButton<V: View>(_ size: CGFloat, action: @escaping () -> Void, label: () -> V) -> some View {
let h = size * 0.97
return Button(action: action) {
ZStack {
Circle()
.frame(width: h, height: h)
.foregroundColor(Color(uiColor: .systemBackground))
label()
}
}
.foregroundColor(.secondary)
.frame(width: size, height: h)
}
}
struct PasscodeEntry_Previews: PreviewProvider {
static var previews: some View {
PasscodeEntry(width: 800, height: 420, password: Binding.constant(""))
}
}
@@ -0,0 +1,92 @@
//
// PasscodeView.swift
// SimpleX (iOS)
//
// Created by Evgeny on 11/04/2023.
// Copyright © 2023 SimpleX Chat. All rights reserved.
//
import SwiftUI
struct PasscodeView: View {
@Binding var passcode: String
var title: LocalizedStringKey
var reason: String? = nil
var submitLabel: LocalizedStringKey
var submitEnabled: ((String) -> Bool)?
var submit: () -> Void
var cancel: () -> Void
var body: some View {
GeometryReader { g in
if g.size.width < g.size.height * 2 / 3 {
verticalPasscodeView(g)
} else {
horizontalPasscodeView(g)
}
}
.padding(.horizontal, 40)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color(uiColor: .systemBackground))
}
private func verticalPasscodeView(_ g: GeometryProxy) -> some View {
VStack(spacing: 8) {
passcodeEntry(g)
Spacer()
HStack(spacing: 48) {
buttonsView()
}
}
.padding(.vertical, 32)
}
private func horizontalPasscodeView(_ g: GeometryProxy) -> some View {
HStack(alignment: .bottom, spacing: 48) {
VStack(spacing: 8) {
passcodeEntry(g)
}
VStack(spacing: 48) {
buttonsView()
}
.frame(maxHeight: g.size.height / 5 * 3 * 0.97)
}
.frame(maxWidth: .infinity)
.padding(.vertical)
}
@ViewBuilder private func passcodeEntry(_ g: GeometryProxy) -> some View {
Text(title)
.font(.title)
.bold()
.padding(.top, 8)
if let reason = reason {
Text(reason).padding(.top, 4)
}
Spacer()
PasscodeEntry(width: g.size.width, height: g.size.height, password: $passcode)
}
@ViewBuilder private func buttonsView() -> some View {
Button(action: cancel) {
Label("Cancel", systemImage: "multiply")
}
Button(action: submit) {
Label(submitLabel, systemImage: "checkmark")
}
.disabled(submitEnabled?(passcode) == false || passcode.count < 4)
}
}
struct PasscodeViewView_Previews: PreviewProvider {
static var previews: some View {
PasscodeView(
passcode: Binding.constant(""),
title: "Enter Passcode",
reason: "Unlock app",
submitLabel: "Submit",
submit: {},
cancel: {}
)
}
}
@@ -0,0 +1,65 @@
//
// SetAppPaswordView.swift
// SimpleX (iOS)
//
// Created by Evgeny on 10/04/2023.
// Copyright © 2023 SimpleX Chat. All rights reserved.
//
import SwiftUI
import SimpleXChat
struct SetAppPasscodeView: View {
var submit: () -> Void
var cancel: () -> Void
@Environment(\.dismiss) var dismiss: DismissAction
@State private var showKeychainError = false
@State private var passcode = ""
@State private var enteredPassword = ""
@State private var confirming = false
var body: some View {
ZStack {
if confirming {
setPasswordView(
title: "Confirm Passcode",
submitLabel: "Confirm",
submitEnabled: { pwd in pwd == enteredPassword }
) {
if passcode == enteredPassword {
if kcAppPassword.set(passcode) {
enteredPassword = ""
passcode = ""
dismiss()
submit()
} else {
showKeychainError = true
}
}
}
} else {
setPasswordView(title: "New Passcode", submitLabel: "Save") {
enteredPassword = passcode
passcode = ""
confirming = true
}
}
}
.alert(isPresented: $showKeychainError) {
mkAlert(title: "KeyChain error", message: "Error saving passcode")
}
}
private func setPasswordView(title: LocalizedStringKey, submitLabel: LocalizedStringKey, submitEnabled: (((String) -> Bool))? = nil, submit: @escaping () -> Void) -> some View {
PasscodeView(passcode: $passcode, title: title, submitLabel: submitLabel, submitEnabled: submitEnabled, submit: submit) {
dismiss()
cancel()
}
}
}
struct SetAppPasscodeView_Previews: PreviewProvider {
static var previews: some View {
SetAppPasscodeView(submit: {}, cancel: {})
}
}
@@ -38,6 +38,8 @@ struct DeveloperView: View {
settingsRow("chevron.left.forwardslash.chevron.right") {
Toggle("Show developer options", isOn: $developerTools)
}
} header: {
Text("")
} footer: {
(developerTools ? Text("Show:") : Text("Hide:")) + Text(" ") + Text("Database IDs and Transport isolation option.")
}
@@ -14,12 +14,27 @@ struct PrivacySettings: View {
@AppStorage(DEFAULT_PRIVACY_LINK_PREVIEWS) private var useLinkPreviews = true
@State private var simplexLinkMode = privacySimplexLinkModeDefault.get()
@AppStorage(DEFAULT_PRIVACY_PROTECT_SCREEN) private var protectScreen = false
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
@State private var currentLAMode = privacyLocalAuthModeDefault.get()
var body: some View {
VStack {
List {
Section("Device") {
SimplexLockSetting()
NavigationLink {
SimplexLockView(prefPerformLA: $prefPerformLA, currentLAMode: $currentLAMode)
.navigationTitle("SimpleX Lock")
} label: {
if prefPerformLA {
settingsRow("lock.fill", color: .green) {
simplexLockRow(currentLAMode.text)
}
} else {
settingsRow("lock") {
simplexLockRow("Off")
}
}
}
settingsRow("eye.slash") {
Toggle("Protect app screen", isOn: $protectScreen)
}
@@ -56,38 +71,125 @@ struct PrivacySettings: View {
}
}
}
private func simplexLockRow(_ value: LocalizedStringKey) -> some View {
HStack {
Text("SimpleX Lock")
Spacer()
Text(value)
}
}
}
struct SimplexLockSetting: View {
enum LAMode: String, Identifiable, CaseIterable {
case system
case passcode
public var id: Self { self }
var text: LocalizedStringKey {
switch self {
case .system: return "System"
case .passcode: return "Passcode"
}
}
}
struct SimplexLockView: View {
@Binding var prefPerformLA: Bool
@Binding var currentLAMode: LAMode
@EnvironmentObject var m: ChatModel
@AppStorage(DEFAULT_LA_NOTICE_SHOWN) private var prefLANoticeShown = false
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
@State private var laMode: LAMode = privacyLocalAuthModeDefault.get()
@AppStorage(DEFAULT_LA_LOCK_DELAY) private var laLockDelay = 30
@State var performLA: Bool = UserDefaults.standard.bool(forKey: DEFAULT_PERFORM_LA)
@State private var performLAToggleReset = false
@State var laAlert: laSettingViewAlert? = nil
@State private var performLAModeReset = false
@State private var showPasswordAction: PasswordAction? = nil
@State private var showChangePassword = false
@State var laAlert: LASettingViewAlert? = nil
enum laSettingViewAlert: Identifiable {
enum LASettingViewAlert: Identifiable {
case laTurnedOnAlert
case laFailedAlert
case laUnavailableInstructionAlert
case laUnavailableTurningOffAlert
case laPasscodeSetAlert
case laPasscodeChangedAlert
case laPasscodeNotChangedAlert
var id: laSettingViewAlert { get { self } }
var id: Self { self }
}
enum PasswordAction: Identifiable {
case enableAuth
case toggleMode
case changePassword
var id: Self { self }
}
let laDelays: [Int] = [10, 30, 60, 180, 0]
func laDelayText(_ t: Int) -> LocalizedStringKey {
let m = t / 60
let s = t % 60
return t == 0
? "Immediately"
: m == 0 || s != 0
? "\(s) seconds" // there are no options where both minutes and seconds are needed
: "\(m) minutes"
}
var body: some View {
settingsRow("lock") {
Toggle("SimpleX Lock", isOn: $performLA)
VStack {
List {
Section("") {
Toggle("Enable lock", isOn: $performLA)
Picker("Lock mode", selection: $laMode) {
ForEach(LAMode.allCases) { mode in
Text(mode.text)
}
}
if performLA {
Picker("Lock after", selection: $laLockDelay) {
let delays = laDelays.contains(laLockDelay) ? laDelays : [laLockDelay] + laDelays
ForEach(delays, id: \.self) { t in
Text(laDelayText(t))
}
}
if showChangePassword && laMode == .passcode {
Button("Change Passcode") {
changeLAPassword()
}
}
}
}
}
}
.onChange(of: performLA) { performLAToggle in
prefLANoticeShown = true
if performLAToggleReset {
performLAToggleReset = false
} else {
if performLAToggle {
} else if performLAToggle {
switch currentLAMode {
case .system:
enableLA()
} else {
disableLA()
case .passcode:
resetLA()
showPasswordAction = .enableAuth
}
} else {
disableLA()
}
}
.onChange(of: laMode) { _ in
if performLAModeReset {
performLAModeReset = false
} else if performLA {
toggleLAMode()
} else {
updateLAMode()
}
}
.alert(item: $laAlert) { alertItem in
@@ -96,46 +198,125 @@ struct SimplexLockSetting: View {
case .laFailedAlert: return laFailedAlert()
case .laUnavailableInstructionAlert: return laUnavailableInstructionAlert()
case .laUnavailableTurningOffAlert: return laUnavailableTurningOffAlert()
case .laPasscodeSetAlert: return passcodeAlert("Passcode set!")
case .laPasscodeChangedAlert: return passcodeAlert("Passcode changed!")
case .laPasscodeNotChangedAlert: return mkAlert(title: "Passcode not changed!")
}
}
.sheet(item: $showPasswordAction) { a in
switch a {
case .enableAuth:
SetAppPasscodeView {
laLockDelay = 30
prefPerformLA = true
showChangePassword = true
showLAAlert(.laPasscodeSetAlert)
} cancel: {
resetLAEnabled(false)
}
case .toggleMode:
SetAppPasscodeView {
laLockDelay = 30
updateLAMode()
showChangePassword = true
showLAAlert(.laPasscodeSetAlert)
} cancel: {
revertLAMode()
}
case .changePassword:
SetAppPasscodeView {
showLAAlert(.laPasscodeChangedAlert)
} cancel: {
showLAAlert(.laPasscodeNotChangedAlert)
}
}
}
.onAppear {
showChangePassword = prefPerformLA && currentLAMode == .passcode
}
.onDisappear() {
m.laRequest = nil
}
}
private func showLAAlert(_ a: LASettingViewAlert) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
laAlert = a
}
}
private func toggleLAMode() {
authenticate(reason: NSLocalizedString("Change lock mode", comment: "authentication reason")) { laResult in
switch laResult {
case .failed:
revertLAMode()
laAlert = .laFailedAlert
case .success:
switch laMode {
case .system:
updateLAMode()
authenticate(reason: NSLocalizedString("Enable SimpleX Lock", comment: "authentication reason")) { laResult in
switch laResult {
case .success:
_ = kcAppPassword.remove()
laAlert = .laTurnedOnAlert
case .failed, .unavailable:
currentLAMode = .passcode
privacyLocalAuthModeDefault.set(.passcode)
revertLAMode()
laAlert = .laFailedAlert
}
}
case .passcode:
showPasswordAction = .toggleMode
}
case .unavailable:
disableUnavailableLA()
}
}
}
private func changeLAPassword() {
authenticate(title: "Current Passcode", reason: NSLocalizedString("Change passcode", comment: "authentication reason")) { laResult in
switch laResult {
case .failed: laAlert = .laFailedAlert
case .success: showPasswordAction = .changePassword
case .unavailable: disableUnavailableLA()
}
}
}
private func enableLA() {
resetLA()
authenticate(reason: NSLocalizedString("Enable SimpleX Lock", comment: "authentication reason")) { laResult in
switch laResult {
case .success:
prefPerformLA = true
laAlert = .laTurnedOnAlert
case .failed:
prefPerformLA = false
withAnimation() {
performLA = false
}
performLAToggleReset = true
resetLAEnabled(false)
laAlert = .laFailedAlert
case .unavailable:
prefPerformLA = false
withAnimation() {
performLA = false
}
performLAToggleReset = true
laAlert = .laUnavailableInstructionAlert
disableUnavailableLA()
}
}
}
private func disableUnavailableLA() {
resetLAEnabled(false)
laMode = .system
updateLAMode()
laAlert = .laUnavailableInstructionAlert
}
private func disableLA() {
authenticate(reason: NSLocalizedString("Disable SimpleX Lock", comment: "authentication reason")) { laResult in
switch (laResult) {
case .success:
prefPerformLA = false
resetLA()
case .failed:
prefPerformLA = true
withAnimation() {
performLA = true
}
performLAToggleReset = true
resetLAEnabled(true)
laAlert = .laFailedAlert
case .unavailable:
prefPerformLA = false
@@ -143,6 +324,32 @@ struct SimplexLockSetting: View {
}
}
}
private func resetLA() {
_ = kcAppPassword.remove()
laLockDelay = 30
showChangePassword = false
}
private func resetLAEnabled(_ onOff: Bool) {
prefPerformLA = onOff
performLAToggleReset = true
withAnimation { performLA = onOff }
}
private func revertLAMode() {
performLAModeReset = true
withAnimation { laMode = currentLAMode }
}
private func updateLAMode() {
currentLAMode = laMode
privacyLocalAuthModeDefault.set(laMode)
}
private func passcodeAlert(_ title: LocalizedStringKey) -> Alert {
mkAlert(title: title, message: "Please remember or store it securely - there is no way to recover a lost passcode!")
}
}
struct PrivacySettings_Previews: PreviewProvider {
@@ -19,6 +19,8 @@ let appBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as?
let DEFAULT_SHOW_LA_NOTICE = "showLocalAuthenticationNotice"
let DEFAULT_LA_NOTICE_SHOWN = "localAuthenticationNoticeShown"
let DEFAULT_PERFORM_LA = "performLocalAuthentication"
let DEFAULT_LA_MODE = "localAuthenticationMode"
let DEFAULT_LA_LOCK_DELAY = "localAuthenticationLockDelay"
let DEFAULT_NOTIFICATION_ALERT_SHOWN = "notificationAlertShown"
let DEFAULT_WEBRTC_POLICY_RELAY = "webrtcPolicyRelay"
let DEFAULT_WEBRTC_ICE_SERVERS = "webrtcICEServers"
@@ -48,22 +50,24 @@ let appDefaults: [String: Any] = [
DEFAULT_SHOW_LA_NOTICE: false,
DEFAULT_LA_NOTICE_SHOWN: false,
DEFAULT_PERFORM_LA: false,
DEFAULT_LA_MODE: LAMode.system.rawValue,
DEFAULT_LA_LOCK_DELAY: 30,
DEFAULT_NOTIFICATION_ALERT_SHOWN: false,
DEFAULT_WEBRTC_POLICY_RELAY: true,
DEFAULT_CALL_KIT_CALLS_IN_RECENTS: false,
DEFAULT_PRIVACY_ACCEPT_IMAGES: true,
DEFAULT_PRIVACY_LINK_PREVIEWS: true,
DEFAULT_PRIVACY_SIMPLEX_LINK_MODE: "description",
DEFAULT_PRIVACY_SIMPLEX_LINK_MODE: SimpleXLinkMode.description.rawValue,
DEFAULT_PRIVACY_PROTECT_SCREEN: false,
DEFAULT_EXPERIMENTAL_CALLS: false,
DEFAULT_CHAT_V3_DB_MIGRATION: "offer",
DEFAULT_CHAT_V3_DB_MIGRATION: V3DBMigrationState.offer.rawValue,
DEFAULT_DEVELOPER_TOOLS: false,
DEFAULT_ENCRYPTION_STARTED: false,
DEFAULT_ACCENT_COLOR_RED: 0.000,
DEFAULT_ACCENT_COLOR_GREEN: 0.533,
DEFAULT_ACCENT_COLOR_BLUE: 1.000,
DEFAULT_USER_INTERFACE_STYLE: 0,
DEFAULT_CONNECT_VIA_LINK_TAB: "scan",
DEFAULT_CONNECT_VIA_LINK_TAB: ConnectViaLinkTab.scan.rawValue,
DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false,
DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE: true,
DEFAULT_SHOW_MUTE_PROFILE_ALERT: true,
@@ -99,6 +103,8 @@ let connectViaLinkTabDefault = EnumDefault<ConnectViaLinkTab>(defaults: UserDefa
let privacySimplexLinkModeDefault = EnumDefault<SimpleXLinkMode>(defaults: UserDefaults.standard, forKey: DEFAULT_PRIVACY_SIMPLEX_LINK_MODE, withDefault: .description)
let privacyLocalAuthModeDefault = EnumDefault<LAMode>(defaults: UserDefaults.standard, forKey: DEFAULT_LA_MODE, withDefault: .system)
func setGroupDefaults() {
privacyAcceptImagesGroupDefault.set(UserDefaults.standard.bool(forKey: DEFAULT_PRIVACY_ACCEPT_IMAGES))
}
@@ -111,8 +117,16 @@ struct SettingsView: View {
@State private var settingsSheet: SettingsSheet?
var body: some View {
let user: User = chatModel.currentUser!
ZStack {
settingsView()
if let la = chatModel.laRequest {
LocalAuthView(authRequest: la)
}
}
}
@ViewBuilder func settingsView() -> some View {
let user: User = chatModel.currentUser!
NavigationView {
List {
Section("You") {
@@ -77,6 +77,11 @@
<target>%@ je ověřený</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>%@ servery</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ se chce připojit!</target>
@@ -137,11 +142,19 @@
<target>%lld členové</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld vteřin</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldd</target>
@@ -535,6 +548,10 @@
<target>Hlasové a video hovory</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Ověření selhalo</target>
@@ -640,16 +657,28 @@
<target>Změnit</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>Změnit přístupovou frázi databáze?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>Změnit roli člena?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Změna adresy příjemce</target>
@@ -755,6 +784,10 @@
<target>Barvy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Porovnejte bezpečnostní kódy se svými kontakty.</target>
@@ -770,6 +803,10 @@
<target>Potvrdit</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Potvrdit aktualizaci databáze</target>
@@ -930,6 +967,10 @@
<target>Vytvořit adresu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Vytvořit odkaz na skupinu</target>
@@ -965,6 +1006,10 @@
<target>Vytvořeno na %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Aktuální přístupová fráze…</target>
@@ -1148,6 +1193,10 @@
<target>Odstranění databáze</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Smazat soubory a média?</target>
@@ -1348,6 +1397,10 @@
<target>Snížit a otevřít chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Duplicitní zobrazované jméno!</target>
@@ -1388,6 +1441,10 @@
<target>Povolit okamžitá oznámení?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Povolit upozornění</target>
@@ -1425,6 +1482,7 @@
</trans-unit>
<trans-unit id="Encrypted message: database migration error" xml:space="preserve">
<source>Encrypted message: database migration error</source>
<target>Šifrovaná zpráva: chyba migrace databáze</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
@@ -1442,6 +1500,10 @@
<target>Šifrovaná zpráva: neočekávaná chyba</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Zadejte správnou přístupovou frázi.</target>
@@ -1582,6 +1644,10 @@
<target>Chyba při připojování ke skupině</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Chyba při příjmu souboru</target>
@@ -1592,21 +1658,25 @@
<target>Chyba při odebrání člena</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Chyba při ukládání serverů %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Chyba při ukládání serverů ICE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Chyba při ukládání serverů SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Chyba při ukládání profilu skupiny</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Při ukládání přístupové fráze do klíčenky došlo k chybě</target>
@@ -1684,6 +1754,7 @@
</trans-unit>
<trans-unit id="Experimental" xml:space="preserve">
<source>Experimental</source>
<target>Pokusný</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -1981,6 +2052,10 @@
<target>Obrázek bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Odolná vůči spamu a zneužití</target>
@@ -2051,6 +2126,10 @@
<target>Nekompatibilní verze databáze</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>Nesprávný bezpečnostní kód!</target>
@@ -2173,6 +2252,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Připojení ke skupině</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Chyba klíčenky</target>
@@ -2233,6 +2316,14 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Pouze lokální profilová data</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Vytvořte si soukromé připojení</target>
@@ -2243,9 +2334,9 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Změnit profil na soukromý!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Ujistěte se, že adresy SMP serverů jsou ve správném formátu, oddělené řádky a nejsou duplicitní (%@).</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Ujistěte se, že adresy %@ serverů jsou ve správném formátu, oddělené řádky a nejsou duplicitní (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2323,6 +2414,11 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Zprávy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Zprávy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Přenášení archivu databáze...</target>
@@ -2345,6 +2441,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
</trans-unit>
<trans-unit id="Migrations: %@" xml:space="preserve">
<source>Migrations: %@</source>
<target>Migrace: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
@@ -2397,6 +2494,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Stav sítě</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>Žádost o nový kontakt</target>
@@ -2437,6 +2538,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Ne</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>Nebyl vybrán žádný kontakt</target>
@@ -2486,6 +2591,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
- zakázat členy (role "pozorovatel")</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Vypnuto (místní)</target>
@@ -2611,6 +2720,26 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Interval PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Heslo k zobrazení</target>
@@ -2681,6 +2810,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Po obnovení zálohy databáze zadejte předchozí heslo. Tuto akci nelze vrátit zpět.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Restartujte aplikaci a přeneste databázi, abyste povolili doručování oznámení.</target>
@@ -3081,10 +3214,6 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Odeslat přímou zprávu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send files via XFTP" xml:space="preserve">
<source>Send files via XFTP</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Odesílání náhledů odkazů</target>
@@ -3115,6 +3244,11 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Odeslat je z galerie nebo vlastní klávesnice.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Odeslat soubory přes XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Odesílatel zrušil přenos souboru.</target>
@@ -3145,6 +3279,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Server vyžaduje autorizaci pro vytváření front, zkontrolujte heslo</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>Test serveru se nezdařil!</target>
@@ -3245,6 +3383,14 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Zámek SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>Zapnutý zámek SimpleX Lock</target>
@@ -3330,6 +3476,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Zastavit chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Podpořte SimpleX Chat</target>
@@ -3340,6 +3490,10 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</tar
<target>Systém</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>Časový limit připojení TCP</target>
@@ -3682,6 +3836,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Odemknout</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3734,6 +3892,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Zvýšit a otevřít chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Použít hostitele .onion</target>
@@ -3799,6 +3961,14 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Videohovor</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>Zobrazení bezpečnostního kódu</target>
@@ -3839,6 +4009,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Čekání na obrázek</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Upozornění: můžete ztratit nějaká data!</target>
@@ -3889,6 +4063,11 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Špatná přístupová fráze!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>XFTP servery</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Vy</target>
@@ -3966,6 +4145,10 @@ SimpleX zámek musí být povolen.</target>
<target>Chat můžete zahájit prostřednictvím aplikace Nastavení / Databáze nebo restartováním aplikace</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>K formátování zpráv můžete použít markdown:</target>
@@ -4076,6 +4259,11 @@ SimpleX zámek musí být povolen.</target>
<target>Pro tuto skupinu používáte inkognito profil - abyste zabránili sdílení svého hlavního profilu, není pozvání kontaktů povoleno</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>Vaše servery %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Vaše servery ICE</target>
@@ -4091,6 +4279,10 @@ SimpleX zámek musí být povolen.</target>
<target>Vaše kontaktní adresa SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Vaše hovory</target>
@@ -4402,6 +4594,7 @@ Servery SimpleX nevidí váš profil.</target>
</trans-unit>
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
<source>database version is newer than the app, but no down migration for: %@</source>
<target>verze databáze je novější než aplikace, ale žádný přechod dolů pro: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="default (%@)" xml:space="preserve">
@@ -4421,6 +4614,7 @@ Servery SimpleX nevidí váš profil.</target>
</trans-unit>
<trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve">
<source>different migration in the app/database: %@ / %@</source>
<target>různé migrace v aplikaci/databázi: %@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="direct" xml:space="preserve">
@@ -77,6 +77,11 @@
<target>%@ wurde erfolgreich überprüft</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>%@-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ will sich mit Ihnen verbinden!</target>
@@ -137,11 +142,19 @@
<target>%lld Mitglieder</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld Sekunde(n)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldT</target>
@@ -535,6 +548,10 @@
<target>Audio- und Videoanrufe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Authentifizierung fehlgeschlagen</target>
@@ -640,16 +657,28 @@
<target>Ändern</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>Datenbank-Passwort ändern?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>Die Mitgliederrolle ändern?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Wechseln der Empfängeradresse</target>
@@ -755,6 +784,10 @@
<target>Farben</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Vergleichen Sie die Sicherheitscodes mit Ihren Kontakten.</target>
@@ -770,6 +803,10 @@
<target>Bestätigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Datenbank-Aktualisierungen bestätigen</target>
@@ -930,6 +967,10 @@
<target>Adresse erstellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Gruppenlink erstellen</target>
@@ -965,6 +1006,10 @@
<target>Erstellt am %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Aktuelles Passwort…</target>
@@ -992,7 +1037,7 @@
</trans-unit>
<trans-unit id="Database downgrade" xml:space="preserve">
<source>Database downgrade</source>
<target>Datenbank-Herabstufung</target>
<target>Datenbank auf alte Version herabstufen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database encrypted!" xml:space="preserve">
@@ -1148,6 +1193,10 @@
<target>Datenbank löschen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Dateien und Medien löschen?</target>
@@ -1345,9 +1394,13 @@
</trans-unit>
<trans-unit id="Downgrade and open chat" xml:space="preserve">
<source>Downgrade and open chat</source>
<target>Herabstufen und den Chat öffnen</target>
<target>Datenbank herabstufen und den Chat öffnen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Doppelter Anzeigename!</target>
@@ -1388,6 +1441,10 @@
<target>Sofortige Benachrichtigungen aktivieren?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Benachrichtigungen aktivieren</target>
@@ -1425,6 +1482,7 @@
</trans-unit>
<trans-unit id="Encrypted message: database migration error" xml:space="preserve">
<source>Encrypted message: database migration error</source>
<target>Verschlüsselte Nachricht: Datenbank-Migrationsfehler</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
@@ -1442,6 +1500,10 @@
<target>Verschlüsselte Nachricht: Unerwarteter Fehler</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Geben Sie das korrekte Passwort ein.</target>
@@ -1582,6 +1644,10 @@
<target>Fehler beim Beitritt zur Gruppe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Fehler beim Empfangen der Datei</target>
@@ -1592,21 +1658,25 @@
<target>Fehler beim Entfernen des Mitglieds</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Fehler beim Speichern der %@-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Fehler beim Speichern der ICE-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Fehler beim Speichern der SMP-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Fehler beim Speichern des Gruppenprofils</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Fehler beim Speichern des Passworts in den Schlüsselbund</target>
@@ -1684,6 +1754,7 @@
</trans-unit>
<trans-unit id="Experimental" xml:space="preserve">
<source>Experimental</source>
<target>Experimentell</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -1981,6 +2052,10 @@
<target>Das Bild wird empfangen, sobald Ihr Kontakt online ist. Bitte warten oder schauen Sie später nochmal nach!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Immun gegen Spam und Missbrauch</target>
@@ -2051,6 +2126,10 @@
<target>Inkompatible Datenbank-Version</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>Falscher Sicherheitscode!</target>
@@ -2173,6 +2252,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Der Gruppe beitreten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Schlüsselbundfehler</target>
@@ -2233,6 +2316,14 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Nur lokale Profildaten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Stellen Sie eine private Verbindung her</target>
@@ -2243,9 +2334,9 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Privates Profil erzeugen!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Stellen Sie sicher, dass die SMP-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@).</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Stellen Sie sicher, dass die %@-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2323,6 +2414,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Nachrichten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Nachrichten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Das Datenbankarchiv wird migriert...</target>
@@ -2345,6 +2441,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
</trans-unit>
<trans-unit id="Migrations: %@" xml:space="preserve">
<source>Migrations: %@</source>
<target>Migrationen: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
@@ -2397,6 +2494,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Netzwerkstatus</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>Neue Kontaktanfrage</target>
@@ -2437,6 +2538,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Nein</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>Keine Kontakte ausgewählt</target>
@@ -2486,6 +2591,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
- Gruppenmitglieder deaktivieren ("Beobachter"-Rolle)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Aus (Lokal)</target>
@@ -2611,6 +2720,26 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>PING-Intervall</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Passwort anzeigen</target>
@@ -2681,6 +2810,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Bitte geben Sie das vorherige Passwort ein, nachdem Sie die Datenbanksicherung wiederhergestellt haben. Diese Aktion kann nicht rückgängig gemacht werden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Bitte führen Sie einen Neustart der App durch und migrieren Sie die Datenbank, um Benachrichtigungen zu aktivieren.</target>
@@ -2793,7 +2926,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
</trans-unit>
<trans-unit id="Read" xml:space="preserve">
<source>Read</source>
<target>Lesen</target>
<target>Gelesen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in our GitHub repository." xml:space="preserve">
@@ -3081,10 +3214,6 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Direktnachricht senden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Link-Vorschau senden</target>
@@ -3115,6 +3244,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Senden Sie diese aus dem Fotoalbum oder von individuellen Tastaturen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Dateien per XFTP versenden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Der Absender hat die Dateiübertragung abgebrochen.</target>
@@ -3145,6 +3279,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Um Warteschlangen zu erzeugen benötigt der Server eine Authentifizierung. Bitte überprüfen Sie das Passwort</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>Server Test ist fehlgeschlagen!</target>
@@ -3245,6 +3383,14 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>SimpleX Sperre</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>SimpleX Sperre aktiviert</target>
@@ -3330,6 +3476,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Chat beenden?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Unterstützung von SimpleX Chat</target>
@@ -3340,6 +3490,10 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>System</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>Timeout der TCP-Verbindung</target>
@@ -3372,7 +3526,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source>
<target>Tippen Sie, um das Profil zu aktivieren.</target>
<target>Tippen Sie auf das Profil um es zu aktivieren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
@@ -3682,6 +3836,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Entsperren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3734,6 +3892,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Aktualisieren und den Chat öffnen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Verwende .onion-Hosts</target>
@@ -3799,6 +3961,14 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Videoanruf</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>Schauen Sie sich den Sicherheitscode an</target>
@@ -3839,6 +4009,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Warten auf ein Bild</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Warnung: Sie könnten einige Daten verlieren!</target>
@@ -3889,6 +4063,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Falsches Passwort!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>XFTP-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Meine Daten</target>
@@ -3966,6 +4145,10 @@ Dafür muss die SimpleX Sperre aktiviert sein.</target>
<target>Sie können den Chat über die App-Einstellungen / Datenbank oder durch Neustart der App starten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>Um Nachrichteninhalte zu formatieren, können Sie Markdowns verwenden:</target>
@@ -4076,6 +4259,11 @@ Dafür muss die SimpleX Sperre aktiviert sein.</target>
<target>Sie verwenden ein Inkognito-Profil für diese Gruppe. Um zu verhindern, dass Sie Ihr Hauptprofil teilen, ist in diesem Fall das Einladen von Kontakten nicht erlaubt</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>Ihre %@-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Ihre ICE-Server</target>
@@ -4091,6 +4279,11 @@ Dafür muss die SimpleX Sperre aktiviert sein.</target>
<target>Meine SimpleX Kontaktadresse</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>Ihre XFTP-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Anrufe</target>
@@ -4402,6 +4595,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
<source>database version is newer than the app, but no down migration for: %@</source>
<target>Die Datenbank-Version ist neuer als die App, keine Abwärts-Migration für: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="default (%@)" xml:space="preserve">
@@ -4421,6 +4615,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve">
<source>different migration in the app/database: %@ / %@</source>
<target>Unterschiedlicher Migrationsstand in der App/Datenbank: %@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="direct" xml:space="preserve">
@@ -77,6 +77,11 @@
<target>%@ is verified</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>%@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ wants to connect!</target>
@@ -137,11 +142,21 @@
<target>%lld members</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<target>%lld minutes</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld second(s)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<target>%lld seconds</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldd</target>
@@ -535,6 +550,11 @@
<target>Audio and video calls</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<target>Authentication cancelled</target>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Authentication failed</target>
@@ -640,16 +660,31 @@
<target>Change</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<target>Change Passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>Change database passphrase?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<target>Change lock mode</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>Change member role?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<target>Change passcode</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Change receiving address</target>
@@ -755,6 +790,11 @@
<target>Colors</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<target>Compare file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Compare security codes with your contacts.</target>
@@ -770,6 +810,11 @@
<target>Confirm</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<target>Confirm Passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Confirm database upgrades</target>
@@ -930,6 +975,11 @@
<target>Create address</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<target>Create file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Create group link</target>
@@ -965,6 +1015,11 @@
<target>Created on %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<target>Current Passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Current passphrase…</target>
@@ -1148,6 +1203,11 @@
<target>Delete database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Delete file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Delete files and media?</target>
@@ -1348,6 +1408,11 @@
<target>Downgrade and open chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Download file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Duplicate display name!</target>
@@ -1388,6 +1453,11 @@
<target>Enable instant notifications?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<target>Enable lock</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Enable notifications</target>
@@ -1443,6 +1513,11 @@
<target>Encrypted message: unexpected error</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<target>Enter Passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Enter correct passphrase.</target>
@@ -1583,6 +1658,11 @@
<target>Error joining group</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<target>Error loading %@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Error receiving file</target>
@@ -1593,21 +1673,26 @@
<target>Error removing member</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Error saving %@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Error saving ICE servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Error saving SMP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Error saving group profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<target>Error saving passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Error saving passphrase to keychain</target>
@@ -1983,6 +2068,11 @@
<target>Image will be received when your contact is online, please wait or check later!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<target>Immediately</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Immune to spam and abuse</target>
@@ -2053,6 +2143,11 @@
<target>Incompatible database version</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<target>Incorrect passcode</target>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>Incorrect security code!</target>
@@ -2175,6 +2270,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Joining group</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<target>KeyChain error</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Keychain error</target>
@@ -2235,6 +2335,16 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Local profile data only</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<target>Lock after</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<target>Lock mode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Make a private connection</target>
@@ -2245,9 +2355,9 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Make profile private!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2325,6 +2435,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Messages</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Messages &amp; files</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Migrating database archive...</target>
@@ -2400,6 +2515,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Network status</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<target>New Passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>New contact request</target>
@@ -2440,6 +2560,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>No</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<target>No app password</target>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>No contacts selected</target>
@@ -2489,6 +2614,11 @@ We will be adding server redundancy to prevent lost messages.</target>
- disable members ("observer" role)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<target>Off</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Off (Local)</target>
@@ -2614,6 +2744,31 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>PING interval</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<target>Passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<target>Passcode changed!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<target>Passcode entry</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<target>Passcode not changed!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<target>Passcode set!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Password to show</target>
@@ -2684,6 +2839,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Please enter the previous password after restoring database backup. This action can not be undone.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<target>Please remember or store it securely - there is no way to recover a lost passcode!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Please restart the app and migrate the database to enable push notifications.</target>
@@ -3084,11 +3244,6 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Send direct message</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Send videos and files via XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Send link previews</target>
@@ -3119,6 +3274,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Send them from gallery or custom keyboards.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Send videos and files via XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Sender cancelled file transfer.</target>
@@ -3149,6 +3309,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Server requires authorization to create queues, check password</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<target>Server requires authorization to upload, check password</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>Server test failed!</target>
@@ -3249,6 +3414,16 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>SimpleX Lock</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<target>SimpleX Lock mode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<target>SimpleX Lock not enabled!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>SimpleX Lock turned on</target>
@@ -3334,6 +3509,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Stop chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Submit</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Support SimpleX Chat</target>
@@ -3344,6 +3524,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>System</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<target>System authentication</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>TCP connection timeout</target>
@@ -3686,6 +3871,11 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Unlock</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<target>Unlock app</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3738,6 +3928,11 @@ To connect, please ask your contact to create another connection link and check
<target>Upgrade and open chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Upload file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Use .onion hosts</target>
@@ -3803,6 +3998,16 @@ To connect, please ask your contact to create another connection link and check
<target>Video call</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<target>Video will be received when your contact completes uploading it.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<target>Video will be received when your contact is online, please wait or check later!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>View security code</target>
@@ -3843,6 +4048,11 @@ To connect, please ask your contact to create another connection link and check
<target>Waiting for image</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<target>Waiting for video</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Warning: you may lose some data!</target>
@@ -3893,6 +4103,11 @@ To connect, please ask your contact to create another connection link and check
<target>Wrong passphrase!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>XFTP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>You</target>
@@ -3970,6 +4185,11 @@ SimpleX Lock must be enabled.</target>
<target>You can start chat via app Settings / Database or by restarting the app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<target>You can turn on SimpleX Lock via Settings.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>You can use markdown to format messages:</target>
@@ -4080,6 +4300,11 @@ SimpleX Lock must be enabled.</target>
<target>You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>Your %@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Your ICE servers</target>
@@ -4095,6 +4320,11 @@ SimpleX Lock must be enabled.</target>
<target>Your SimpleX contact address</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>Your XFTP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Your calls</target>
@@ -77,6 +77,11 @@
<target>%@ está verificado</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>Servidores %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ ¡quiere conectar!</target>
@@ -137,11 +142,19 @@
<target>%lld miembros</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld segundo(s)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldd</target>
@@ -527,7 +540,7 @@
</trans-unit>
<trans-unit id="Audio &amp; video calls" xml:space="preserve">
<source>Audio &amp; video calls</source>
<target>Llamadas y videollamadas</target>
<target>Llamadas y Videollamadas</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Audio and video calls" xml:space="preserve">
@@ -535,6 +548,10 @@
<target>Llamadas y videollamadas</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Autenticación fallida</target>
@@ -640,16 +657,28 @@
<target>Cambiar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>¿Cambiar contraseña de la base de datos?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>¿Cambiar el rol del miembro?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Cambiar la dirección de recepción</target>
@@ -755,6 +784,10 @@
<target>Colores</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Compare los códigos de seguridad con sus contactos.</target>
@@ -770,6 +803,10 @@
<target>Confirmar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Confirmar actualizaciones de la bases de datos</target>
@@ -930,6 +967,10 @@
<target>Crear dirección</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Crear enlace de grupo</target>
@@ -965,6 +1006,10 @@
<target>Creado en %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Contraseña actual…</target>
@@ -1037,7 +1082,7 @@
<trans-unit id="Database passphrase &amp; export" xml:space="preserve">
<source>Database passphrase &amp; export</source>
<target>Base de datos
y frase de contraseña</target>
y Contraseña</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve">
@@ -1149,6 +1194,10 @@ y frase de contraseña</target>
<target>Eliminar base de datos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Eliminar archivos y multimedia?</target>
@@ -1349,6 +1398,10 @@ y frase de contraseña</target>
<target>Degradar y abrir Chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>¡Nombre mostrado duplicado!</target>
@@ -1389,6 +1442,10 @@ y frase de contraseña</target>
<target>¿Activar notificación instantánea?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Activar notificaciones</target>
@@ -1426,6 +1483,7 @@ y frase de contraseña</target>
</trans-unit>
<trans-unit id="Encrypted message: database migration error" xml:space="preserve">
<source>Encrypted message: database migration error</source>
<target>Mensaje cifrado: error de migración de base de datos</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
@@ -1443,6 +1501,10 @@ y frase de contraseña</target>
<target>Mensaje cifrado: error inesperado</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Introduce la contraseña correcta.</target>
@@ -1583,6 +1645,10 @@ y frase de contraseña</target>
<target>Error uniéndose al grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Error recibiendo archivo</target>
@@ -1593,21 +1659,25 @@ y frase de contraseña</target>
<target>Error eliminando miembro</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Error guardando servidores %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Error guardando servidores ICE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Error guardando servidores SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Error guardando perfil de grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Error guardando contraseña en Keychain</target>
@@ -1685,6 +1755,7 @@ y frase de contraseña</target>
</trans-unit>
<trans-unit id="Experimental" xml:space="preserve">
<source>Experimental</source>
<target>Experimental</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -1939,7 +2010,7 @@ y frase de contraseña</target>
</trans-unit>
<trans-unit id="How to use it" xml:space="preserve">
<source>How to use it</source>
<target>Guia de uso</target>
<target>Guía de uso</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How to use your servers" xml:space="preserve">
@@ -1982,6 +2053,10 @@ y frase de contraseña</target>
<target>La imagen se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Inmune a spam y abuso</target>
@@ -2052,6 +2127,10 @@ y frase de contraseña</target>
<target>Versión de base de datos incompatible</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>¡Código de seguridad incorrecto!</target>
@@ -2174,6 +2253,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Únete al grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Error en Keychain</target>
@@ -2234,6 +2317,14 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Sólo datos del perfil local</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Establecer una conexión privada</target>
@@ -2244,9 +2335,9 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>¡Hacer un perfil privado!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas (%@).</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Asegúrate de que las direcciones del servidor %@ tienen el formato correcto, están separadas por líneas y no duplicadas (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2324,6 +2415,11 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Mensajes</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Mensajes</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Migrando la base de datos...</target>
@@ -2346,6 +2442,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
</trans-unit>
<trans-unit id="Migrations: %@" xml:space="preserve">
<source>Migrations: %@</source>
<target>Migraciones: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
@@ -2385,7 +2482,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
</trans-unit>
<trans-unit id="Network &amp; servers" xml:space="preserve">
<source>Network &amp; servers</source>
<target>Redes y servidores</target>
<target>Redes y Servidores</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Network settings" xml:space="preserve">
@@ -2398,6 +2495,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Estado de la red</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>Nueva solicitud de contacto</target>
@@ -2438,6 +2539,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>No</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>Ningún contacto seleccionado</target>
@@ -2487,6 +2592,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
- desactivar el rol a miembros (a rol "observador")</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Apagado (Local)</target>
@@ -2612,6 +2721,26 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Intervalo PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Contraseña para hacerlo visible</target>
@@ -2682,6 +2811,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Reinicia la aplicación y migra la base de datos para activar las notificaciones automáticas.</target>
@@ -2719,7 +2852,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
</trans-unit>
<trans-unit id="Privacy &amp; security" xml:space="preserve">
<source>Privacy &amp; security</source>
<target>Privacidad y seguridad</target>
<target>Privacidad y Seguridad</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Privacy redefined" xml:space="preserve">
@@ -3082,10 +3215,6 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Enviar mensaje directo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Enviar previsualizaciones de enlaces</target>
@@ -3116,6 +3245,11 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Envíalos desde la galería o desde teclados personalizados.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Enviar archivos vía XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>El remitente ha cancelado la transferencia de archivos.</target>
@@ -3146,6 +3280,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>El servidor requiere autorización para crear colas, comprueba la contraseña</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>¡Error en prueba del servidor!</target>
@@ -3246,6 +3384,14 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Bloqueo SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>Bloqueo SimpleX activado</target>
@@ -3331,6 +3477,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>¿Detener Chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Soporte SimpleX Chat</target>
@@ -3341,6 +3491,10 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.</targ
<target>Sistema</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>Tiempo de espera de la conexión TCP agotado</target>
@@ -3684,6 +3838,10 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Desbloquear</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3736,6 +3894,10 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Actualizar y abrir Chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Usar hosts .onion</target>
@@ -3801,6 +3963,14 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Videollamada</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>Ver código de seguridad</target>
@@ -3841,6 +4011,10 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Esperando imagen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Atención: ¡puedes perder algunos datos!</target>
@@ -3891,6 +4065,11 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>¡Contraseña incorrecta!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>Servidores XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Tú</target>
@@ -3968,6 +4147,10 @@ SimpleX Lock debe estar activado.</target>
<target>Puede iniciar Chat a través de la Configuración / base de datos de la aplicación o reiniciando la aplicación</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>Puedes usar sintaxis markdown para dar formato a los mensajes:</target>
@@ -4078,6 +4261,11 @@ SimpleX Lock debe estar activado.</target>
<target>Estás utilizando un perfil incógnito para este grupo. Para evitar compartir tu perfil principal, invitar contactos no está permitido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>Tus servidores %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Tus servidores ICE</target>
@@ -4093,6 +4281,11 @@ SimpleX Lock debe estar activado.</target>
<target>Tu dirección de contacto SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>Tus servidores XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Tus llamadas</target>
@@ -4224,7 +4417,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>[Comienza en GitHub] (https://github.com/simplex-chat/simplex-chat)</target>
<target>[Dar 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">
@@ -4404,6 +4597,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
<source>database version is newer than the app, but no down migration for: %@</source>
<target>la versión de la base de datos es más reciente que la aplicación, pero no hay migración hacía versión anterior para: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="default (%@)" xml:space="preserve">
@@ -4423,6 +4617,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve">
<source>different migration in the app/database: %@ / %@</source>
<target>migración diferente en la aplicación/base de datos: %@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="direct" xml:space="preserve">
@@ -77,6 +77,11 @@
<target>%@ est vérifié·e</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>Serveurs %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ veut se connecter !</target>
@@ -137,11 +142,19 @@
<target>%lld membres</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld seconde·s</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldj</target>
@@ -535,6 +548,10 @@
<target>Appels audio et vidéo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Échec de l'authentification</target>
@@ -640,16 +657,28 @@
<target>Changer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>Changer la phrase secrète de la base de données ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>Changer le rôle du membre?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Changer d'adresse de réception</target>
@@ -755,6 +784,10 @@
<target>Couleurs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Comparez les codes de sécurité avec vos contacts.</target>
@@ -770,6 +803,10 @@
<target>Confirmer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Confirmer la mise à niveau de la base de données</target>
@@ -930,6 +967,10 @@
<target>Créer une adresse</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Créer un lien de groupe</target>
@@ -965,6 +1006,10 @@
<target>Créé le %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Phrase secrète actuelle…</target>
@@ -1148,6 +1193,10 @@
<target>Supprimer la base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Supprimer les fichiers et médias ?</target>
@@ -1348,6 +1397,10 @@
<target>Rétrograder et ouvrir le chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nom d'affichage en double !</target>
@@ -1388,6 +1441,10 @@
<target>Activer les notifications instantanées?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Activer les notifications</target>
@@ -1425,6 +1482,7 @@
</trans-unit>
<trans-unit id="Encrypted message: database migration error" xml:space="preserve">
<source>Encrypted message: database migration error</source>
<target>Message chiffré : erreur de migration de la base de données</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
@@ -1442,6 +1500,10 @@
<target>Message chiffrée: erreur inattendue</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Entrez la phrase secrète correcte.</target>
@@ -1582,6 +1644,10 @@
<target>Erreur lors de la liaison avec le groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Erreur lors de la réception du fichier</target>
@@ -1592,21 +1658,25 @@
<target>Erreur lors de la suppression d'un membre</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Erreur lors de la sauvegarde des serveurs %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Erreur lors de la sauvegarde des serveurs ICE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Erreur lors de la sauvegarde des serveurs SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Erreur lors de la sauvegarde du profil de groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Erreur lors de l'enregistrement de la phrase de passe dans la keychain</target>
@@ -1684,6 +1754,7 @@
</trans-unit>
<trans-unit id="Experimental" xml:space="preserve">
<source>Experimental</source>
<target>Expérimental</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -1713,7 +1784,6 @@
</trans-unit>
<trans-unit id="File transfer will be cancelled. If it's in progress it will be stoppped." xml:space="preserve">
<source>File transfer will be cancelled. If it's in progress it will be stoppped.</source>
<target>Le transfert de fichiers sera annulé. S'il est en cours, il sera interrompu.</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">
@@ -1981,6 +2051,10 @@
<target>L'image sera reçue quand votre contact sera en ligne, merci d'attendre ou de revenir plus tard!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Protégé du spam et des abus</target>
@@ -2051,6 +2125,10 @@
<target>Version de la base de données incompatible</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>Code de sécurité incorrect !</target>
@@ -2173,6 +2251,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Entrain de rejoindre le groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Erreur de la keychain</target>
@@ -2233,6 +2315,14 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Données de profil local uniquement</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Établir une connexion privée</target>
@@ -2243,9 +2333,9 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Rendre un profil privé !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Assurez-vous que les adresses des serveurs SMP sont au bon format et ne sont pas dupliquées, un par ligne.</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Assurez-vous que les adresses des serveurs %@ sont au bon format et ne sont pas dupliquées, un par ligne (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2323,6 +2413,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Messages</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Messages</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Migration de l'archive de la base de données...</target>
@@ -2345,6 +2440,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
</trans-unit>
<trans-unit id="Migrations: %@" xml:space="preserve">
<source>Migrations: %@</source>
<target>Migrations : %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
@@ -2397,6 +2493,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>État du réseau</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>Nouvelle demande de contact</target>
@@ -2437,6 +2537,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Non</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>Aucun contact sélectionné</target>
@@ -2486,6 +2590,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
- désactiver des membres (rôle "observateur")</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Off (Local)</target>
@@ -2611,6 +2719,26 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Intervalle de PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Mot de passe à entrer</target>
@@ -2681,6 +2809,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Veuillez entrer le mot de passe précédent après avoir restauré la sauvegarde de la base de données. Cette action ne peut pas être annulée.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Veuillez redémarrer l'app et migrer la base de données pour activer les notifications push.</target>
@@ -3081,10 +3213,6 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Envoi de message direct</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Envoi d'aperçus de liens</target>
@@ -3115,6 +3243,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Envoyez-les depuis la phototèque ou des claviers personnalisés.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Envoi de fichiers via XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>L'expéditeur a annulé le transfert de fichiers.</target>
@@ -3145,6 +3278,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Le serveur requiert une autorisation pour créer des files d'attente, vérifiez le mot de passe</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>Échec du test du serveur !</target>
@@ -3245,6 +3382,14 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>SimpleX Lock</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>SimpleX Lock activé</target>
@@ -3330,6 +3475,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Arrêter le chat ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Supporter SimpleX Chat</target>
@@ -3340,6 +3489,10 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Système</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>Délai de connexion TCP</target>
@@ -3682,6 +3835,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Déverrouiller</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3734,6 +3891,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Mettre à niveau et ouvrir le chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Utiliser les hôtes .onions</target>
@@ -3799,6 +3960,14 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Appel vidéo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>Afficher le code de sécurité</target>
@@ -3839,6 +4008,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>En attente de l'image</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Attention : vous risquez de perdre des données !</target>
@@ -3889,6 +4062,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Mauvaise phrase secrète !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>Serveurs XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Vous</target>
@@ -3966,6 +4144,10 @@ SimpleX Lock doit être activé.</target>
<target>Vous pouvez lancer le chat via Paramètres / Base de données ou en redémarrant l'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>Vous pouvez utiliser le format markdown pour mettre en forme les messages :</target>
@@ -4076,6 +4258,11 @@ SimpleX Lock doit être activé.</target>
<target>Vous utilisez un profil incognito pour ce groupe - pour éviter de partager votre profil principal ; inviter des contacts n'est pas possible</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>Vos serveurs %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Vos serveurs ICE</target>
@@ -4091,6 +4278,11 @@ SimpleX Lock doit être activé.</target>
<target>Votre adresse de contact SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>Vos serveurs XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Vos appels</target>
@@ -4402,6 +4594,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
<source>database version is newer than the app, but no down migration for: %@</source>
<target>la base de données a une version plus récente que celle de l'application, mais il n'y a pas de rétrogradation pour : %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="default (%@)" xml:space="preserve">
@@ -4421,6 +4614,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve">
<source>different migration in the app/database: %@ / %@</source>
<target>migration différente dans l'app/la base de données : %@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="direct" xml:space="preserve">
@@ -77,6 +77,11 @@
<target>%@ è verificato/a</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>Server %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ si vuole connettere!</target>
@@ -137,11 +142,19 @@
<target>%lld membri</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld secondo/i</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldg</target>
@@ -535,6 +548,10 @@
<target>Chiamate audio e video</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Autenticazione fallita</target>
@@ -640,16 +657,28 @@
<target>Cambia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>Cambiare password del database?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>Cambiare ruolo del membro?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Cambia indirizzo di ricezione</target>
@@ -755,6 +784,10 @@
<target>Colori</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Confronta i codici di sicurezza con i tuoi contatti.</target>
@@ -770,6 +803,10 @@
<target>Conferma</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Conferma aggiornamenti database</target>
@@ -930,6 +967,10 @@
<target>Crea indirizzo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Crea link del gruppo</target>
@@ -965,6 +1006,10 @@
<target>Creato il %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Password attuale…</target>
@@ -1148,6 +1193,10 @@
<target>Elimina database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Eliminare i file e i multimediali?</target>
@@ -1348,6 +1397,10 @@
<target>Esegui downgrade e apri chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nome da mostrare doppio!</target>
@@ -1388,6 +1441,10 @@
<target>Attivare le notifiche istantanee?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Attiva le notifiche</target>
@@ -1425,6 +1482,7 @@
</trans-unit>
<trans-unit id="Encrypted message: database migration error" xml:space="preserve">
<source>Encrypted message: database migration error</source>
<target>Messaggio crittografato: errore di migrazione del database</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
@@ -1442,6 +1500,10 @@
<target>Messaggio crittografato: errore imprevisto</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Inserisci la password giusta.</target>
@@ -1582,6 +1644,10 @@
<target>Errore di ingresso nel gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Errore nella ricezione del file</target>
@@ -1592,21 +1658,25 @@
<target>Errore nella rimozione del membro</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Errore nel salvataggio dei server %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Errore nel salvataggio dei server ICE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Errore nel salvataggio dei server SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Errore nel salvataggio del profilo del gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Errore nel salvataggio della password nel portachiavi</target>
@@ -1684,6 +1754,7 @@
</trans-unit>
<trans-unit id="Experimental" xml:space="preserve">
<source>Experimental</source>
<target>Sperimentale</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -1981,6 +2052,10 @@
<target>L'immagine verrà ricevuta quando il tuo contatto sarà in linea, aspetta o controlla più tardi!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Immune a spam e abusi</target>
@@ -2051,6 +2126,10 @@
<target>Versione del database incompatibile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>Codice di sicurezza sbagliato!</target>
@@ -2173,6 +2252,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Ingresso nel gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Errore del portachiavi</target>
@@ -2233,6 +2316,14 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Solo dati del profilo locale</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Crea una connessione privata</target>
@@ -2243,9 +2334,9 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Rendi privato il profilo!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Assicurati che gli indirizzi dei server SMP siano nel formato corretto, uno per riga e non doppi (%@).</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Assicurati che gli indirizzi dei server %@ siano nel formato corretto, uno per riga e non doppi (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2323,6 +2414,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Messaggi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Messaggi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Migrazione archivio del database...</target>
@@ -2345,6 +2441,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
</trans-unit>
<trans-unit id="Migrations: %@" xml:space="preserve">
<source>Migrations: %@</source>
<target>Migrazioni: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
@@ -2397,6 +2494,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Stato della rete</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>Nuova richiesta di contatto</target>
@@ -2437,6 +2538,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>No</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>Nessun contatto selezionato</target>
@@ -2486,6 +2591,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
- disattivare i membri (ruolo "osservatore")</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Off (Locale)</target>
@@ -2611,6 +2720,26 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Intervallo PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Password per mostrare</target>
@@ -2681,6 +2810,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Inserisci la password precedente dopo aver ripristinato il backup del database. Questa azione non può essere annullata.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Riavvia l'app ed esegui la migrazione del database per attivare le notifiche push.</target>
@@ -3081,10 +3214,6 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Invia messaggio diretto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Invia anteprime dei link</target>
@@ -3115,6 +3244,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Inviali dalla galleria o dalle tastiere personalizzate.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Invia file tramite XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Il mittente ha annullato il trasferimento del file.</target>
@@ -3145,6 +3279,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Il server richiede l'autorizzazione di creare code, controlla la password</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>Test del server fallito!</target>
@@ -3245,6 +3383,14 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>SimpleX Lock</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>SimpleX Lock attivato</target>
@@ -3330,6 +3476,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Fermare la chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Supporta SimpleX Chat</target>
@@ -3340,6 +3490,10 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Sistema</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>Scadenza connessione TCP</target>
@@ -3682,6 +3836,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Sblocca</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3734,6 +3892,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Aggiorna e apri chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Usa gli host .onion</target>
@@ -3799,6 +3961,14 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Videochiamata</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>Vedi codice di sicurezza</target>
@@ -3839,6 +4009,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>In attesa dell'immagine</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Attenzione: potresti perdere alcuni dati!</target>
@@ -3889,6 +4063,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Password sbagliata!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>Server XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Tu</target>
@@ -3966,6 +4145,10 @@ SimpleX Lock deve essere attivato.</target>
<target>Puoi avviare la chat via Impostazioni / Database o riavviando l'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>Puoi usare il markdown per formattare i messaggi:</target>
@@ -4076,6 +4259,11 @@ SimpleX Lock deve essere attivato.</target>
<target>Stai usando un profilo in incognito per questo gruppo: per impedire la condivisione del tuo profilo principale non è consentito invitare contatti</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>I tuoi server %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>I tuoi server ICE</target>
@@ -4091,6 +4279,11 @@ SimpleX Lock deve essere attivato.</target>
<target>Il tuo indirizzo di contatto SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>I tuoi server XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Le tue chiamate</target>
@@ -4402,6 +4595,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
<source>database version is newer than the app, but no down migration for: %@</source>
<target>la versione del database è più recente di quella dell'app, ma nessuna migrazione downgrade per: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="default (%@)" xml:space="preserve">
@@ -4421,6 +4615,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve">
<source>different migration in the app/database: %@ / %@</source>
<target>migrazione diversa nell'app/nel database: %@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="direct" xml:space="preserve">
@@ -520,8 +520,9 @@
<source>Change receiving address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change receiving address?" xml:space="preserve">
<trans-unit id="Change receiving address?" xml:space="preserve" approved="no">
<source>Change receiving address?</source>
<target state="translated">修改接收地址?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change role" xml:space="preserve">
@@ -77,6 +77,11 @@
<target>%@ is geverifieerd</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>%@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ wil verbinding maken!</target>
@@ -137,11 +142,19 @@
<target>%lld leden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld seconde(n)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldd</target>
@@ -535,6 +548,10 @@
<target>Audio en video oproepen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Verificatie mislukt</target>
@@ -640,16 +657,28 @@
<target>Wijziging</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>Wachtwoord database wijzigen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>Rol van gebruiker wijzigen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Ontvangst adres wijzigen</target>
@@ -755,6 +784,10 @@
<target>Kleuren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Vergelijk beveiligingscodes met je contacten.</target>
@@ -770,6 +803,10 @@
<target>Bevestigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Bevestig database upgrades</target>
@@ -930,6 +967,10 @@
<target>Adres aanmaken</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Groep link maken</target>
@@ -965,6 +1006,10 @@
<target>Gemaakt op %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Huidige wachtwoord…</target>
@@ -1148,6 +1193,10 @@
<target>Database verwijderen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Bestanden en media verwijderen?</target>
@@ -1348,6 +1397,10 @@
<target>Downgraden en chat openen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Dubbele weergavenaam!</target>
@@ -1388,6 +1441,10 @@
<target>Onmiddellijke meldingen inschakelen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Meldingen aanzetten</target>
@@ -1425,6 +1482,7 @@
</trans-unit>
<trans-unit id="Encrypted message: database migration error" xml:space="preserve">
<source>Encrypted message: database migration error</source>
<target>Versleuteld bericht: fout bij databasemigratie</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
@@ -1442,6 +1500,10 @@
<target>Versleuteld bericht: onverwachte fout</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Voer het juiste wachtwoord in.</target>
@@ -1582,6 +1644,10 @@
<target>Fout bij lid worden van groep</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Fout bij ontvangen van bestand</target>
@@ -1592,21 +1658,25 @@
<target>Fout bij verwijderen van gebruiker</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Fout bij opslaan van %@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Fout bij opslaan van ICE servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Fout bij opslaan van SMP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Fout bij opslaan van groep profiel</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Fout bij opslaan van wachtwoord in de keychain</target>
@@ -1684,6 +1754,7 @@
</trans-unit>
<trans-unit id="Experimental" xml:space="preserve">
<source>Experimental</source>
<target>Experimenteel</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -1981,6 +2052,10 @@
<target>De afbeelding wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Immuun voor spam en misbruik</target>
@@ -2051,6 +2126,10 @@
<target>Incompatibele database versie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>Onjuiste beveiligingscode!</target>
@@ -2173,6 +2252,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Deel nemen aan groep</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Keychain fout</target>
@@ -2233,6 +2316,14 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Alleen lokale profielgegevens</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Maak een privéverbinding</target>
@@ -2243,9 +2334,9 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Profiel privé maken!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn (%@).</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Zorg ervoor dat %@ server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2323,6 +2414,11 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Berichten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Berichten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Database archief migreren...</target>
@@ -2345,6 +2441,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
</trans-unit>
<trans-unit id="Migrations: %@" xml:space="preserve">
<source>Migrations: %@</source>
<target>Migraties: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
@@ -2397,6 +2494,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Netwerk status</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>Nieuw contactverzoek</target>
@@ -2437,6 +2538,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Nee</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>Geen contacten geselecteerd</target>
@@ -2486,6 +2591,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
- schakel leden uit ("waarnemer" rol)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Uit (lokaal)</target>
@@ -2611,6 +2720,26 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>PING interval</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Wachtwoord om weer te geven</target>
@@ -2681,6 +2810,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Voer het vorige wachtwoord in na het herstellen van de database back-up. Deze actie kan niet ongedaan gemaakt worden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Start de app opnieuw en migreer de database om push meldingen in te schakelen.</target>
@@ -3081,10 +3214,6 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Direct bericht sturen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Link voorbeelden verzenden</target>
@@ -3115,6 +3244,11 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Stuur ze vanuit de galerij of aangepaste toetsenborden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Bestanden verzenden via XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Afzender heeft bestandsoverdracht geannuleerd.</target>
@@ -3145,6 +3279,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Server vereist autorisatie om wachtrijen te maken, controleer wachtwoord</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>Servertest mislukt!</target>
@@ -3245,6 +3383,14 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>SimpleX Vergrendelen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>SimpleX Vergrendelen ingeschakeld</target>
@@ -3330,6 +3476,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Stop chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Ondersteuning van SimpleX Chat</target>
@@ -3340,6 +3490,10 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.</targe
<target>Systeem</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>Timeout van TCP-verbinding</target>
@@ -3682,6 +3836,10 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Ontgrendelen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3734,6 +3892,10 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
<target>Upgrade en open chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Gebruik .onion-hosts</target>
@@ -3799,6 +3961,14 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
<target>video oproep</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>Beveiligingscode bekijken</target>
@@ -3839,6 +4009,10 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
<target>Wachten op afbeelding</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Waarschuwing: u kunt sommige gegevens verliezen!</target>
@@ -3889,6 +4063,11 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
<target>Verkeerd wachtwoord!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>XFTP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Jij</target>
@@ -3966,6 +4145,10 @@ SimpleX Lock moet ingeschakeld zijn.</target>
<target>U kunt de chat starten via app Instellingen / Database of door de app opnieuw op te starten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>U kunt markdown gebruiken voor opmaak in berichten:</target>
@@ -4076,6 +4259,11 @@ SimpleX Lock moet ingeschakeld zijn.</target>
<target>Je gebruikt een incognito profiel voor deze groep. Om te voorkomen dat je je hoofdprofiel deelt, is het niet toegestaan om contacten uit te nodigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>Uw %@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Uw ICE servers</target>
@@ -4091,6 +4279,11 @@ SimpleX Lock moet ingeschakeld zijn.</target>
<target>Uw SimpleX contact adres</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>Uw XFTP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Uw oproepen</target>
@@ -4402,6 +4595,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
</trans-unit>
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
<source>database version is newer than the app, but no down migration for: %@</source>
<target>databaseversie is nieuwer dan de app, maar geen downmigratie voor: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="default (%@)" xml:space="preserve">
@@ -4421,6 +4615,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
</trans-unit>
<trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve">
<source>different migration in the app/database: %@ / %@</source>
<target>verschillende migratie in de app/database: %@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="direct" xml:space="preserve">
File diff suppressed because it is too large Load Diff
@@ -77,6 +77,11 @@
<target>%@ подтверждён</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>%@ серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ хочет соединиться!</target>
@@ -137,11 +142,19 @@
<target>Членов группы: %lld</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld секунд</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldд</target>
@@ -535,6 +548,10 @@
<target>Аудио и видео звонки</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>Ошибка аутентификации</target>
@@ -640,16 +657,28 @@
<target>Поменять</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>Поменять пароль базы данных?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>Поменять роль члена группы?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>Поменять адрес получения</target>
@@ -755,6 +784,10 @@
<target>Цвета</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>Сравните код безопасности с Вашими контактами.</target>
@@ -770,6 +803,10 @@
<target>Подтвердить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>Подтвердить обновление базы данных</target>
@@ -930,6 +967,10 @@
<target>Создать адрес</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>Создать ссылку группы</target>
@@ -965,6 +1006,10 @@
<target>Дата создания %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>Текущий пароль…</target>
@@ -1148,6 +1193,10 @@
<target>Удалить данные чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Удалить файлы и медиа?</target>
@@ -1348,6 +1397,10 @@
<target>Откатить версию и открыть чат</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Имя профиля уже используется!</target>
@@ -1388,6 +1441,10 @@
<target>Включить мгновенные уведомления?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>Включить уведомления</target>
@@ -1443,6 +1500,10 @@
<target>Зашифрованное сообщение: неожиданная ошибка</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>Введите правильный пароль.</target>
@@ -1583,6 +1644,10 @@
<target>Ошибка при вступлении в группу</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>Ошибка при получении файла</target>
@@ -1593,21 +1658,25 @@
<target>Ошибка при удалении члена группы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>Ошибка при сохранении %@ серверов</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>Ошибка при сохранении ICE серверов</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>Ошибка при сохранении SMP серверов</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>Ошибка при сохранении профиля группы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>Ошибка сохранения пароля в Keychain</target>
@@ -1983,6 +2052,10 @@
<target>Изображение будет принято, когда Ваш контакт будет в сети, подождите или проверьте позже!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>Защищен от спама</target>
@@ -2053,6 +2126,10 @@
<target>Несовместимая версия базы данных</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>Неправильный код безопасности!</target>
@@ -2175,6 +2252,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Вступление в группу</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>Ошибка Keychain</target>
@@ -2235,6 +2316,14 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Только локальные данные профиля</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>Добавьте контакт</target>
@@ -2245,9 +2334,9 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Сделайте профиль скрытым!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Пожалуйста, проверьте, что адреса SMP серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется (%@).</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>Пожалуйста, проверьте, что адреса %@ серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2325,6 +2414,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Сообщения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>Сообщения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>Данные чата перемещаются...</target>
@@ -2400,6 +2494,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Состояние сети</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>Новый запрос на соединение</target>
@@ -2440,6 +2538,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Нет</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>Контакты не выбраны</target>
@@ -2489,6 +2591,10 @@ We will be adding server redundancy to prevent lost messages.</source>
- приостанавливать членов (роль "наблюдатель")</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>Выключить (Локальные)</target>
@@ -2614,6 +2720,26 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Интервал PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>Пароль чтобы раскрыть</target>
@@ -2684,6 +2810,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Введите предыдущий пароль после восстановления резервной копии. Это действие нельзя отменить.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>Пожалуйста, перезапустите приложение и переместите данные чата, чтобы включить доставку уведомлений.</target>
@@ -3084,11 +3214,6 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Отправить сообщение</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Отправлять видео и файлы через XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>Отправлять картинки ссылок</target>
@@ -3119,6 +3244,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Отправьте из галереи или из дополнительных клавиатур.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>Отправлять видео и файлы через XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Отправитель отменил передачу файла.</target>
@@ -3149,6 +3279,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Сервер требует авторизации для создания очередей, проверьте пароль</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>Ошибка теста сервера!</target>
@@ -3249,6 +3383,14 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Блокировка SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>Блокировка SimpleX включена</target>
@@ -3334,6 +3476,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Остановить чат?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>Поддержать SimpleX Chat</target>
@@ -3344,6 +3490,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Системная</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>Таймаут TCP соединения</target>
@@ -3686,6 +3836,10 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>Разблокировать</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3738,6 +3892,10 @@ To connect, please ask your contact to create another connection link and check
<target>Обновить и открыть чат</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Использовать .onion хосты</target>
@@ -3803,6 +3961,14 @@ To connect, please ask your contact to create another connection link and check
<target>Видеозвонок</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>Показать код безопасности</target>
@@ -3843,6 +4009,10 @@ To connect, please ask your contact to create another connection link and check
<target>Ожидается прием изображения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Предупреждение: Вы можете потерять какие то данные!</target>
@@ -3893,6 +4063,11 @@ To connect, please ask your contact to create another connection link and check
<target>Неправильный пароль!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>XFTP серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Вы</target>
@@ -3970,6 +4145,10 @@ SimpleX Lock must be enabled.</source>
<target>Вы можете запустить чат через Настройки приложения или перезапустив приложение.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>Вы можете форматировать сообщения:</target>
@@ -4080,6 +4259,11 @@ SimpleX Lock must be enabled.</source>
<target>Вы используете инкогнито профиль для этой группы - чтобы предотвратить раскрытие Вашего основного профиля, приглашать контакты не разрешено</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>Ваши %@ серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Ваши ICE серверы</target>
@@ -4095,6 +4279,11 @@ SimpleX Lock must be enabled.</source>
<target>Ваш SimpleX адрес</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>Ваши XFTP серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Ваши звонки</target>
@@ -77,6 +77,11 @@
<target>%@ 已认证</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<source>%@ servers</source>
<target>%@ 服务器</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ 要连接!</target>
@@ -137,11 +142,19 @@
<target>%lld 成员</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<source>%lld second(s)</source>
<target>%lld 秒</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<source>%lld seconds</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<source>%lldd</source>
<target>%lldd</target>
@@ -535,6 +548,10 @@
<target>音视频通话</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication cancelled" xml:space="preserve">
<source>Authentication cancelled</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Authentication failed" xml:space="preserve">
<source>Authentication failed</source>
<target>认证失败</target>
@@ -640,16 +657,28 @@
<target>更改</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change Passcode" xml:space="preserve">
<source>Change Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve">
<source>Change database passphrase?</source>
<target>更改数据库密码?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve">
<source>Change lock mode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>更改成员角色?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<source>Change receiving address</source>
<target>更改接收地址</target>
@@ -755,6 +784,10 @@
<target>颜色</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Compare file" xml:space="preserve">
<source>Compare file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Compare security codes with your contacts." xml:space="preserve">
<source>Compare security codes with your contacts.</source>
<target>与您的联系人比较安全码。</target>
@@ -770,6 +803,10 @@
<target>确认</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
<source>Confirm database upgrades</source>
<target>确认数据库升级</target>
@@ -930,6 +967,10 @@
<target>创建地址</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
<source>Create file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source>
<target>创建群组链接</target>
@@ -965,6 +1006,10 @@
<target>创建于 %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
<source>Current passphrase…</source>
<target>现有密码……</target>
@@ -1148,6 +1193,10 @@
<target>删除数据库</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>删除文件和媒体文件吗?</target>
@@ -1348,6 +1397,10 @@
<target>降级并打开聊天</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>重复的显示名!</target>
@@ -1388,6 +1441,10 @@
<target>启用即时通知?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable lock" xml:space="preserve">
<source>Enable lock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<source>Enable notifications</source>
<target>启用通知</target>
@@ -1410,12 +1467,12 @@
</trans-unit>
<trans-unit id="Encrypted database" xml:space="preserve">
<source>Encrypted database</source>
<target>加密数据库</target>
<target>加密数据库</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Encrypted message or another event" xml:space="preserve">
<source>Encrypted message or another event</source>
<target>加密消息或其他项目</target>
<target>加密消息或其他事件</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
@@ -1425,11 +1482,12 @@
</trans-unit>
<trans-unit id="Encrypted message: database migration error" xml:space="preserve">
<source>Encrypted message: database migration error</source>
<target>加密信息:数据库迁移错误</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
<source>Encrypted message: keychain error</source>
<target>加密息:钥匙串错误</target>
<target>加密息:钥匙串错误</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: no passphrase" xml:space="preserve">
@@ -1442,6 +1500,10 @@
<target>加密消息:意外错误</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
<source>Enter correct passphrase.</source>
<target>输入正确密码。</target>
@@ -1582,6 +1644,10 @@
<target>加入群组错误</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
<source>Error loading %@ servers</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
<source>Error receiving file</source>
<target>接收文件错误</target>
@@ -1592,21 +1658,25 @@
<target>删除成员错误</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving %@ servers" xml:space="preserve">
<source>Error saving %@ servers</source>
<target>保存 %@ 服务器错误</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving ICE servers" xml:space="preserve">
<source>Error saving ICE servers</source>
<target>保存 ICE 服务器错误</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving SMP servers" xml:space="preserve">
<source>Error saving SMP servers</source>
<target>保存 SMP 服务器错误</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving group profile" xml:space="preserve">
<source>Error saving group profile</source>
<target>保存群组资料错误</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
<source>Error saving passphrase to keychain</source>
<target>保存密码到钥匙串错误</target>
@@ -1659,6 +1729,7 @@
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>错误: </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: %@" xml:space="preserve">
@@ -1683,6 +1754,7 @@
</trans-unit>
<trans-unit id="Experimental" xml:space="preserve">
<source>Experimental</source>
<target>实验性</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -1980,6 +2052,10 @@
<target>图片将在您的联系人在线时收到,请稍等或稍后查看!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immediately" xml:space="preserve">
<source>Immediately</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Immune to spam and abuse" xml:space="preserve">
<source>Immune to spam and abuse</source>
<target>不受垃圾和骚扰消息影响</target>
@@ -2050,6 +2126,10 @@
<target>数据库版本不兼容</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
<source>Incorrect security code!</source>
<target>安全码不正确!</target>
@@ -2172,6 +2252,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>加入群组</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
<source>KeyChain error</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keychain error" xml:space="preserve">
<source>Keychain error</source>
<target>钥匙串错误</target>
@@ -2232,6 +2316,14 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>仅本地配置文件数据</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock after" xml:space="preserve">
<source>Lock after</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Lock mode" xml:space="preserve">
<source>Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
<source>Make a private connection</source>
<target>建立私密连接</target>
@@ -2242,9 +2334,9 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>将个人资料设为私密!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>请确保 SMP服 务器地址格式正确,每行一个地址并且不重复 (%@)。</target>
<trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve">
<source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source>
<target>请确保 %@服 务器地址格式正确,每行一个地址并且不重复 (%@)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
@@ -2322,6 +2414,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>消息</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages &amp; files" xml:space="preserve">
<source>Messages &amp; files</source>
<target>消息</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive..." xml:space="preserve">
<source>Migrating database archive...</source>
<target>迁移数据库档案中……</target>
@@ -2344,6 +2441,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Migrations: %@" xml:space="preserve">
<source>Migrations: %@</source>
<target>迁移:%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Moderate" xml:space="preserve">
@@ -2396,6 +2494,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>网络状态</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
<source>New contact request</source>
<target>新联系人请求</target>
@@ -2436,6 +2538,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>否</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No app password" xml:space="preserve">
<source>No app password</source>
<note>Authentication unavailable</note>
</trans-unit>
<trans-unit id="No contacts selected" xml:space="preserve">
<source>No contacts selected</source>
<target>未选择联系人</target>
@@ -2485,6 +2591,10 @@ We will be adding server redundancy to prevent lost messages.</source>
- 禁用成员(“观察员”角色)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
<source>Off</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off (Local)" xml:space="preserve">
<source>Off (Local)</source>
<target>关闭(本地)</target>
@@ -2610,6 +2720,26 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>PING 间隔</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
<source>Password to show</source>
<target>显示密码</target>
@@ -2680,6 +2810,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>恢复数据库备份后请输入之前的密码。 此操作无法撤消。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve">
<source>Please restart the app and migrate the database to enable push notifications.</source>
<target>请重新启动应用程序并迁移数据库以启用推送通知。</target>
@@ -3080,10 +3214,6 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>发送私信</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send files via XFTP" xml:space="preserve">
<source>Send files via XFTP</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send link previews" xml:space="preserve">
<source>Send link previews</source>
<target>发送链接预览</target>
@@ -3114,6 +3244,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>发送它们来自图库或自定义键盘。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send videos and files via XFTP" xml:space="preserve">
<source>Send videos and files via XFTP</source>
<target>通过 XFTP 发送文件</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>发送人已取消文件传输。</target>
@@ -3144,6 +3279,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>服务器需要授权才能创建队列,检查密码</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server requires authorization to upload, check password" xml:space="preserve">
<source>Server requires authorization to upload, check password</source>
<note>server test error</note>
</trans-unit>
<trans-unit id="Server test failed!" xml:space="preserve">
<source>Server test failed!</source>
<target>服务器测试失败!</target>
@@ -3244,6 +3383,14 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>SimpleX 锁定</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock mode" xml:space="preserve">
<source>SimpleX Lock mode</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock not enabled!" xml:space="preserve">
<source>SimpleX Lock not enabled!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Lock turned on" xml:space="preserve">
<source>SimpleX Lock turned on</source>
<target>已开启 SimpleX 锁定</target>
@@ -3329,6 +3476,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>停止聊天程序?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
<source>Support SimpleX Chat</source>
<target>支持 SimpleX Chat</target>
@@ -3339,6 +3490,10 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>系统</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="System authentication" xml:space="preserve">
<source>System authentication</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="TCP connection timeout" xml:space="preserve">
<source>TCP connection timeout</source>
<target>TCP 连接超时</target>
@@ -3681,6 +3836,10 @@ To connect, please ask your contact to create another connection link and check
<trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source>
<target>解锁</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock app" xml:space="preserve">
<source>Unlock app</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
@@ -3733,6 +3892,10 @@ To connect, please ask your contact to create another connection link and check
<target>升级并打开聊天</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<note>server test step</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>使用 .onion 主机</target>
@@ -3798,6 +3961,14 @@ To connect, please ask your contact to create another connection link and check
<target>视频通话</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
<source>Video will be received when your contact completes uploading it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
<source>Video will be received when your contact is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="View security code" xml:space="preserve">
<source>View security code</source>
<target>查看安全码</target>
@@ -3838,6 +4009,10 @@ To connect, please ask your contact to create another connection link and check
<target>等待图像中</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for video" xml:space="preserve">
<source>Waiting for video</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>警告:您可能会丢失部分数据!</target>
@@ -3888,6 +4063,11 @@ To connect, please ask your contact to create another connection link and check
<target>密码错误!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="XFTP servers" xml:space="preserve">
<source>XFTP servers</source>
<target>XFTP 服务器</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>您</target>
@@ -3965,6 +4145,10 @@ SimpleX Lock must be enabled.</source>
<target>您可以通过应用程序设置/数据库或重新启动应用程序开始聊天</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
<source>You can turn on SimpleX Lock via Settings.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
<source>You can use markdown to format messages:</source>
<target>您可以使用 markdown 来编排消息格式:</target>
@@ -4075,6 +4259,11 @@ SimpleX Lock must be enabled.</source>
<target>您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
<source>Your %@ servers</source>
<target>您的 %@ 服务器</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>您的 ICE 服务器</target>
@@ -4090,6 +4279,11 @@ SimpleX Lock must be enabled.</source>
<target>您的 SimpleX 联系人地址</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>您的 XFTP 服务器</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>您的通话</target>
@@ -4401,6 +4595,7 @@ SimpleX 服务器无法看到您的资料。</target>
</trans-unit>
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
<source>database version is newer than the app, but no down migration for: %@</source>
<target>数据库版本比应用程序更新,但无法降级迁移:%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="default (%@)" xml:space="preserve">
@@ -4420,6 +4615,7 @@ SimpleX 服务器无法看到您的资料。</target>
</trans-unit>
<trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve">
<source>different migration in the app/database: %@ / %@</source>
<target>应用程序/数据库中的不同迁移:%@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="direct" xml:space="preserve">
File diff suppressed because it is too large Load Diff
+48 -24
View File
@@ -99,11 +99,15 @@
5CB346E52868AA7F001FD2EF /* SuspendChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */; };
5CB346E72868D76D001FD2EF /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E62868D76D001FD2EF /* NotificationsView.swift */; };
5CB346E92869E8BA001FD2EF /* PushEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */; };
5CB6349829DF7CF00066AD6B /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349329DF7CF00066AD6B /* libgmpxx.a */; };
5CB6349929DF7CF00066AD6B /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349429DF7CF00066AD6B /* libffi.a */; };
5CB6349A29DF7CF00066AD6B /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349529DF7CF00066AD6B /* libgmp.a */; };
5CB6349B29DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349629DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD-ghc8.10.7.a */; };
5CB6349C29DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349729DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD.a */; };
5CB634A229E1EE550066AD6B /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349D29E1EE550066AD6B /* libffi.a */; };
5CB634A329E1EE550066AD6B /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349E29E1EE550066AD6B /* libgmp.a */; };
5CB634A429E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB6349F29E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq.a */; };
5CB634A529E1EE550066AD6B /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB634A029E1EE550066AD6B /* libgmpxx.a */; };
5CB634A629E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CB634A129E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq-ghc8.10.7.a */; };
5CB634A829E437960066AD6B /* PasscodeEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634A729E437960066AD6B /* PasscodeEntry.swift */; };
5CB634AD29E46CF70066AD6B /* LocalAuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634AC29E46CF70066AD6B /* LocalAuthView.swift */; };
5CB634AF29E4BB7D0066AD6B /* SetAppPasscodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634AE29E4BB7D0066AD6B /* SetAppPasscodeView.swift */; };
5CB634B129E5EFEA0066AD6B /* PasscodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB634B029E5EFEA0066AD6B /* PasscodeView.swift */; };
5CB924D727A8563F00ACCCDD /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB924D627A8563F00ACCCDD /* SettingsView.swift */; };
5CB924E127A867BA00ACCCDD /* UserProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB924E027A867BA00ACCCDD /* UserProfile.swift */; };
5CB924E427A8683A00ACCCDD /* UserAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB924E327A8683A00ACCCDD /* UserAddress.swift */; };
@@ -355,11 +359,15 @@
5CB346E42868AA7F001FD2EF /* SuspendChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuspendChat.swift; sourceTree = "<group>"; };
5CB346E62868D76D001FD2EF /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = "<group>"; };
5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushEnvironment.swift; sourceTree = "<group>"; };
5CB6349329DF7CF00066AD6B /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5CB6349429DF7CF00066AD6B /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5CB6349529DF7CF00066AD6B /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5CB6349629DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD-ghc8.10.7.a"; sourceTree = "<group>"; };
5CB6349729DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD.a"; sourceTree = "<group>"; };
5CB6349D29E1EE550066AD6B /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5CB6349E29E1EE550066AD6B /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5CB6349F29E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq.a"; sourceTree = "<group>"; };
5CB634A029E1EE550066AD6B /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5CB634A129E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq-ghc8.10.7.a"; sourceTree = "<group>"; };
5CB634A729E437960066AD6B /* PasscodeEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasscodeEntry.swift; sourceTree = "<group>"; };
5CB634AC29E46CF70066AD6B /* LocalAuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalAuthView.swift; sourceTree = "<group>"; };
5CB634AE29E4BB7D0066AD6B /* SetAppPasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetAppPasscodeView.swift; sourceTree = "<group>"; };
5CB634B029E5EFEA0066AD6B /* PasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasscodeView.swift; sourceTree = "<group>"; };
5CB924D627A8563F00ACCCDD /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
5CB924E027A867BA00ACCCDD /* UserProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfile.swift; sourceTree = "<group>"; };
5CB924E327A8683A00ACCCDD /* UserAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddress.swift; sourceTree = "<group>"; };
@@ -471,13 +479,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5CB6349C29DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD.a in Frameworks */,
5CB6349B29DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD-ghc8.10.7.a in Frameworks */,
5CB6349829DF7CF00066AD6B /* libgmpxx.a in Frameworks */,
5CB6349A29DF7CF00066AD6B /* libgmp.a in Frameworks */,
5CB634A529E1EE550066AD6B /* libgmpxx.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
5CB634A229E1EE550066AD6B /* libffi.a in Frameworks */,
5CB634A629E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq-ghc8.10.7.a in Frameworks */,
5CB634A329E1EE550066AD6B /* libgmp.a in Frameworks */,
5CB634A429E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
5CB6349929DF7CF00066AD6B /* libffi.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -509,6 +517,7 @@
5CB9250B27A942F300ACCCDD /* ChatList */,
5CB924DD27A8622200ACCCDD /* NewChat */,
5CFA59C22860B04D00863A68 /* Database */,
5CB634AB29E46CDB0066AD6B /* LocalAuth */,
5CB924DF27A8678B00ACCCDD /* UserSettings */,
5C2E261127A30FEA00F70299 /* TerminalView.swift */,
);
@@ -536,11 +545,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
5CB6349429DF7CF00066AD6B /* libffi.a */,
5CB6349529DF7CF00066AD6B /* libgmp.a */,
5CB6349329DF7CF00066AD6B /* libgmpxx.a */,
5CB6349629DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD-ghc8.10.7.a */,
5CB6349729DF7CF00066AD6B /* libHSsimplex-chat-4.6.1.1-KdibHfABD5wCx2UMHpStjD.a */,
5CB6349D29E1EE550066AD6B /* libffi.a */,
5CB6349E29E1EE550066AD6B /* libgmp.a */,
5CB634A029E1EE550066AD6B /* libgmpxx.a */,
5CB634A129E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq-ghc8.10.7.a */,
5CB6349F29E1EE550066AD6B /* libHSsimplex-chat-4.6.1.2-C345n6sAXGM3veVcbT76Lq.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -659,6 +668,17 @@
path = Onboarding;
sourceTree = "<group>";
};
5CB634AB29E46CDB0066AD6B /* LocalAuth */ = {
isa = PBXGroup;
children = (
5CB634AC29E46CF70066AD6B /* LocalAuthView.swift */,
5CB634AE29E4BB7D0066AD6B /* SetAppPasscodeView.swift */,
5CB634B029E5EFEA0066AD6B /* PasscodeView.swift */,
5CB634A729E437960066AD6B /* PasscodeEntry.swift */,
);
path = LocalAuth;
sourceTree = "<group>";
};
5CB924DD27A8622200ACCCDD /* NewChat */ = {
isa = PBXGroup;
children = (
@@ -1048,11 +1068,13 @@
5CBE6C142944CC12002D9531 /* ScanCodeView.swift in Sources */,
5CC036E029C488D500C0EF20 /* HiddenProfileView.swift in Sources */,
5C5346A827B59A6A004DF848 /* ChatHelp.swift in Sources */,
5CB634A829E437960066AD6B /* PasscodeEntry.swift in Sources */,
5CFA59C42860BC6200863A68 /* MigrateToAppGroupView.swift in Sources */,
648010AB281ADD15009009B9 /* CIFileView.swift in Sources */,
644EFFE2292D089800525D5B /* FramedCIVoiceView.swift in Sources */,
5C4B3B0A285FB130003915F2 /* DatabaseView.swift in Sources */,
5CB2084F28DA4B4800D024EC /* RTCServers.swift in Sources */,
5CB634AF29E4BB7D0066AD6B /* SetAppPasscodeView.swift in Sources */,
5C10D88828EED12E00E58BF0 /* ContactConnectionInfo.swift in Sources */,
5CBE6C12294487F7002D9531 /* VerifyCodeView.swift in Sources */,
3CDBCF4227FAE51000354CDD /* ComposeLinkView.swift in Sources */,
@@ -1094,6 +1116,7 @@
646BB38E283FDB6D001CE359 /* LocalAuthenticationUtils.swift in Sources */,
5C7505A227B65FDB00BE3227 /* CIMetaView.swift in Sources */,
5C35CFC827B2782E00FB6C6D /* BGManager.swift in Sources */,
5CB634B129E5EFEA0066AD6B /* PasscodeView.swift in Sources */,
5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */,
5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */,
6442E0BA287F169300CEC0F9 /* AddGroupView.swift in Sources */,
@@ -1148,6 +1171,7 @@
1841560FD1CD447955474C1D /* UserProfilesView.swift in Sources */,
18415C6C56DBCEC2CBBD2F11 /* WebRTCClient.swift in Sources */,
184152CEF68D2336FC2EBCB0 /* CallViewRenderers.swift in Sources */,
5CB634AD29E46CF70066AD6B /* LocalAuthView.swift in Sources */,
18415FEFE153C5920BFB7828 /* GroupWelcomeView.swift in Sources */,
18415F9A2D551F9757DA4654 /* CIVideoView.swift in Sources */,
184158C131FDB829D8A117EA /* VideoPlayerView.swift in Sources */,
@@ -1408,7 +1432,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 138;
CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1450,7 +1474,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 138;
CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1530,7 +1554,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 138;
CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1562,7 +1586,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 138;
CURRENT_PROJECT_VERSION = 140;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
+2 -2
View File
@@ -30,7 +30,7 @@ public func chatMigrateInit(_ useKey: String? = nil, confirmMigrations: Migratio
logger.debug("chatMigrateInit generating a random DB key")
dbKey = randomDatabasePassword()
initialRandomDBPassphraseGroupDefault.set(true)
} else if let key = getDatabaseKey() {
} else if let key = kcDatabasePassword.get() {
dbKey = key
}
}
@@ -44,7 +44,7 @@ public func chatMigrateInit(_ useKey: String? = nil, confirmMigrations: Migratio
let cjson = chat_migrate_init(&cPath, &cKey, &cConfirm, &chatController)!
let dbRes = dbMigrationResult(fromCString(cjson))
let encrypted = dbKey != ""
let keychainErr = dbRes == .ok && useKeychain && encrypted && !setDatabaseKey(dbKey)
let keychainErr = dbRes == .ok && useKeychain && encrypted && !kcDatabasePassword.set(dbKey)
let result = (encrypted, keychainErr ? .errorKeychain : dbRes)
migrationResult = result
return result
+5 -1
View File
@@ -2542,7 +2542,11 @@ public enum CICallStatus: String, Decodable {
}
public func durationText(_ sec: Int) -> String {
String(format: "%02d:%02d", sec / 60, sec % 60)
let s = sec % 60
let m = sec / 60
return m < 60
? String(format: "%02d:%02d", m, s)
: String(format: "%02d:%02d:%02d", m / 60, m % 60, s)
}
public enum MsgErrorType: Decodable {
+17 -8
View File
@@ -12,17 +12,26 @@ import Security
private let ACCESS_POLICY: CFString = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
private let ACCESS_GROUP: String = "5NN7GUYB6T.chat.simplex.app"
private let DATABASE_PASSWORD_ITEM: String = "databasePassword"
private let APP_PASSWORD_ITEM: String = "appPassword"
public func getDatabaseKey() -> String? {
getItemString(forKey: DATABASE_PASSWORD_ITEM)
}
public let kcDatabasePassword = KeyChainItem(forKey: DATABASE_PASSWORD_ITEM)
public func setDatabaseKey(_ key: String) -> Bool {
setItemString(key, forKey: DATABASE_PASSWORD_ITEM)
}
public let kcAppPassword = KeyChainItem(forKey: APP_PASSWORD_ITEM)
public func removeDatabaseKey() -> Bool {
deleteItem(forKey: DATABASE_PASSWORD_ITEM)
public struct KeyChainItem {
var forKey: String
public func get() -> String? {
getItemString(forKey: forKey)
}
public func set(_ value: String) -> Bool {
setItemString(value, forKey: forKey)
}
public func remove() -> Bool {
deleteItem(forKey: forKey)
}
}
func randomDatabasePassword() -> String {
+34 -4
View File
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ je ověřený";
/* No comment provided by engineer. */
"%@ servers" = "%@ servery";
/* notification title */
"%@ wants to connect!" = "%@ se chce připojit!";
@@ -740,6 +743,9 @@
/* No comment provided by engineer. */
"Database upgrade" = "Aktualizace databáze";
/* No comment provided by engineer. */
"database version is newer than the app, but no down migration for: %@" = "verze databáze je novější než aplikace, ale žádný přechod dolů pro: %@";
/* No comment provided by engineer. */
"Database will be encrypted and the passphrase stored in the keychain.\n" = "Databáze bude zašifrována a heslo bude uloženo v klíčence.\n";
@@ -881,6 +887,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Ověřování zařízení není povoleno. Jakmile povolíte ověřování zařízení, můžete zámek SimpleX Lock zapnout prostřednictvím Nastavení.";
/* No comment provided by engineer. */
"different migration in the app/database: %@ / %@" = "různé migrace v aplikaci/databázi: %@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Různá jména, avatary a dopravní izolace.";
@@ -986,6 +995,9 @@
/* notification */
"Encrypted message: database error" = "Šifrovaná zpráva: chyba databáze";
/* notification */
"Encrypted message: database migration error" = "Šifrovaná zpráva: chyba migrace databáze";
/* notification */
"Encrypted message: keychain error" = "Zašifrovaná zpráva: chyba klíčenky";
@@ -1094,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "Chyba při odebrání člena";
/* No comment provided by engineer. */
"Error saving %@ servers" = "Chyba při ukládání serverů %@";
/* No comment provided by engineer. */
"Error saving group profile" = "Chyba při ukládání profilu skupiny";
@@ -1103,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Při ukládání přístupové fráze do klíčenky došlo k chybě";
/* No comment provided by engineer. */
"Error saving SMP servers" = "Chyba při ukládání serverů SMP";
/* No comment provided by engineer. */
"Error saving user password" = "Chyba ukládání hesla uživatele";
@@ -1148,6 +1160,9 @@
/* No comment provided by engineer. */
"Exit without saving" = "Ukončit bez uložení";
/* No comment provided by engineer. */
"Experimental" = "Pokusný";
/* No comment provided by engineer. */
"Export database" = "Export databáze";
@@ -1533,7 +1548,7 @@
"Make profile private!" = "Změnit profil na soukromý!";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Ujistěte se, že adresy SMP serverů jsou ve správném formátu, oddělené řádky a nejsou duplicitní (%@).";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Ujistěte se, že adresy %@ serverů jsou ve správném formátu, oddělené řádky a nejsou duplicitní (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Ujistěte se, že adresy serverů WebRTC ICE jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní.";
@@ -1592,6 +1607,9 @@
/* No comment provided by engineer. */
"Messages" = "Zprávy";
/* No comment provided by engineer. */
"Messages & files" = "Zprávy";
/* No comment provided by engineer. */
"Migrating database archive..." = "Přenášení archivu databáze...";
@@ -1604,6 +1622,9 @@
/* No comment provided by engineer. */
"Migration is completed" = "Přenesení dokončeno";
/* No comment provided by engineer. */
"Migrations: %@" = "Migrace: %@";
/* call status */
"missed call" = "zmeškané volání";
@@ -2127,6 +2148,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Odeslat je z galerie nebo vlastní klávesnice.";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Odeslat soubory přes XFTP";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "Odesílatel zrušil přenos souboru.";
@@ -2637,6 +2661,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "Špatná přístupová fráze!";
/* No comment provided by engineer. */
"XFTP servers" = "XFTP servery";
/* pref value */
"yes" = "ano";
@@ -2784,6 +2811,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Pro tuto skupinu používáte inkognito profil - abyste zabránili sdílení svého hlavního profilu, není pozvání kontaktů povoleno";
/* No comment provided by engineer. */
"Your %@ servers" = "Vaše servery %@";
/* No comment provided by engineer. */
"Your calls" = "Vaše hovory";
+41 -8
View File
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ wurde erfolgreich überprüft";
/* No comment provided by engineer. */
"%@ servers" = "%@-Server";
/* notification title */
"%@ wants to connect!" = "%@ will sich mit Ihnen verbinden!";
@@ -699,7 +702,7 @@
"Dark" = "Dunkel";
/* No comment provided by engineer. */
"Database downgrade" = "Datenbank-Herabstufung";
"Database downgrade" = "Datenbank auf alte Version herabstufen";
/* No comment provided by engineer. */
"Database encrypted!" = "Datenbank verschlüsselt!";
@@ -740,6 +743,9 @@
/* No comment provided by engineer. */
"Database upgrade" = "Datenbank-Aktualisierung";
/* No comment provided by engineer. */
"database version is newer than the app, but no down migration for: %@" = "Die Datenbank-Version ist neuer als die App, keine Abwärts-Migration für: %@";
/* No comment provided by engineer. */
"Database will be encrypted and the passphrase stored in the keychain.\n" = "Die Datenbank wird verschlüsselt, und das Passwort im Keychain gespeichert.\n";
@@ -881,6 +887,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Die Geräteauthentifizierung ist deaktiviert. Sie können die SimpleX Sperre über die Einstellungen aktivieren, sobald Sie die Geräteauthentifizierung aktiviert haben.";
/* No comment provided by engineer. */
"different migration in the app/database: %@ / %@" = "Unterschiedlicher Migrationsstand in der App/Datenbank: %@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Unterschiedliche Namen, Avatare und Transport-Isolation.";
@@ -924,7 +933,7 @@
"Don't show again" = "Nicht nochmals anzeigen";
/* No comment provided by engineer. */
"Downgrade and open chat" = "Herabstufen und den Chat öffnen";
"Downgrade and open chat" = "Datenbank herabstufen und den Chat öffnen";
/* No comment provided by engineer. */
"Duplicate display name!" = "Doppelter Anzeigename!";
@@ -986,6 +995,9 @@
/* notification */
"Encrypted message: database error" = "Verschlüsselte Nachricht: Datenbankfehler";
/* notification */
"Encrypted message: database migration error" = "Verschlüsselte Nachricht: Datenbank-Migrationsfehler";
/* notification */
"Encrypted message: keychain error" = "Verschlüsselte Nachricht: Schlüsselbundfehler";
@@ -1094,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "Fehler beim Entfernen des Mitglieds";
/* No comment provided by engineer. */
"Error saving %@ servers" = "Fehler beim Speichern der %@-Server";
/* No comment provided by engineer. */
"Error saving group profile" = "Fehler beim Speichern des Gruppenprofils";
@@ -1103,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Fehler beim Speichern des Passworts in den Schlüsselbund";
/* No comment provided by engineer. */
"Error saving SMP servers" = "Fehler beim Speichern der SMP-Server";
/* No comment provided by engineer. */
"Error saving user password" = "Fehler beim Speichern des Benutzer-Passworts";
@@ -1148,6 +1160,9 @@
/* No comment provided by engineer. */
"Exit without saving" = "Beenden ohne Speichern";
/* No comment provided by engineer. */
"Experimental" = "Experimentell";
/* No comment provided by engineer. */
"Export database" = "Datenbank exportieren";
@@ -1533,7 +1548,7 @@
"Make profile private!" = "Privates Profil erzeugen!";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Stellen Sie sicher, dass die SMP-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@).";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Stellen Sie sicher, dass die %@-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Stellen Sie sicher, dass die WebRTC ICE-Server Adressen das richtige Format haben, zeilenweise angeordnet und nicht doppelt vorhanden sind.";
@@ -1592,6 +1607,9 @@
/* No comment provided by engineer. */
"Messages" = "Nachrichten";
/* No comment provided by engineer. */
"Messages & files" = "Nachrichten";
/* No comment provided by engineer. */
"Migrating database archive..." = "Das Datenbankarchiv wird migriert...";
@@ -1604,6 +1622,9 @@
/* No comment provided by engineer. */
"Migration is completed" = "Die Migration wurde abgeschlossen";
/* No comment provided by engineer. */
"Migrations: %@" = "Migrationen: %@";
/* call status */
"missed call" = "Anruf verpasst";
@@ -1915,7 +1936,7 @@
"Rate the app" = "Bewerten Sie die App";
/* No comment provided by engineer. */
"Read" = "Lesen";
"Read" = "Gelesen";
/* No comment provided by engineer. */
"Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Erfahren Sie in unserem [GitHub-Repository](https://github.com/simplex-chat/simplex-chat#readme) mehr dazu.";
@@ -2127,6 +2148,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Senden Sie diese aus dem Fotoalbum oder von individuellen Tastaturen.";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Dateien per XFTP versenden";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "Der Absender hat die Dateiübertragung abgebrochen.";
@@ -2278,7 +2302,7 @@
"Tap button " = "Schaltfläche antippen ";
/* No comment provided by engineer. */
"Tap to activate profile." = "Tippen Sie, um das Profil zu aktivieren.";
"Tap to activate profile." = "Tippen Sie auf das Profil um es zu aktivieren.";
/* No comment provided by engineer. */
"Tap to join" = "Zum Beitreten tippen";
@@ -2637,6 +2661,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "Falsches Passwort!";
/* No comment provided by engineer. */
"XFTP servers" = "XFTP-Server";
/* pref value */
"yes" = "Ja";
@@ -2784,6 +2811,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Sie verwenden ein Inkognito-Profil für diese Gruppe. Um zu verhindern, dass Sie Ihr Hauptprofil teilen, ist in diesem Fall das Einladen von Kontakten nicht erlaubt";
/* No comment provided by engineer. */
"Your %@ servers" = "Ihre %@-Server";
/* No comment provided by engineer. */
"Your calls" = "Anrufe";
@@ -2862,3 +2892,6 @@
/* No comment provided by engineer. */
"Your SMP servers" = "Ihre SMP-Server";
/* No comment provided by engineer. */
"Your XFTP servers" = "Ihre XFTP-Server";
+43 -10
View File
@@ -44,7 +44,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)" = "[Comienza en GitHub] (https://github.com/simplex-chat/simplex-chat)";
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Dar 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.";
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ está verificado";
/* No comment provided by engineer. */
"%@ servers" = "Servidores %@";
/* notification title */
"%@ wants to connect!" = "%@ ¡quiere conectar!";
@@ -339,7 +342,7 @@
"Attach" = "Adjuntar";
/* No comment provided by engineer. */
"Audio & video calls" = "Llamadas y videollamadas";
"Audio & video calls" = "Llamadas y Videollamadas";
/* No comment provided by engineer. */
"Audio and video calls" = "Llamadas y videollamadas";
@@ -729,7 +732,7 @@
"Database passphrase" = "Contraseña de la base de datos";
/* No comment provided by engineer. */
"Database passphrase & export" = "Base de datos\ny frase de contraseña";
"Database passphrase & export" = "Base de datos\ny Contraseña";
/* No comment provided by engineer. */
"Database passphrase is different from saved in the keychain." = "La contraseña es distinta a la almacenada en Keychain.";
@@ -740,6 +743,9 @@
/* No comment provided by engineer. */
"Database upgrade" = "Actualización de la base de datos";
/* No comment provided by engineer. */
"database version is newer than the app, but no down migration for: %@" = "la versión de la base de datos es más reciente que la aplicación, pero no hay migración hacía versión anterior para: %@";
/* No comment provided by engineer. */
"Database will be encrypted and the passphrase stored in the keychain.\n" = "La base de datos será cifrada y la contraseña se guardará en Keychain.\n";
@@ -881,6 +887,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Autenticación de dispositivo desactivada. Puedes habilitar SimpleX Lock en Configuración, después de activar la autenticación de dispositivo.";
/* No comment provided by engineer. */
"different migration in the app/database: %@ / %@" = "migración diferente en la aplicación/base de datos: %@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Nombre y avatar diferentes, aislamiento de transporte.";
@@ -986,6 +995,9 @@
/* notification */
"Encrypted message: database error" = "Mensaje cifrado: error en base de datos";
/* notification */
"Encrypted message: database migration error" = "Mensaje cifrado: error de migración de base de datos";
/* notification */
"Encrypted message: keychain error" = "Mensaje cifrado: error en Keychain";
@@ -1094,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "Error eliminando miembro";
/* No comment provided by engineer. */
"Error saving %@ servers" = "Error guardando servidores %@";
/* No comment provided by engineer. */
"Error saving group profile" = "Error guardando perfil de grupo";
@@ -1103,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Error guardando contraseña en Keychain";
/* No comment provided by engineer. */
"Error saving SMP servers" = "Error guardando servidores SMP";
/* No comment provided by engineer. */
"Error saving user password" = "Error guardando la contraseña de usuario";
@@ -1148,6 +1160,9 @@
/* No comment provided by engineer. */
"Exit without saving" = "Salir sin guardar";
/* No comment provided by engineer. */
"Experimental" = "Experimental";
/* No comment provided by engineer. */
"Export database" = "Exportar base de datos";
@@ -1305,7 +1320,7 @@
"How to" = "Cómo";
/* No comment provided by engineer. */
"How to use it" = "Guia de uso";
"How to use it" = "Guía de uso";
/* No comment provided by engineer. */
"How to use your servers" = "Cómo usar tus servidores";
@@ -1533,7 +1548,7 @@
"Make profile private!" = "¡Hacer un perfil privado!";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas (%@).";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Asegúrate de que las direcciones del servidor %@ tienen el formato correcto, están separadas por líneas y no duplicadas (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas.";
@@ -1592,6 +1607,9 @@
/* No comment provided by engineer. */
"Messages" = "Mensajes";
/* No comment provided by engineer. */
"Messages & files" = "Mensajes";
/* No comment provided by engineer. */
"Migrating database archive..." = "Migrando la base de datos...";
@@ -1604,6 +1622,9 @@
/* No comment provided by engineer. */
"Migration is completed" = "Migración completada";
/* No comment provided by engineer. */
"Migrations: %@" = "Migraciones: %@";
/* call status */
"missed call" = "llamada perdida";
@@ -1635,7 +1656,7 @@
"Name" = "Nombre";
/* No comment provided by engineer. */
"Network & servers" = "Redes y servidores";
"Network & servers" = "Redes y Servidores";
/* No comment provided by engineer. */
"Network settings" = "Configuración de red";
@@ -1870,7 +1891,7 @@
"Preset server address" = "Dirección del servidor predefinida";
/* No comment provided by engineer. */
"Privacy & security" = "Privacidad y seguridad";
"Privacy & security" = "Privacidad y Seguridad";
/* No comment provided by engineer. */
"Privacy redefined" = "Privacidad redefinida";
@@ -2127,6 +2148,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Envíalos desde la galería o desde teclados personalizados.";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Enviar archivos vía XFTP";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "El remitente ha cancelado la transferencia de archivos.";
@@ -2637,6 +2661,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "¡Contraseña incorrecta!";
/* No comment provided by engineer. */
"XFTP servers" = "Servidores XFTP";
/* pref value */
"yes" = "sí";
@@ -2784,6 +2811,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Estás utilizando un perfil incógnito para este grupo. Para evitar compartir tu perfil principal, invitar contactos no está permitido";
/* No comment provided by engineer. */
"Your %@ servers" = "Tus servidores %@";
/* No comment provided by engineer. */
"Your calls" = "Tus llamadas";
@@ -2862,3 +2892,6 @@
/* No comment provided by engineer. */
"Your SMP servers" = "Tus servidores SMP";
/* No comment provided by engineer. */
"Your XFTP servers" = "Tus servidores XFTP";
+37 -7
View File
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ est vérifié·e";
/* No comment provided by engineer. */
"%@ servers" = "Serveurs %@";
/* notification title */
"%@ wants to connect!" = "%@ veut se connecter !";
@@ -740,6 +743,9 @@
/* No comment provided by engineer. */
"Database upgrade" = "Mise à niveau de la base de données";
/* No comment provided by engineer. */
"database version is newer than the app, but no down migration for: %@" = "la base de données a une version plus récente que celle de l'application, mais il n'y a pas de rétrogradation pour : %@";
/* No comment provided by engineer. */
"Database will be encrypted and the passphrase stored in the keychain.\n" = "La base de données sera chiffrée et la phrase secrète sera stockée dans la keychain.\n";
@@ -881,6 +887,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "L'authentification de l'appareil n'est pas activée. Vous pouvez activer SimpleX Lock via Paramètres, une fois que vous avez activé l'authentification de l'appareil.";
/* No comment provided by engineer. */
"different migration in the app/database: %@ / %@" = "migration différente dans l'app/la base de données : %@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Différents noms, avatars et mode d'isolation de transport.";
@@ -986,6 +995,9 @@
/* notification */
"Encrypted message: database error" = "Message chiffrée: erreur de base de données";
/* notification */
"Encrypted message: database migration error" = "Message chiffré : erreur de migration de la base de données";
/* notification */
"Encrypted message: keychain error" = "Message chiffrée: erreur de keychain";
@@ -1094,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "Erreur lors de la suppression d'un membre";
/* No comment provided by engineer. */
"Error saving %@ servers" = "Erreur lors de la sauvegarde des serveurs %@";
/* No comment provided by engineer. */
"Error saving group profile" = "Erreur lors de la sauvegarde du profil de groupe";
@@ -1103,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Erreur lors de l'enregistrement de la phrase de passe dans la keychain";
/* No comment provided by engineer. */
"Error saving SMP servers" = "Erreur lors de la sauvegarde des serveurs SMP";
/* No comment provided by engineer. */
"Error saving user password" = "Erreur d'enregistrement du mot de passe de l'utilisateur";
@@ -1148,6 +1160,9 @@
/* No comment provided by engineer. */
"Exit without saving" = "Quitter sans sauvegarder";
/* No comment provided by engineer. */
"Experimental" = "Expérimental";
/* No comment provided by engineer. */
"Export database" = "Exporter la base de données";
@@ -1163,9 +1178,6 @@
/* No comment provided by engineer. */
"Failed to remove passphrase" = "Échec de la suppression de la phrase secrète";
/* No comment provided by engineer. */
"File transfer will be cancelled. If it's in progress it will be stoppped." = "Le transfert de fichiers sera annulé. S'il est en cours, il sera interrompu.";
/* No comment provided by engineer. */
"File will be received when your contact completes uploading it." = "Le fichier sera reçu lorsque votre contact aura terminé de le mettre en ligne.";
@@ -1533,7 +1545,7 @@
"Make profile private!" = "Rendre un profil privé !";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Assurez-vous que les adresses des serveurs SMP sont au bon format et ne sont pas dupliquées, un par ligne.";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Assurez-vous que les adresses des serveurs %@ sont au bon format et ne sont pas dupliquées, un par ligne (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Assurez-vous que les adresses des serveurs WebRTC ICE sont au bon format et ne sont pas dupliquées, un par ligne.";
@@ -1592,6 +1604,9 @@
/* No comment provided by engineer. */
"Messages" = "Messages";
/* No comment provided by engineer. */
"Messages & files" = "Messages";
/* No comment provided by engineer. */
"Migrating database archive..." = "Migration de l'archive de la base de données...";
@@ -1604,6 +1619,9 @@
/* No comment provided by engineer. */
"Migration is completed" = "La migration est terminée";
/* No comment provided by engineer. */
"Migrations: %@" = "Migrations : %@";
/* call status */
"missed call" = "appel manqué";
@@ -2127,6 +2145,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Envoyez-les depuis la phototèque ou des claviers personnalisés.";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Envoi de fichiers via XFTP";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "L'expéditeur a annulé le transfert de fichiers.";
@@ -2637,6 +2658,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "Mauvaise phrase secrète !";
/* No comment provided by engineer. */
"XFTP servers" = "Serveurs XFTP";
/* pref value */
"yes" = "oui";
@@ -2784,6 +2808,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Vous utilisez un profil incognito pour ce groupe - pour éviter de partager votre profil principal ; inviter des contacts n'est pas possible";
/* No comment provided by engineer. */
"Your %@ servers" = "Vos serveurs %@";
/* No comment provided by engineer. */
"Your calls" = "Vos appels";
@@ -2862,3 +2889,6 @@
/* No comment provided by engineer. */
"Your SMP servers" = "Vos serveurs SMP";
/* No comment provided by engineer. */
"Your XFTP servers" = "Vos serveurs XFTP";
+37 -4
View File
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ è verificato/a";
/* No comment provided by engineer. */
"%@ servers" = "Server %@";
/* notification title */
"%@ wants to connect!" = "%@ si vuole connettere!";
@@ -740,6 +743,9 @@
/* No comment provided by engineer. */
"Database upgrade" = "Aggiornamento del database";
/* No comment provided by engineer. */
"database version is newer than the app, but no down migration for: %@" = "la versione del database è più recente di quella dell'app, ma nessuna migrazione downgrade per: %@";
/* No comment provided by engineer. */
"Database will be encrypted and the passphrase stored in the keychain.\n" = "Il database verrà crittografato e la password conservata nel portachiavi.\n";
@@ -881,6 +887,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "L'autenticazione del dispositivo non è abilitata. Puoi attivare SimpleX Lock tramite le impostazioni, dopo aver abilitato l'autenticazione del dispositivo.";
/* No comment provided by engineer. */
"different migration in the app/database: %@ / %@" = "migrazione diversa nell'app/nel database: %@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Nomi e avatar diversi, isolamento del trasporto.";
@@ -986,6 +995,9 @@
/* notification */
"Encrypted message: database error" = "Messaggio crittografato: errore del database";
/* notification */
"Encrypted message: database migration error" = "Messaggio crittografato: errore di migrazione del database";
/* notification */
"Encrypted message: keychain error" = "Messaggio crittografato: errore del portachiavi";
@@ -1094,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "Errore nella rimozione del membro";
/* No comment provided by engineer. */
"Error saving %@ servers" = "Errore nel salvataggio dei server %@";
/* No comment provided by engineer. */
"Error saving group profile" = "Errore nel salvataggio del profilo del gruppo";
@@ -1103,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Errore nel salvataggio della password nel portachiavi";
/* No comment provided by engineer. */
"Error saving SMP servers" = "Errore nel salvataggio dei server SMP";
/* No comment provided by engineer. */
"Error saving user password" = "Errore nel salvataggio della password utente";
@@ -1148,6 +1160,9 @@
/* No comment provided by engineer. */
"Exit without saving" = "Esci senza salvare";
/* No comment provided by engineer. */
"Experimental" = "Sperimentale";
/* No comment provided by engineer. */
"Export database" = "Esporta database";
@@ -1533,7 +1548,7 @@
"Make profile private!" = "Rendi privato il profilo!";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Assicurati che gli indirizzi dei server SMP siano nel formato corretto, uno per riga e non doppi (%@).";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Assicurati che gli indirizzi dei server %@ siano nel formato corretto, uno per riga e non doppi (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Assicurati che gli indirizzi dei server WebRTC ICE siano nel formato corretto, uno per riga e non doppi.";
@@ -1592,6 +1607,9 @@
/* No comment provided by engineer. */
"Messages" = "Messaggi";
/* No comment provided by engineer. */
"Messages & files" = "Messaggi";
/* No comment provided by engineer. */
"Migrating database archive..." = "Migrazione archivio del database...";
@@ -1604,6 +1622,9 @@
/* No comment provided by engineer. */
"Migration is completed" = "La migrazione è completata";
/* No comment provided by engineer. */
"Migrations: %@" = "Migrazioni: %@";
/* call status */
"missed call" = "chiamata persa";
@@ -2127,6 +2148,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Inviali dalla galleria o dalle tastiere personalizzate.";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Invia file tramite XFTP";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "Il mittente ha annullato il trasferimento del file.";
@@ -2637,6 +2661,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "Password sbagliata!";
/* No comment provided by engineer. */
"XFTP servers" = "Server XFTP";
/* pref value */
"yes" = "sì";
@@ -2784,6 +2811,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Stai usando un profilo in incognito per questo gruppo: per impedire la condivisione del tuo profilo principale non è consentito invitare contatti";
/* No comment provided by engineer. */
"Your %@ servers" = "I tuoi server %@";
/* No comment provided by engineer. */
"Your calls" = "Le tue chiamate";
@@ -2862,3 +2892,6 @@
/* No comment provided by engineer. */
"Your SMP servers" = "I tuoi server SMP";
/* No comment provided by engineer. */
"Your XFTP servers" = "I tuoi server XFTP";
+37 -4
View File
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ is geverifieerd";
/* No comment provided by engineer. */
"%@ servers" = "%@ servers";
/* notification title */
"%@ wants to connect!" = "%@ wil verbinding maken!";
@@ -740,6 +743,9 @@
/* No comment provided by engineer. */
"Database upgrade" = "Database upgrade";
/* No comment provided by engineer. */
"database version is newer than the app, but no down migration for: %@" = "databaseversie is nieuwer dan de app, maar geen downmigratie voor: %@";
/* No comment provided by engineer. */
"Database will be encrypted and the passphrase stored in the keychain.\n" = "De database wordt versleuteld en het wachtwoord wordt opgeslagen in de keychain.\n";
@@ -881,6 +887,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Vergrendelen inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld.";
/* No comment provided by engineer. */
"different migration in the app/database: %@ / %@" = "verschillende migratie in de app/database: %@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Verschillende namen, avatars en transportisolatie.";
@@ -986,6 +995,9 @@
/* notification */
"Encrypted message: database error" = "Versleuteld bericht: database fout";
/* notification */
"Encrypted message: database migration error" = "Versleuteld bericht: fout bij databasemigratie";
/* notification */
"Encrypted message: keychain error" = "Versleuteld bericht: keychain fout";
@@ -1094,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "Fout bij verwijderen van gebruiker";
/* No comment provided by engineer. */
"Error saving %@ servers" = "Fout bij opslaan van %@ servers";
/* No comment provided by engineer. */
"Error saving group profile" = "Fout bij opslaan van groep profiel";
@@ -1103,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Fout bij opslaan van wachtwoord in de keychain";
/* No comment provided by engineer. */
"Error saving SMP servers" = "Fout bij opslaan van SMP servers";
/* No comment provided by engineer. */
"Error saving user password" = "Fout bij opslaan gebruikers wachtwoord";
@@ -1148,6 +1160,9 @@
/* No comment provided by engineer. */
"Exit without saving" = "Afsluiten zonder opslaan";
/* No comment provided by engineer. */
"Experimental" = "Experimenteel";
/* No comment provided by engineer. */
"Export database" = "Database exporteren";
@@ -1533,7 +1548,7 @@
"Make profile private!" = "Profiel privé maken!";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn (%@).";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Zorg ervoor dat %@ server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Zorg ervoor dat WebRTC ICE server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn.";
@@ -1592,6 +1607,9 @@
/* No comment provided by engineer. */
"Messages" = "Berichten";
/* No comment provided by engineer. */
"Messages & files" = "Berichten";
/* No comment provided by engineer. */
"Migrating database archive..." = "Database archief migreren...";
@@ -1604,6 +1622,9 @@
/* No comment provided by engineer. */
"Migration is completed" = "Migratie is voltooid";
/* No comment provided by engineer. */
"Migrations: %@" = "Migraties: %@";
/* call status */
"missed call" = "gemiste oproep";
@@ -2127,6 +2148,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Stuur ze vanuit de galerij of aangepaste toetsenborden.";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Bestanden verzenden via XFTP";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "Afzender heeft bestandsoverdracht geannuleerd.";
@@ -2637,6 +2661,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "Verkeerd wachtwoord!";
/* No comment provided by engineer. */
"XFTP servers" = "XFTP servers";
/* pref value */
"yes" = "Ja";
@@ -2784,6 +2811,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Je gebruikt een incognito profiel voor deze groep. Om te voorkomen dat je je hoofdprofiel deelt, is het niet toegestaan om contacten uit te nodigen";
/* No comment provided by engineer. */
"Your %@ servers" = "Uw %@ servers";
/* No comment provided by engineer. */
"Your calls" = "Uw oproepen";
@@ -2862,3 +2892,6 @@
/* No comment provided by engineer. */
"Your SMP servers" = "Uw SMP servers";
/* No comment provided by engineer. */
"Your XFTP servers" = "Uw XFTP servers";
+22 -7
View File
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ подтверждён";
/* No comment provided by engineer. */
"%@ servers" = "%@ серверы";
/* notification title */
"%@ wants to connect!" = "%@ хочет соединиться!";
@@ -1103,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "Ошибка при удалении члена группы";
/* No comment provided by engineer. */
"Error saving %@ servers" = "Ошибка при сохранении %@ серверов";
/* No comment provided by engineer. */
"Error saving group profile" = "Ошибка при сохранении профиля группы";
@@ -1112,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Ошибка сохранения пароля в Keychain";
/* No comment provided by engineer. */
"Error saving SMP servers" = "Ошибка при сохранении SMP серверов";
/* No comment provided by engineer. */
"Error saving user password" = "Ошибка при сохранении пароля пользователя";
@@ -1545,7 +1548,7 @@
"Make profile private!" = "Сделайте профиль скрытым!";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Пожалуйста, проверьте, что адреса SMP серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется (%@).";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Пожалуйста, проверьте, что адреса %@ серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Пожалуйста, проверьте, что адреса WebRTC ICE серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется.";
@@ -1604,6 +1607,9 @@
/* No comment provided by engineer. */
"Messages" = "Сообщения";
/* No comment provided by engineer. */
"Messages & files" = "Сообщения";
/* No comment provided by engineer. */
"Migrating database archive..." = "Данные чата перемещаются...";
@@ -2124,9 +2130,6 @@
/* No comment provided by engineer. */
"Send direct message" = "Отправить сообщение";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Отправлять видео и файлы через XFTP";
/* No comment provided by engineer. */
"Send link previews" = "Отправлять картинки ссылок";
@@ -2145,6 +2148,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Отправьте из галереи или из дополнительных клавиатур.";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "Отправлять видео и файлы через XFTP";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "Отправитель отменил передачу файла.";
@@ -2655,6 +2661,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "Неправильный пароль!";
/* No comment provided by engineer. */
"XFTP servers" = "XFTP серверы";
/* pref value */
"yes" = "да";
@@ -2802,6 +2811,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Вы используете инкогнито профиль для этой группы - чтобы предотвратить раскрытие Вашего основного профиля, приглашать контакты не разрешено";
/* No comment provided by engineer. */
"Your %@ servers" = "Ваши %@ серверы";
/* No comment provided by engineer. */
"Your calls" = "Ваши звонки";
@@ -2880,3 +2892,6 @@
/* No comment provided by engineer. */
"Your SMP servers" = "Ваши SMP серверы";
/* No comment provided by engineer. */
"Your XFTP servers" = "Ваши XFTP серверы";
+43 -7
View File
@@ -103,6 +103,9 @@
/* No comment provided by engineer. */
"%@ is verified" = "%@ 已认证";
/* No comment provided by engineer. */
"%@ servers" = "%@ 服务器";
/* notification title */
"%@ wants to connect!" = "%@ 要连接!";
@@ -740,6 +743,9 @@
/* No comment provided by engineer. */
"Database upgrade" = "数据库升级";
/* No comment provided by engineer. */
"database version is newer than the app, but no down migration for: %@" = "数据库版本比应用程序更新,但无法降级迁移:%@";
/* No comment provided by engineer. */
"Database will be encrypted and the passphrase stored in the keychain.\n" = "数据库将被加密,密码保存在钥匙串中。\n";
@@ -881,6 +887,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "没有启用设备认证。一旦启用设备认证,您可以通过设置打开 SimpleX 锁定。";
/* No comment provided by engineer. */
"different migration in the app/database: %@ / %@" = "应用程序/数据库中的不同迁移:%@ / %@";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "不同的名字、头像和传输隔离。";
@@ -978,16 +987,19 @@
"Encrypt database?" = "加密数据库?";
/* No comment provided by engineer. */
"Encrypted database" = "加密数据库";
"Encrypted database" = "加密数据库";
/* notification */
"Encrypted message or another event" = "加密消息或其他项目";
"Encrypted message or another event" = "加密消息或其他事件";
/* notification */
"Encrypted message: database error" = "加密消息:数据库错误";
/* notification */
"Encrypted message: keychain error" = "加密信息:钥匙串错误";
"Encrypted message: database migration error" = "加密信息:数据库迁移错误";
/* notification */
"Encrypted message: keychain error" = "加密消息:钥匙串错误";
/* notification */
"Encrypted message: no passphrase" = "加密消息:没有密码";
@@ -1094,6 +1106,9 @@
/* No comment provided by engineer. */
"Error removing member" = "删除成员错误";
/* No comment provided by engineer. */
"Error saving %@ servers" = "保存 %@ 服务器错误";
/* No comment provided by engineer. */
"Error saving group profile" = "保存群组资料错误";
@@ -1103,9 +1118,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "保存密码到钥匙串错误";
/* No comment provided by engineer. */
"Error saving SMP servers" = "保存 SMP 服务器错误";
/* No comment provided by engineer. */
"Error saving user password" = "保存用户密码时出错";
@@ -1133,6 +1145,9 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "更新用户隐私时出错";
/* No comment provided by engineer. */
"Error: " = "错误: ";
/* No comment provided by engineer. */
"Error: %@" = "错误: @";
@@ -1145,6 +1160,9 @@
/* No comment provided by engineer. */
"Exit without saving" = "退出而不保存";
/* No comment provided by engineer. */
"Experimental" = "实验性";
/* No comment provided by engineer. */
"Export database" = "导出数据库";
@@ -1530,7 +1548,7 @@
"Make profile private!" = "将个人资料设为私密!";
/* No comment provided by engineer. */
"Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "请确保 SMP服 务器地址格式正确,每行一个地址并且不重复 (%@)。";
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "请确保 %@服 务器地址格式正确,每行一个地址并且不重复 (%@)。";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。";
@@ -1589,6 +1607,9 @@
/* No comment provided by engineer. */
"Messages" = "消息";
/* No comment provided by engineer. */
"Messages & files" = "消息";
/* No comment provided by engineer. */
"Migrating database archive..." = "迁移数据库档案中……";
@@ -1601,6 +1622,9 @@
/* No comment provided by engineer. */
"Migration is completed" = "迁移完成";
/* No comment provided by engineer. */
"Migrations: %@" = "迁移:%@";
/* call status */
"missed call" = "未接来电";
@@ -2124,6 +2148,9 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "发送它们来自图库或自定义键盘。";
/* No comment provided by engineer. */
"Send videos and files via XFTP" = "通过 XFTP 发送文件";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "发送人已取消文件传输。";
@@ -2634,6 +2661,9 @@
/* No comment provided by engineer. */
"Wrong passphrase!" = "密码错误!";
/* No comment provided by engineer. */
"XFTP servers" = "XFTP 服务器";
/* pref value */
"yes" = "是";
@@ -2781,6 +2811,9 @@
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人";
/* No comment provided by engineer. */
"Your %@ servers" = "您的 %@ 服务器";
/* No comment provided by engineer. */
"Your calls" = "您的通话";
@@ -2859,3 +2892,6 @@
/* No comment provided by engineer. */
"Your SMP servers" = "您的 SMP 服务器";
/* No comment provided by engineer. */
"Your XFTP servers" = "您的 XFTP 服务器";
+1 -1
View File
@@ -7,7 +7,7 @@ constraints: zip +disable-bzip2 +disable-zstd
source-repository-package
type: git
location: https://github.com/simplex-chat/simplexmq.git
tag: 215d2414b7a76e3d501017b24fb6b301bf022546
tag: 5e39c479758c8646ba2f943575bf9dca4212a2fe
source-repository-package
type: git
+2 -2
View File
@@ -10,8 +10,8 @@ for lang in "${langs[@]}"; do
echo "***"
echo "*** Exporting $lang"
xcodebuild -exportLocalizations \
-project ./apps/ios/SimpleX.xcodeproj
-localizationPath ./apps/ios/SimpleX\ Localizations
-project ./apps/ios/SimpleX.xcodeproj \
-localizationPath ./apps/ios/SimpleX\ Localizations \
-exportLanguage $lang
sleep 2
done
+1 -1
View File
@@ -1,5 +1,5 @@
{
"https://github.com/simplex-chat/simplexmq.git"."215d2414b7a76e3d501017b24fb6b301bf022546" = "1gzq4zlpndlanvg9ryhyz29fd60xic6dnprsijy6wc78cf6rw3vb";
"https://github.com/simplex-chat/simplexmq.git"."5e39c479758c8646ba2f943575bf9dca4212a2fe" = "00i6w13zzv05gamxbas3yspq241s917f0vg2mnnwvmvqq2x5f4jq";
"https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38";
"https://github.com/kazu-yamamoto/http2.git"."b5a1b7200cf5bc7044af34ba325284271f6dff25" = "0dqb50j57an64nf4qcf5vcz4xkd1vzvghvf8bk529c1k30r9nfzb";
"https://github.com/simplex-chat/direct-sqlcipher.git"."34309410eb2069b029b8fc1872deb1e0db123294" = "0kwkmhyfsn2lixdlgl15smgr1h5gjk7fky6abzh8rng2h5ymnffd";
+1
View File
@@ -90,6 +90,7 @@ library
Simplex.Chat.Migrations.M20230321_agent_file_deleted
Simplex.Chat.Migrations.M20230328_files_protocol
Simplex.Chat.Migrations.M20230402_protocol_servers
Simplex.Chat.Migrations.M20230411_extra_xftp_file_descriptions
Simplex.Chat.Mobile
Simplex.Chat.Mobile.WebRTC
Simplex.Chat.Options
+14 -5
View File
@@ -388,7 +388,7 @@ processChatCommand = \case
pure CRChatStopped
APIActivateChat -> withUser $ \_ -> do
restoreCalls
withAgent activateAgent
withAgent foregroundAgent
setAllExpireCIFlags True
ok_
APISuspendChat t -> do
@@ -589,7 +589,7 @@ processChatCommand = \case
fileDescr = FileDescr {fileDescrText = "", fileDescrPartNo = 0, fileDescrComplete = False}
fInv = xftpFileInvitation fileName fileSize fileDescr
fsFilePath <- toFSFilePath file
aFileId <- withAgent $ \a -> xftpSendFile a (aUserId user) fsFilePath n
aFileId <- withAgent $ \a -> xftpSendFile a (aUserId user) fsFilePath (roundedFDCount n)
-- TODO CRSndFileStart event for XFTP
chSize <- asks $ fileChunkSize . config
ft@FileTransferMeta {fileId} <- withStore' $ \db -> createSndFileTransferXFTP db user contactOrGroup file fInv (AgentSndFileId aFileId) chSize
@@ -1773,6 +1773,9 @@ assertDirectAllowed user dir ct event =
XCallInv_ -> False
_ -> True
roundedFDCount :: Int -> Int
roundedFDCount n = max 4 $ fromIntegral $ (2 :: Integer) ^ (ceiling (logBase 2 (fromIntegral n) :: Double) :: Integer)
startExpireCIThread :: forall m. ChatMonad' m => User -> m ()
startExpireCIThread user@User {userId} = do
expireThreads <- asks expireCIThreads
@@ -2334,6 +2337,7 @@ processAgentMsgSndFile _corrId aFileId msg =
toView $ CRSndFileProgressXFTP user ci ft sndProgress sndTotal
SFDONE _sndDescr rfds ->
unless cancelled $ do
-- TODO save sender file description
ci@(AChatItem _ d cInfo _ci@ChatItem {meta = CIMeta {itemSharedMsgId = msgId_, itemDeleted}}) <-
withStore $ \db -> getChatItemByFileId db user fileId
case (msgId_, itemDeleted) of
@@ -2342,12 +2346,16 @@ processAgentMsgSndFile _corrId aFileId msg =
-- TODO either update database status or move to SFPROG
toView $ CRSndFileProgressXFTP user ci ft 1 1
case (rfds, sfts, d, cInfo) of
(rfd : _, sft : _, SMDSnd, DirectChat ct) -> do
(rfd : extraRFDs, sft : _, SMDSnd, DirectChat ct) -> do
withStore' $ \db -> createExtraSndFTDescrs db user fileId (map fileDescrText extraRFDs)
msgDeliveryId <- sendFileDescription sft rfd sharedMsgId $ sendDirectContactMessage ct
withStore' $ \db -> updateSndFTDeliveryXFTP db sft msgDeliveryId
(_, _, SMDSnd, GroupChat g@GroupInfo {groupId}) -> do
ms <- withStore' $ \db -> getGroupMembers db user g
forM_ (zip rfds $ memberFTs ms) $ \mt -> sendToMember mt `catchError` (toView . CRChatError (Just user))
let rfdsMemberFTs = zip rfds $ memberFTs ms
extraRFDs = drop (length rfdsMemberFTs) rfds
withStore' $ \db -> createExtraSndFTDescrs db user fileId (map fileDescrText extraRFDs)
forM_ rfdsMemberFTs $ \mt -> sendToMember mt `catchError` (toView . CRChatError (Just user))
ci' <- withStore $ \db -> do
liftIO $ updateCIFileStatus db user fileId CIFSSndComplete
getChatItemByFileId db user fileId
@@ -2373,9 +2381,10 @@ processAgentMsgSndFile _corrId aFileId msg =
-- agentXFTPDeleteSndFile
throwChatError $ CEXFTPSndFile fileId (AgentSndFileId aFileId) e
where
fileDescrText = safeDecodeUtf8 . strEncode
sendFileDescription :: SndFileTransfer -> ValidFileDescription 'FRecipient -> SharedMsgId -> (ChatMsgEvent 'Json -> m (SndMessage, Int64)) -> m Int64
sendFileDescription sft rfd msgId sendMsg = do
let rfdText = safeDecodeUtf8 $ strEncode rfd
let rfdText = fileDescrText rfd
withStore' $ \db -> updateSndFTDescrXFTP db user sft rfdText
partSize <- asks $ xftpDescrPartSize . config
sendParts 1 partSize rfdText
@@ -0,0 +1,35 @@
{-# LANGUAGE QuasiQuotes #-}
module Simplex.Chat.Migrations.M20230411_extra_xftp_file_descriptions where
import Database.SQLite.Simple (Query)
import Database.SQLite.Simple.QQ (sql)
m20230411_extra_xftp_file_descriptions :: Query
m20230411_extra_xftp_file_descriptions =
[sql|
CREATE TABLE extra_xftp_file_descriptions (
extra_file_descr_id INTEGER PRIMARY KEY,
file_id INTEGER NOT NULL REFERENCES files ON DELETE CASCADE,
user_id INTEGER NOT NULL REFERENCES users ON DELETE CASCADE,
file_descr_text TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT(datetime('now')),
updated_at TEXT NOT NULL DEFAULT(datetime('now'))
);
CREATE INDEX idx_extra_xftp_file_descriptions_file_id ON extra_xftp_file_descriptions(file_id);
CREATE INDEX idx_extra_xftp_file_descriptions_user_id ON extra_xftp_file_descriptions(user_id);
CREATE INDEX idx_xftp_file_descriptions_user_id ON xftp_file_descriptions(user_id);
|]
down_m20230411_extra_xftp_file_descriptions :: Query
down_m20230411_extra_xftp_file_descriptions =
[sql|
DROP INDEX idx_xftp_file_descriptions_user_id;
DROP INDEX idx_extra_xftp_file_descriptions_user_id;
DROP INDEX idx_extra_xftp_file_descriptions_file_id;
DROP TABLE extra_xftp_file_descriptions;
|]
@@ -577,3 +577,20 @@ CREATE TABLE xftp_file_descriptions(
);
CREATE INDEX idx_snd_files_file_descr_id ON snd_files(file_descr_id);
CREATE INDEX idx_rcv_files_file_descr_id ON rcv_files(file_descr_id);
CREATE TABLE extra_xftp_file_descriptions(
extra_file_descr_id INTEGER PRIMARY KEY,
file_id INTEGER NOT NULL REFERENCES files ON DELETE CASCADE,
user_id INTEGER NOT NULL REFERENCES users ON DELETE CASCADE,
file_descr_text TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT(datetime('now')),
updated_at TEXT NOT NULL DEFAULT(datetime('now'))
);
CREATE INDEX idx_extra_xftp_file_descriptions_file_id ON extra_xftp_file_descriptions(
file_id
);
CREATE INDEX idx_extra_xftp_file_descriptions_user_id ON extra_xftp_file_descriptions(
user_id
);
CREATE INDEX idx_xftp_file_descriptions_user_id ON xftp_file_descriptions(
user_id
);
+16 -3
View File
@@ -160,6 +160,7 @@ module Simplex.Chat.Store
createSndFileTransferXFTP,
createSndFTDescrXFTP,
updateSndFTDescrXFTP,
createExtraSndFTDescrs,
updateSndFTDeliveryXFTP,
getXFTPSndFileDBId,
getXFTPRcvFileDBId,
@@ -364,6 +365,7 @@ import Simplex.Chat.Migrations.M20230318_file_description
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.Protocol
import Simplex.Chat.Types
import Simplex.Chat.Util (week)
@@ -436,7 +438,8 @@ schemaMigrations =
("20230318_file_description", m20230318_file_description, Just down_m20230318_file_description),
("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)
("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)
]
-- | The list of migrations in ascending order by date
@@ -2810,17 +2813,27 @@ createSndFTDescrXFTP db User {userId} m Connection {connId} FileTransferMeta {fi
updateSndFTDescrXFTP :: DB.Connection -> User -> SndFileTransfer -> Text -> IO ()
updateSndFTDescrXFTP db user@User {userId} sft@SndFileTransfer {fileId, fileDescrId} rfdText = do
currentTs <- getCurrentTime
DB.execute
db
[sql|
UPDATE xftp_file_descriptions
SET file_descr_text = ?, file_descr_part_no = ?, file_descr_complete = ?
SET file_descr_text = ?, file_descr_part_no = ?, file_descr_complete = ?, updated_at = ?
WHERE user_id = ? AND file_descr_id = ?
|]
(rfdText, 1 :: Int, True, userId, fileDescrId)
(rfdText, 1 :: Int, True, currentTs, userId, fileDescrId)
updateCIFileStatus db user fileId $ CIFSSndTransfer 1 1
updateSndFileStatus db sft FSConnected
createExtraSndFTDescrs :: DB.Connection -> User -> FileTransferId -> [Text] -> IO ()
createExtraSndFTDescrs db User {userId} fileId rfdTexts = do
currentTs <- getCurrentTime
forM_ rfdTexts $ \rfdText ->
DB.execute
db
"INSERT INTO extra_xftp_file_descriptions (file_id, user_id, file_descr_text, created_at, updated_at) VALUES (?,?,?,?,?)"
(fileId, userId, rfdText, currentTs, currentTs)
updateSndFTDeliveryXFTP :: DB.Connection -> SndFileTransfer -> Int64 -> IO ()
updateSndFTDeliveryXFTP db SndFileTransfer {connId, fileId, fileDescrId} msgDeliveryId =
DB.execute
+1 -1
View File
@@ -49,7 +49,7 @@ extra-deps:
# - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561
# - ../simplexmq
- github: simplex-chat/simplexmq
commit: 215d2414b7a76e3d501017b24fb6b301bf022546
commit: 5e39c479758c8646ba2f943575bf9dca4212a2fe
- github: kazu-yamamoto/http2
commit: b5a1b7200cf5bc7044af34ba325284271f6dff25
# - ../direct-sqlcipher
+12
View File
@@ -8,6 +8,7 @@ import ChatTests.Utils
import Control.Concurrent (threadDelay)
import Control.Concurrent.Async (concurrently_)
import qualified Data.ByteString.Char8 as B
import Simplex.Chat (roundedFDCount)
import Simplex.Chat.Controller (ChatConfig (..), InlineFilesConfig (..), XFTPFileConfig (..), defaultInlineFilesConfig)
import Simplex.Chat.Options (ChatOpts (..))
import Simplex.FileTransfer.Client.Main (xftpClientCLI)
@@ -54,6 +55,7 @@ chatFileTests = do
it "v1" testAsyncFileTransferV1
xit "send and receive file to group, fully asynchronous" testAsyncGroupFileTransfer
describe "file transfer over XFTP" $ do
it "round file description count" $ const testXFTPRoundFDCount
it "send and receive file" testXFTPFileTransfer
it "send and receive file, accepting after upload" testXFTPAcceptAfterUpload
it "send and receive file in group" testXFTPGroupFileTransfer
@@ -960,6 +962,16 @@ testAsyncGroupFileTransfer tmp = do
dest2 <- B.readFile "./tests/tmp/test_1.jpg"
dest2 `shouldBe` src
testXFTPRoundFDCount :: Expectation
testXFTPRoundFDCount = do
roundedFDCount 1 `shouldBe` 4
roundedFDCount 2 `shouldBe` 4
roundedFDCount 4 `shouldBe` 4
roundedFDCount 5 `shouldBe` 8
roundedFDCount 20 `shouldBe` 32
roundedFDCount 128 `shouldBe` 128
roundedFDCount 500 `shouldBe` 512
testXFTPFileTransfer :: HasCallStack => FilePath -> IO ()
testXFTPFileTransfer =
testChatCfg2 cfg aliceProfile bobProfile $ \alice bob -> do
+1
View File
@@ -0,0 +1 @@
{}
+3 -3
View File
@@ -43,7 +43,7 @@
"simplex-explained-tab-1-text": "1. 用户可体验什么",
"reference": "参考",
"simplex-explained-tab-2-text": "2. SimpleX 的运作原理",
"features": "特性",
"features": "功能",
"why-simplex": "为何选择 SimpleX",
"simplex-network": "SimpleX 网络",
"simplex-explained": "SimpleX 的简述",
@@ -61,7 +61,7 @@
"terminal-cli": "终端命令行",
"simplex-explained-tab-1-p-1": "您可以像在任何其他即时通讯软件中一样创建联系人和群组,并进行双向对话。",
"hero-p-1": "其他应用需要用户 IDSignal、Matrix、Session、Briar、Jami、Cwtch 等。<br>SimpleX 不需要,<strong>甚至不需要随机数</strong>。<br>这从根本上改善了您的隐私。",
"hero-subheader": "首个不使用用户ID的即时通讯软件id",
"hero-subheader": "首个不使用用户ID的即时通讯软件",
"hero-overlay-2-textlink": "SimpleX 是如何工作的?",
"hero-2-header-desc": "该视频向您展示如何通过一次性二维码、当面或通过视频链接来连接到您的朋友。您还可以通过共享邀请链接来建立连接。",
"hero-overlay-1-title": "SimpleX 是如何工作的?",
@@ -191,7 +191,7 @@
"comparison-point-5-text": "中央组件或其他全网攻击",
"yes": "需要",
"comparison-section-list-point-5": "不保护用户的元数据",
"no-resilient": "不需要 - 有弹性",
"no-resilient": "不需要 - 有抗御力",
"no-decentralized": "不需要 - 去中心化的",
"comparison-section-list-point-3": "公钥或其他一些全球唯一的 ID",
"comparison-section-list-point-4": "如果运营商的服务器受到威胁",