From 4f8a70a6c1d8c5a4df4b2c12d792030067de62d4 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:52:45 +0700 Subject: [PATCH 01/12] android, desktop: allow to scan QR multiple times after fail (#5323) --- .../views/newchat/QRCodeScanner.android.kt | 42 ++++++----- .../simplex/common/views/chat/ScanCodeView.kt | 18 ++--- .../common/views/chat/VerifyCodeView.kt | 23 +++--- .../common/views/migration/MigrateToDevice.kt | 8 +- .../common/views/newchat/ConnectPlan.kt | 19 ++++- .../common/views/newchat/NewChatView.kt | 32 ++++---- .../common/views/newchat/QRCodeScanner.kt | 2 +- .../common/views/remote/ConnectDesktopView.kt | 75 ++++++++++--------- .../networkAndServers/ScanProtocolServer.kt | 1 + .../views/newchat/QRCodeScanner.desktop.kt | 2 +- 10 files changed, 123 insertions(+), 99 deletions(-) diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt index df38295787..6cf432a15f 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt @@ -33,6 +33,7 @@ import com.google.accompanist.permissions.rememberPermissionState import com.google.common.util.concurrent.ListenableFuture import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay import java.util.concurrent.* // Adapted from learntodroid - https://gist.github.com/learntodroid/8f839be0b29d0378f843af70607bd7f5 @@ -41,13 +42,13 @@ import java.util.concurrent.* actual fun QRCodeScanner( showQRCodeScanner: MutableState, padding: PaddingValues, - onBarcode: (String) -> Unit + onBarcode: suspend (String) -> Boolean ) { val context = LocalContext.current val lifecycleOwner = LocalLifecycleOwner.current - var preview by remember { mutableStateOf(null) } - var lastAnalyzedTimeStamp = 0L - var contactLink = "" + val preview = remember { mutableStateOf(null) } + val contactLink = remember { mutableStateOf("") } + val checkingLink = remember { mutableStateOf(false) } val cameraProviderFuture by produceState?>(initialValue = null) { value = ProcessCameraProvider.getInstance(context) @@ -86,28 +87,33 @@ actual fun QRCodeScanner( .build() val cameraExecutor: ExecutorService = Executors.newSingleThreadExecutor() cameraProviderFuture?.addListener({ - preview = Preview.Builder().build().also { + preview.value = Preview.Builder().build().also { it.setSurfaceProvider(previewView.surfaceProvider) } val detector: QrCodeDetector = FactoryFiducial.qrcode(null, GrayU8::class.java) - fun getQR(imageProxy: ImageProxy) { - val currentTimeStamp = System.currentTimeMillis() - if (currentTimeStamp - lastAnalyzedTimeStamp >= TimeUnit.SECONDS.toMillis(1)) { - detector.process(imageProxyToGrayU8(imageProxy)) - val found = detector.detections - val qr = found.firstOrNull() - if (qr != null) { - if (qr.message != contactLink) { - // Make sure link is new and not a repeat - contactLink = qr.message - onBarcode(contactLink) + suspend fun getQR(imageProxy: ImageProxy) { + if (checkingLink.value) return + checkingLink.value = true + + detector.process(imageProxyToGrayU8(imageProxy)) + val found = detector.detections + val qr = found.firstOrNull() + if (qr != null) { + if (qr.message != contactLink.value) { + // Make sure link is new and not a repeat if that link was handled successfully + if (onBarcode(qr.message)) { + contactLink.value = qr.message } + // just some delay to not spam endlessly with alert in case the user scan something wrong, and it fails fast + // (for example, scan user's address while verifying contact code - it prevents alert spam) + delay(1000) } } + checkingLink.value = false imageProxy.close() } - val imageAnalyzer = ImageAnalysis.Analyzer { proxy -> getQR(proxy) } + val imageAnalyzer = ImageAnalysis.Analyzer { proxy -> withApi { getQR(proxy) } } val imageAnalysis: ImageAnalysis = ImageAnalysis.Builder() .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .setImageQueueDepth(1) @@ -115,7 +121,7 @@ actual fun QRCodeScanner( .also { it.setAnalyzer(cameraExecutor, imageAnalyzer) } try { cameraProviderFuture?.get()?.unbindAll() - cameraProviderFuture?.get()?.bindToLifecycle(lifecycleOwner, cameraSelector, preview, imageAnalysis) + cameraProviderFuture?.get()?.bindToLifecycle(lifecycleOwner, cameraSelector, preview.value, imageAnalysis) } catch (e: Exception) { Log.d(TAG, "CameraPreview: ${e.localizedMessage}") } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt index a12a75b747..428d4b1b8f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ScanCodeView.kt @@ -13,19 +13,19 @@ import chat.simplex.res.MR import dev.icerock.moko.resources.compose.stringResource @Composable -fun ScanCodeView(verifyCode: (String?, cb: (Boolean) -> Unit) -> Unit, close: () -> Unit) { +fun ScanCodeView(verifyCode: suspend (String?) -> Boolean, close: () -> Unit) { ColumnWithScrollBar { AppBarTitle(stringResource(MR.strings.scan_code)) QRCodeScanner { text -> - verifyCode(text) { - if (it) { - close() - } else { - AlertManager.shared.showAlertMsg( - title = generalGetString(MR.strings.incorrect_code) - ) - } + val success = verifyCode(text) + if (success) { + close() + } else { + AlertManager.shared.showAlertMsg( + title = generalGetString(MR.strings.incorrect_code) + ) } + success } Text(stringResource(MR.strings.scan_code_from_contacts_app), Modifier.padding(horizontal = DEFAULT_PADDING)) SectionBottomSpacer() diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt index 69087ecd60..e670fae5ef 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/VerifyCodeView.kt @@ -35,14 +35,14 @@ fun VerifyCodeView( displayName, connectionCode, connectionVerified, - verifyCode = { newCode, cb -> - withBGApi { - val res = verify(newCode) - if (res != null) { - val (verified) = res - cb(verified) - if (verified) close() - } + verifyCode = { newCode -> + val res = verify(newCode) + if (res != null) { + val (verified) = res + if (verified) close() + verified + } else { + false } } ) @@ -54,7 +54,7 @@ private fun VerifyCodeLayout( displayName: String, connectionCode: String, connectionVerified: Boolean, - verifyCode: (String?, cb: (Boolean) -> Unit) -> Unit, + verifyCode: suspend (String?) -> Boolean, ) { ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_PADDING)) { AppBarTitle(stringResource(MR.strings.security_code), withPadding = false) @@ -100,7 +100,7 @@ private fun VerifyCodeLayout( ) { if (connectionVerified) { SimpleButton(generalGetString(MR.strings.clear_verification), painterResource(MR.images.ic_shield)) { - verifyCode(null) {} + withApi { verifyCode(null) } } } else { if (appPlatform.isAndroid) { @@ -111,7 +111,8 @@ private fun VerifyCodeLayout( } } SimpleButton(generalGetString(MR.strings.mark_code_verified), painterResource(MR.images.ic_verified_user)) { - verifyCode(connectionCode) { verified -> + withApi { + val verified = verifyCode(connectionCode) if (!verified) { AlertManager.shared.showAlertMsg( title = generalGetString(MR.strings.incorrect_code) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt index f4f537aab7..788c07a9d2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt @@ -203,7 +203,7 @@ private fun MutableState.PasteOrScanLinkView(close: () -> Uni if (appPlatform.isAndroid) { SectionView(stringResource(MR.strings.scan_QR_code).replace('\n', ' ').uppercase()) { QRCodeScanner(showQRCodeScanner = remember { mutableStateOf(true) }) { text -> - withBGApi { checkUserLink(text) } + checkUserLink(text) } } SectionSpacer() @@ -518,8 +518,8 @@ private fun ProgressView() { DefaultProgressView(null) } -private suspend fun MutableState.checkUserLink(link: String) { - if (strHasSimplexFileLink(link.trim())) { +private suspend fun MutableState.checkUserLink(link: String): Boolean { + return if (strHasSimplexFileLink(link.trim())) { val data = MigrationFileLinkData.readFromLink(link) val hasProxyConfigured = data?.networkConfig?.hasProxyConfigured() ?: false val networkConfig = data?.networkConfig?.transformToPlatformSupported() @@ -537,11 +537,13 @@ private suspend fun MutableState.checkUserLink(link: String) networkProxy = null ) } + true } else { AlertManager.shared.showAlertMsg( title = generalGetString(MR.strings.invalid_file_link), text = generalGetString(MR.strings.the_text_you_pasted_is_not_a_link) ) + false } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt index e8190e0767..1b5b475b35 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt @@ -12,6 +12,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.views.chatlist.* import chat.simplex.common.views.helpers.* import chat.simplex.res.MR +import kotlinx.coroutines.* import java.net.URI enum class ConnectionLinkType { @@ -26,8 +27,18 @@ suspend fun planAndConnect( cleanup: (() -> Unit)? = null, filterKnownContact: ((Contact) -> Unit)? = null, filterKnownGroup: ((GroupInfo) -> Unit)? = null, -) { - val connectionPlan = chatModel.controller.apiConnectPlan(rhId, uri.toString()) +): CompletableDeferred { + val completable = CompletableDeferred() + val close: (() -> Unit)? = { + close?.invoke() + // if close was called, it means the connection was created + completable.complete(true) + } + val cleanup: (() -> Unit)? = { + cleanup?.invoke() + completable.complete(!completable.isActive) + } + val connectionPlan = chatModel.controller.apiConnectPlan(rhId, uri) if (connectionPlan != null) { val link = strHasSingleSimplexLink(uri.trim()) val linkText = if (link?.format is Format.SimplexLink) @@ -333,6 +344,7 @@ suspend fun planAndConnect( ) } } + return completable } suspend fun connectViaUri( @@ -343,7 +355,7 @@ suspend fun connectViaUri( connectionPlan: ConnectionPlan?, close: (() -> Unit)?, cleanup: (() -> Unit)?, -) { +): Boolean { val pcc = chatModel.controller.apiConnect(rhId, incognito, uri) val connLinkType = if (connectionPlan != null) planToConnectionLinkType(connectionPlan) else ConnectionLinkType.INVITATION if (pcc != null) { @@ -363,6 +375,7 @@ suspend fun connectViaUri( ) } cleanup?.invoke() + return pcc != null } fun planToConnectionLinkType(connectionPlan: ConnectionPlan): ConnectionLinkType { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt index 058c82c2fe..923c0256a8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/NewChatView.kt @@ -38,8 +38,7 @@ import chat.simplex.common.views.chat.topPaddingToContent import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.* import chat.simplex.res.MR -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch +import kotlinx.coroutines.* import java.net.URI enum class NewChatOption { @@ -559,15 +558,14 @@ private fun ConnectView(rhId: Long?, showQRCodeScanner: MutableState, p SectionView(stringResource(MR.strings.or_scan_qr_code).uppercase(), headerBottomPadding = 5.dp) { QRCodeScanner(showQRCodeScanner) { text -> - withBGApi { - val res = verify(rhId, text, close) - if (!res) { - AlertManager.shared.showAlertMsg( - title = generalGetString(MR.strings.invalid_qr_code), - text = generalGetString(MR.strings.code_you_scanned_is_not_simplex_link_qr_code) - ) - } + val linkVerified = verifyOnly(text) + if (!linkVerified) { + AlertManager.shared.showAlertMsg( + title = generalGetString(MR.strings.invalid_qr_code), + text = generalGetString(MR.strings.code_you_scanned_is_not_simplex_link_qr_code) + ) } + verifyAndConnect(rhId, text, close) } } } @@ -656,23 +654,25 @@ private fun filteredProfiles(users: List, searchTextOrPassword: String): L } } -private suspend fun verify(rhId: Long?, text: String?, close: () -> Unit): Boolean { +private fun verifyOnly(text: String?): Boolean = text != null && strIsSimplexLink(text) + +private suspend fun verifyAndConnect(rhId: Long?, text: String?, close: () -> Unit): Boolean { if (text != null && strIsSimplexLink(text)) { - connect(rhId, text, close) - return true + return withContext(Dispatchers.Default) { + connect(rhId, text, close) + } } return false } -private suspend fun connect(rhId: Long?, link: String, close: () -> Unit, cleanup: (() -> Unit)? = null) { +private suspend fun connect(rhId: Long?, link: String, close: () -> Unit, cleanup: (() -> Unit)? = null): Boolean = planAndConnect( rhId, link, close = close, cleanup = cleanup, incognito = null - ) -} + ).await() private fun createInvitation( rhId: Long?, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.kt index 1e497e0581..f368edea1b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.kt @@ -10,5 +10,5 @@ import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF expect fun QRCodeScanner( showQRCodeScanner: MutableState = remember { mutableStateOf(true) }, padding: PaddingValues = PaddingValues(horizontal = DEFAULT_PADDING * 2f, vertical = DEFAULT_PADDING_HALF), - onBarcode: (String) -> Unit + onBarcode: suspend (String) -> Boolean ) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt index c3eed3118e..3b6e176ca3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/remote/ConnectDesktopView.kt @@ -40,6 +40,8 @@ import chat.simplex.res.MR import dev.icerock.moko.resources.ImageResource import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext @Composable fun ConnectDesktopView(close: () -> Unit) { @@ -233,7 +235,7 @@ private fun FoundDesktop( SectionSpacer() if (compatible) { - SectionItemView({ confirmKnownDesktop(sessionAddress, rc) }) { + SectionItemView({ withBGApi { confirmKnownDesktop(sessionAddress, rc) } }) { Icon(painterResource(MR.images.ic_check), generalGetString(MR.strings.connect_button), tint = MaterialTheme.colors.secondary) TextIconSpaced(false) Text(generalGetString(MR.strings.connect_button)) @@ -356,7 +358,7 @@ private fun ScanDesktopAddressView(sessionAddress: MutableState) { SectionView(stringResource(MR.strings.scan_qr_code_from_desktop).uppercase()) { QRCodeScanner { text -> sessionAddress.value = text - processDesktopQRCode(sessionAddress, text) + connectDesktopAddress(sessionAddress, text) } } } @@ -398,7 +400,7 @@ private fun DesktopAddressView(sessionAddress: MutableState) { stringResource(MR.strings.connect_to_desktop), disabled = sessionAddress.value.isEmpty(), click = { - connectDesktopAddress(sessionAddress, sessionAddress.value) + withBGApi { connectDesktopAddress(sessionAddress, sessionAddress.value) } }, ) } @@ -461,10 +463,6 @@ private suspend fun updateRemoteCtrls(remoteCtrls: SnapshotStateList, resp: String) { - connectDesktopAddress(sessionAddress, resp) -} - private fun findKnownDesktop(showConnectScreen: MutableState) { withBGApi { if (controller.findKnownRemoteCtrl()) { @@ -478,45 +476,48 @@ private fun findKnownDesktop(showConnectScreen: MutableState) { } } -private fun confirmKnownDesktop(sessionAddress: MutableState, rc: RemoteCtrlInfo) { - connectDesktop(sessionAddress) { - controller.confirmRemoteCtrl(rc.remoteCtrlId) +private suspend fun confirmKnownDesktop(sessionAddress: MutableState, rc: RemoteCtrlInfo): Boolean { + return withContext(Dispatchers.Default) { + connectDesktop(sessionAddress) { + controller.confirmRemoteCtrl(rc.remoteCtrlId) + } } } -private fun connectDesktopAddress(sessionAddress: MutableState, addr: String) { - connectDesktop(sessionAddress) { - controller.connectRemoteCtrl(addr) +private suspend fun connectDesktopAddress(sessionAddress: MutableState, addr: String): Boolean { + return withContext(Dispatchers.Default) { + connectDesktop(sessionAddress) { + controller.connectRemoteCtrl(addr) + } } } -private fun connectDesktop(sessionAddress: MutableState, connect: suspend () -> Pair) { - withBGApi { - val res = connect() - if (res.first != null) { - val (rc_, ctrlAppInfo, v) = res.first!! - sessionAddress.value = "" - chatModel.remoteCtrlSession.value = RemoteCtrlSession( - ctrlAppInfo = ctrlAppInfo, - appVersion = v, - sessionState = UIRemoteCtrlSessionState.Connecting(remoteCtrl_ = rc_) - ) - } else { - val e = res.second ?: return@withBGApi - when { - e.chatError is ChatError.ChatErrorRemoteCtrl && e.chatError.remoteCtrlError is RemoteCtrlError.BadInvitation -> showBadInvitationErrorAlert() - e.chatError is ChatError.ChatErrorChat && e.chatError.errorType is ChatErrorType.CommandError -> showBadInvitationErrorAlert() - e.chatError is ChatError.ChatErrorRemoteCtrl && e.chatError.remoteCtrlError is RemoteCtrlError.BadVersion -> showBadVersionAlert(v = e.chatError.remoteCtrlError.appVersion) - e.chatError is ChatError.ChatErrorAgent && e.chatError.agentError is AgentErrorType.RCP && e.chatError.agentError.rcpErr is RCErrorType.VERSION -> showBadVersionAlert(v = null) - e.chatError is ChatError.ChatErrorAgent && e.chatError.agentError is AgentErrorType.RCP && e.chatError.agentError.rcpErr is RCErrorType.CTRL_AUTH -> showDesktopDisconnectedErrorAlert() - else -> { - val errMsg = "${e.responseType}: ${e.details}" - Log.e(TAG, "bad response: $errMsg") - AlertManager.shared.showAlertMsg(generalGetString(MR.strings.error), errMsg) - } +private suspend fun connectDesktop(sessionAddress: MutableState, connect: suspend () -> Pair): Boolean { + val res = connect() + if (res.first != null) { + val (rc_, ctrlAppInfo, v) = res.first!! + sessionAddress.value = "" + chatModel.remoteCtrlSession.value = RemoteCtrlSession( + ctrlAppInfo = ctrlAppInfo, + appVersion = v, + sessionState = UIRemoteCtrlSessionState.Connecting(remoteCtrl_ = rc_) + ) + } else { + val e = res.second ?: return false + when { + e.chatError is ChatError.ChatErrorRemoteCtrl && e.chatError.remoteCtrlError is RemoteCtrlError.BadInvitation -> showBadInvitationErrorAlert() + e.chatError is ChatError.ChatErrorChat && e.chatError.errorType is ChatErrorType.CommandError -> showBadInvitationErrorAlert() + e.chatError is ChatError.ChatErrorRemoteCtrl && e.chatError.remoteCtrlError is RemoteCtrlError.BadVersion -> showBadVersionAlert(v = e.chatError.remoteCtrlError.appVersion) + e.chatError is ChatError.ChatErrorAgent && e.chatError.agentError is AgentErrorType.RCP && e.chatError.agentError.rcpErr is RCErrorType.VERSION -> showBadVersionAlert(v = null) + e.chatError is ChatError.ChatErrorAgent && e.chatError.agentError is AgentErrorType.RCP && e.chatError.agentError.rcpErr is RCErrorType.CTRL_AUTH -> showDesktopDisconnectedErrorAlert() + else -> { + val errMsg = "${e.responseType}: ${e.details}" + Log.e(TAG, "bad response: $errMsg") + AlertManager.shared.showAlertMsg(generalGetString(MR.strings.error), errMsg) } } } + return res.first != null } private fun verifyDesktopSessionCode(remoteCtrls: SnapshotStateList, sessCode: String) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt index 56f16d4eb1..d280773976 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/ScanProtocolServer.kt @@ -26,6 +26,7 @@ fun ScanProtocolServerLayout(rhId: Long?, onNext: (UserServer) -> Unit) { text = generalGetString(MR.strings.smp_servers_check_address) ) } + res != null } } } diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.desktop.kt index 0142afb4ac..6ae35e1a41 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.desktop.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.* actual fun QRCodeScanner( showQRCodeScanner: MutableState, padding: PaddingValues, - onBarcode: (String) -> Unit + onBarcode: suspend (String) -> Boolean ) { //LALAL } From 97cd2682d77980849f91a19ffea213952ca51111 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:10:44 +0400 Subject: [PATCH 02/12] core: take address lock before reading contact request data (to prevent possible race condition if user quickly accepts request several times in a row); android, desktop: show error context in agent CMD errors (#5324) --- .../kotlin/chat/simplex/common/model/SimpleXAPI.kt | 4 ++-- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat.hs | 12 +++++++----- src/Simplex/Chat/Store/Direct.hs | 6 ++++++ 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index bd9c3ddc7b..757d80193c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -6498,7 +6498,7 @@ sealed class SQLiteError { @Serializable sealed class AgentErrorType { val string: String get() = when (this) { - is CMD -> "CMD ${cmdErr.string}" + is CMD -> "CMD ${cmdErr.string} $errContext" is CONN -> "CONN ${connErr.string}" is SMP -> "SMP ${smpErr.string}" // is NTF -> "NTF ${ntfErr.string}" @@ -6511,7 +6511,7 @@ sealed class AgentErrorType { is CRITICAL -> "CRITICAL $offerRestart $criticalErr" is INACTIVE -> "INACTIVE" } - @Serializable @SerialName("CMD") class CMD(val cmdErr: CommandErrorType): AgentErrorType() + @Serializable @SerialName("CMD") class CMD(val cmdErr: CommandErrorType, val errContext: String): AgentErrorType() @Serializable @SerialName("CONN") class CONN(val connErr: ConnectionErrorType): AgentErrorType() @Serializable @SerialName("SMP") class SMP(val serverAddress: String, val smpErr: SMPErrorType): AgentErrorType() // @Serializable @SerialName("NTF") class NTF(val ntfErr: SMPErrorType): AgentErrorType() diff --git a/cabal.project b/cabal.project index da9c71587f..3212768506 100644 --- a/cabal.project +++ b/cabal.project @@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: 966b9990e0bf5fdb701f79b6efd722baddd1ee1d + tag: 9893935e7c3cf8d102c85730a4e48d32f05c2ec7 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 3eec88a25b..098851e9ff 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."966b9990e0bf5fdb701f79b6efd722baddd1ee1d" = "0gmycrmyrgy5wbhr3f7qy6hbpppsamfypq7y650dinpbqyrfs9fb"; + "https://github.com/simplex-chat/simplexmq.git"."9893935e7c3cf8d102c85730a4e48d32f05c2ec7" = "1bpgsdnmk8fml6ad9bjbvyichvd0kq0nqj562xyy5y1npymaxpyn"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 516d033ebf..af730e4c06 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -1423,8 +1423,9 @@ processChatCommand' vr = \case CTContactConnection -> pure $ chatCmdError (Just user) "not supported" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" APIAcceptContact incognito connReqId -> withUser $ \_ -> do - (user@User {userId}, cReq@UserContactRequest {userContactLinkId}) <- withFastStore $ \db -> getContactRequest' db connReqId + userContactLinkId <- withFastStore $ \db -> getUserContactLinkIdByCReq db connReqId withUserContactLock "acceptContact" userContactLinkId $ do + (user@User {userId}, cReq) <- withFastStore $ \db -> getContactRequest' db connReqId (ct, conn@Connection {connId}, sqSecured) <- acceptContactRequest user cReq incognito ucl <- withFastStore $ \db -> getUserContactLinkById db userId userContactLinkId let contactUsed = (\(_, groupId_, _) -> isNothing groupId_) ucl @@ -1438,11 +1439,12 @@ processChatCommand' vr = \case pure ct {contactUsed, activeConn = Just conn'} pure $ CRAcceptingContactRequest user ct' APIRejectContact connReqId -> withUser $ \user -> do - cReq@UserContactRequest {userContactLinkId, agentContactConnId = AgentConnId connId, agentInvitationId = AgentInvId invId} <- - withFastStore $ \db -> - getContactRequest db user connReqId - `storeFinally` liftIO (deleteContactRequest db user connReqId) + userContactLinkId <- withFastStore $ \db -> getUserContactLinkIdByCReq db connReqId withUserContactLock "rejectContact" userContactLinkId $ do + cReq@UserContactRequest {agentContactConnId = AgentConnId connId, agentInvitationId = AgentInvId invId} <- + withFastStore $ \db -> + getContactRequest db user connReqId + `storeFinally` liftIO (deleteContactRequest db user connReqId) withAgent $ \a -> rejectContact a connId invId pure $ CRContactRequestRejected user cReq APISendCallInvitation contactId callType -> withUser $ \user -> do diff --git a/src/Simplex/Chat/Store/Direct.hs b/src/Simplex/Chat/Store/Direct.hs index b7759f0905..d5396a0fef 100644 --- a/src/Simplex/Chat/Store/Direct.hs +++ b/src/Simplex/Chat/Store/Direct.hs @@ -57,6 +57,7 @@ module Simplex.Chat.Store.Direct setQuotaErrCounter, getUserContacts, createOrUpdateContactRequest, + getUserContactLinkIdByCReq, getContactRequest', getContactRequest, getContactRequestIdByName, @@ -727,6 +728,11 @@ createOrUpdateContactRequest db vr user@User {userId, userContactId} userContact |] (displayName, fullName, image, contactLink, currentTs, userId, cReqId) +getUserContactLinkIdByCReq :: DB.Connection -> Int64 -> ExceptT StoreError IO Int64 +getUserContactLinkIdByCReq db contactRequestId = + ExceptT . firstRow fromOnly (SEContactRequestNotFound contactRequestId) $ + DB.query db "SELECT user_contact_link_id FROM contact_requests WHERE contact_request_id = ?" (Only contactRequestId) + getContactRequest' :: DB.Connection -> Int64 -> ExceptT StoreError IO (User, UserContactRequest) getContactRequest' db contactRequestId = do user <- getUserByContactRequestId db contactRequestId From 5f66c29dbdbde40fe2f36782fea24eb77576f978 Mon Sep 17 00:00:00 2001 From: Diogo Date: Thu, 5 Dec 2024 16:15:24 +0000 Subject: [PATCH 03/12] ios: fix open from notification and connected directly chat item chat loading (#5326) * ios: fix opening from notification and connected directly chat item chat loading * better fix --- apps/ios/Shared/Model/NtfManager.swift | 6 +++++- apps/ios/Shared/SimpleXApp.swift | 3 ++- .../Views/Chat/ChatItem/CIMemberCreatedContactView.swift | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/ios/Shared/Model/NtfManager.swift b/apps/ios/Shared/Model/NtfManager.swift index b2fa6a0200..6c33031eeb 100644 --- a/apps/ios/Shared/Model/NtfManager.swift +++ b/apps/ios/Shared/Model/NtfManager.swift @@ -26,6 +26,7 @@ enum NtfCallAction { class NtfManager: NSObject, UNUserNotificationCenterDelegate, ObservableObject { static let shared = NtfManager() + public var navigatingToChat = false private var granted = false private var prevNtfTime: Dictionary = [:] @@ -74,7 +75,10 @@ class NtfManager: NSObject, UNUserNotificationCenterDelegate, ObservableObject { } } else { if let chatId = content.targetContentIdentifier { - ItemsModel.shared.loadOpenChat(chatId) + self.navigatingToChat = true + ItemsModel.shared.loadOpenChat(chatId) { + self.navigatingToChat = false + } } } } diff --git a/apps/ios/Shared/SimpleXApp.swift b/apps/ios/Shared/SimpleXApp.swift index 0dd54782b4..10120db185 100644 --- a/apps/ios/Shared/SimpleXApp.swift +++ b/apps/ios/Shared/SimpleXApp.swift @@ -143,7 +143,8 @@ struct SimpleXApp: App { let chats = try await apiGetChatsAsync() await MainActor.run { chatModel.updateChats(chats) } if let id = chatModel.chatId, - let chat = chatModel.getChat(id) { + let chat = chatModel.getChat(id), + !NtfManager.shared.navigatingToChat { Task { await loadChat(chat: chat, clearItems: false) } } if let ncr = chatModel.ntfContactRequest { diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift index e9cd838234..d24c737907 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift @@ -23,7 +23,7 @@ struct CIMemberCreatedContactView: View { .onTapGesture { dismissAllSheets(animated: true) DispatchQueue.main.async { - m.chatId = "@\(contactId)" + ItemsModel.shared.loadOpenChat("@\(contactId)") } } } else { From de76e271a85e9e358a36ca8ce602a5961addf237 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 6 Dec 2024 01:10:36 +0700 Subject: [PATCH 04/12] android, desktop: displaying deleted message with file in chat list (#5329) --- .../chat/simplex/common/views/chatlist/ChatPreviewView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt index 036768c6e7..0e0c3e74f4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt @@ -347,7 +347,7 @@ fun ChatPreviewView( chatItemContentPreview(chat, ci) } if (mc !is MsgContent.MCVoice || !showContentPreview || mc.text.isNotEmpty() || chatModelDraftChatId == chat.id) { - Box(Modifier.offset(x = if (mc is MsgContent.MCFile) -15.sp.toDp() else 0.dp)) { + Box(Modifier.offset(x = if (mc is MsgContent.MCFile && ci.meta.itemDeleted == null) -15.sp.toDp() else 0.dp)) { chatPreviewText() } } From 60e0e454e8b0dcf3fe43c926e160cc39059801d9 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 5 Dec 2024 18:32:00 +0000 Subject: [PATCH 05/12] core: only update business chat preferences (#5325) * core: only update business chat preferences * rework * migration * test, bump protocol version * fix tests --- simplex-chat.cabal | 1 + src/Simplex/Chat.hs | 71 +++++++++++++------ .../M20241205_business_chat_members.hs | 18 +++++ src/Simplex/Chat/Migrations/chat_schema.sql | 3 +- src/Simplex/Chat/Protocol.hs | 16 ++++- src/Simplex/Chat/Store/Connections.hs | 2 +- src/Simplex/Chat/Store/Groups.hs | 52 +++++++++----- src/Simplex/Chat/Store/Migrations.hs | 4 +- src/Simplex/Chat/Store/Shared.hs | 14 ++-- src/Simplex/Chat/Types.hs | 9 +-- tests/ChatTests/Profiles.hs | 59 +++++++++++++-- tests/ProtocolTests.hs | 12 ++-- 12 files changed, 201 insertions(+), 60 deletions(-) create mode 100644 src/Simplex/Chat/Migrations/M20241205_business_chat_members.hs diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 92eea030c0..e23305faf9 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -154,6 +154,7 @@ library Simplex.Chat.Migrations.M20241027_server_operators Simplex.Chat.Migrations.M20241125_indexes Simplex.Chat.Migrations.M20241128_business_chats + Simplex.Chat.Migrations.M20241205_business_chat_members Simplex.Chat.Mobile Simplex.Chat.Mobile.File Simplex.Chat.Mobile.Shared diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index af730e4c06..d5ad68079f 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -2929,11 +2929,22 @@ processChatCommand' vr = \case lift . when (directOrUsed ct') $ createSndFeatureItems user ct ct' pure $ CRContactPrefsUpdated user ct ct' runUpdateGroupProfile :: User -> Group -> GroupProfile -> CM ChatResponse - runUpdateGroupProfile user (Group g@GroupInfo {groupProfile = p@GroupProfile {displayName = n}} ms) p'@GroupProfile {displayName = n'} = do + runUpdateGroupProfile user (Group g@GroupInfo {businessChat, groupProfile = p@GroupProfile {displayName = n}} ms) p'@GroupProfile {displayName = n'} = do assertUserGroupRole g GROwner when (n /= n') $ checkValidName n' g' <- withStore $ \db -> updateGroupProfile db user g p' - msg <- sendGroupMessage user g' ms (XGrpInfo p') + msg <- case businessChat of + Just BusinessChatInfo {businessId} -> do + let (newMs, oldMs) = partition (\m -> maxVersion (memberChatVRange m) >= businessChatPrefsVersion) ms + -- this is a fallback to send the members with the old version correct profile of the business when preferences change + unless (null oldMs) $ do + GroupMember {memberProfile = LocalProfile {displayName, fullName, image}} <- + withStore $ \db -> getGroupMemberByMemberId db vr user g businessId + let p'' = p' {displayName, fullName, image} :: GroupProfile + void $ sendGroupMessage user g' oldMs (XGrpInfo p'') + let ps' = fromMaybe defaultBusinessGroupPrefs $ groupPreferences p' + sendGroupMessage user g' newMs $ XGrpPrefs ps' + Nothing -> sendGroupMessage user g' ms (XGrpInfo p') let cd = CDGroupSnd g' unless (sameGroupProfileInfo p p') $ do ci <- saveSndChatItem user cd msg (CISndGroupEvent $ SGEGroupUpdated p') @@ -3026,7 +3037,7 @@ processChatCommand' vr = \case invitedMember = MemberIdRole memberId memRole, connRequest = cReq, groupProfile, - businessChat, + business = businessChat, groupLinkId = Nothing, groupSize = Just currentMemCount } @@ -4003,7 +4014,7 @@ acceptGroupJoinRequestAsync fromMemberName = displayName, invitedMember = MemberIdRole memberId gLinkMemRole, groupProfile, - businessChat, + business = businessChat, groupSize = Just currentMemCount } subMode <- chatReadVar subscriptionMode @@ -4038,7 +4049,7 @@ acceptBusinessJoinRequestAsync -- This refers to the "title member" that defines the group name and profile. -- This coincides with fromMember to be current user when accepting the connecting user, -- but it will be different when inviting somebody else. - businessChat = Just $ BusinessChatInfo userMemberId BCBusiness, + business = Just $ BusinessChatInfo {chatType = BCBusiness, businessId = userMemberId, customerId = memberId}, groupSize = Just 1 } subMode <- chatReadVar subscriptionMode @@ -5042,7 +5053,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = invitedMember = MemberIdRole memberId memRole, connRequest = cReq, groupProfile, - businessChat = Nothing, + business = Nothing, groupLinkId = groupLinkId, groupSize = Just currentMemCount } @@ -5299,6 +5310,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = XGrpLeave -> xGrpLeave gInfo m' msg brokerTs XGrpDel -> xGrpDel gInfo m' msg brokerTs XGrpInfo p' -> xGrpInfo gInfo m' p' msg brokerTs + XGrpPrefs ps' -> xGrpPrefs gInfo m' ps' XGrpDirectInv connReq mContent_ -> memberCanSend m' $ xGrpDirectInv gInfo m' conn' connReq mContent_ msg brokerTs XGrpMsgForward memberId msg' msgTs -> xGrpMsgForward gInfo m' memberId msg' msgTs XInfoProbe probe -> xInfoProbe (COMGroupMember m') probe @@ -5416,8 +5428,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = let GroupInfo {businessChat} = gInfo GroupMember {memberId = joiningMemberId} = m case businessChat of - Just BusinessChatInfo {memberId, chatType = BCCustomer} - | joiningMemberId == memberId -> useReply <$> withStore (`getUserAddress` user) + Just BusinessChatInfo {customerId, chatType = BCCustomer} + | joiningMemberId == customerId -> useReply <$> withStore (`getUserAddress` user) where useReply UserContactLink {autoAccept} = case autoAccept of Just AutoAccept {businessAddress, autoReply} | businessAddress -> autoReply @@ -6465,7 +6477,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = processMemberProfileUpdate :: GroupInfo -> GroupMember -> Profile -> Bool -> Maybe UTCTime -> CM GroupMember processMemberProfileUpdate gInfo m@GroupMember {memberProfile = p, memberContactId} p' createItems itemTs_ | redactedMemberProfile (fromLocalProfile p) /= redactedMemberProfile p' = do - updateBusinessChatProfile gInfo m + updateBusinessChatProfile gInfo case memberContactId of Nothing -> do m' <- withStore $ \db -> updateMemberProfile db user m p' @@ -6491,11 +6503,14 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = | otherwise = pure m where - updateBusinessChatProfile g@GroupInfo {businessChat} GroupMember {memberId} = case businessChat of - Just BusinessChatInfo {memberId = mId} | mId == memberId -> do + updateBusinessChatProfile g@GroupInfo {businessChat} = case businessChat of + Just bc | isMainBusinessMember bc m -> do g' <- withStore $ \db -> updateGroupProfileFromMember db user g p' toView $ CRGroupUpdated user g g' (Just m) _ -> pure () + isMainBusinessMember BusinessChatInfo {chatType, businessId, customerId} GroupMember {memberId} = case chatType of + BCBusiness -> businessId == memberId + BCCustomer -> customerId == memberId createProfileUpdatedItem m' = when createItems $ do let ciContent = CIRcvGroupEvent $ RGEMemberProfileUpdated (fromLocalProfile p) p' @@ -7008,16 +7023,31 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = toView $ CRGroupDeleted user gInfo {membership = membership {memberStatus = GSMemGroupDeleted}} m xGrpInfo :: GroupInfo -> GroupMember -> GroupProfile -> RcvMessage -> UTCTime -> CM () - xGrpInfo g@GroupInfo {groupProfile = p} m@GroupMember {memberRole} p' msg brokerTs + xGrpInfo g@GroupInfo {groupProfile = p, businessChat} m@GroupMember {memberRole} p' msg brokerTs | memberRole < GROwner = messageError "x.grp.info with insufficient member permissions" - | otherwise = unless (p == p') $ do - g' <- withStore $ \db -> updateGroupProfile db user g p' - toView $ CRGroupUpdated user g g' (Just m) - let cd = CDGroupRcv g' m - unless (sameGroupProfileInfo p p') $ do - ci <- saveRcvChatItem user cd msg brokerTs (CIRcvGroupEvent $ RGEGroupUpdated p') - groupMsgToView g' ci - createGroupFeatureChangedItems user cd CIRcvGroupFeature g g' + | otherwise = case businessChat of + Nothing -> unless (p == p') $ do + g' <- withStore $ \db -> updateGroupProfile db user g p' + toView $ CRGroupUpdated user g g' (Just m) + let cd = CDGroupRcv g' m + unless (sameGroupProfileInfo p p') $ do + ci <- saveRcvChatItem user cd msg brokerTs (CIRcvGroupEvent $ RGEGroupUpdated p') + groupMsgToView g' ci + createGroupFeatureChangedItems user cd CIRcvGroupFeature g g' + Just _ -> updateGroupPrefs_ g m $ fromMaybe defaultBusinessGroupPrefs $ groupPreferences p' + + xGrpPrefs :: GroupInfo -> GroupMember -> GroupPreferences -> CM () + xGrpPrefs g m@GroupMember {memberRole} ps' + | memberRole < GROwner = messageError "x.grp.prefs with insufficient member permissions" + | otherwise = updateGroupPrefs_ g m ps' + + updateGroupPrefs_ :: GroupInfo -> GroupMember -> GroupPreferences -> CM () + updateGroupPrefs_ g@GroupInfo {groupProfile = p} m ps' = + unless (groupPreferences p == Just ps') $ do + g' <- withStore' $ \db -> updateGroupPreferences db user g ps' + toView $ CRGroupUpdated user g g' (Just m) + let cd = CDGroupRcv g' m + createGroupFeatureChangedItems user cd CIRcvGroupFeature g g' xGrpDirectInv :: GroupInfo -> GroupMember -> Connection -> ConnReqInvitation -> Maybe MsgContent -> RcvMessage -> UTCTime -> CM () xGrpDirectInv g m mConn connReq mContent_ msg brokerTs = do @@ -7098,6 +7128,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = XGrpLeave -> xGrpLeave gInfo author rcvMsg msgTs XGrpDel -> xGrpDel gInfo author rcvMsg msgTs XGrpInfo p' -> xGrpInfo gInfo author p' rcvMsg msgTs + XGrpPrefs ps' -> xGrpPrefs gInfo author ps' _ -> messageError $ "x.grp.msg.forward: unsupported forwarded event " <> T.pack (show $ toCMEventTag event) createUnknownMember :: GroupInfo -> MemberId -> CM GroupMember diff --git a/src/Simplex/Chat/Migrations/M20241205_business_chat_members.hs b/src/Simplex/Chat/Migrations/M20241205_business_chat_members.hs new file mode 100644 index 0000000000..5d019d73e1 --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20241205_business_chat_members.hs @@ -0,0 +1,18 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20241205_business_chat_members where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20241205_business_chat_members :: Query +m20241205_business_chat_members = + [sql| +ALTER TABLE groups ADD COLUMN customer_member_id BLOB NULL; +|] + +down_m20241205_business_chat_members :: Query +down_m20241205_business_chat_members = + [sql| +ALTER TABLE groups DROP COLUMN customer_member_id; +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 621c28f91e..94ccc65b7f 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -130,7 +130,8 @@ CREATE TABLE groups( ui_themes TEXT, business_member_id BLOB NULL, business_chat TEXT NULL, - business_xcontact_id BLOB NULL, -- received + business_xcontact_id BLOB NULL, + customer_member_id BLOB NULL, -- received FOREIGN KEY(user_id, local_display_name) REFERENCES display_names(user_id, local_display_name) ON DELETE CASCADE diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index 8afefdc850..934f23007d 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -46,6 +46,7 @@ import Database.SQLite.Simple.FromField (FromField (..)) import Database.SQLite.Simple.ToField (ToField (..)) import Simplex.Chat.Call import Simplex.Chat.Types +import Simplex.Chat.Types.Preferences import Simplex.Chat.Types.Shared import Simplex.Messaging.Agent.Protocol (VersionSMPA, pqdrSMPAgentVersion) import Simplex.Messaging.Compression (Compressed, compress1, decompress1) @@ -67,12 +68,13 @@ import Simplex.Messaging.Version hiding (version) -- 8 - compress messages and PQ e2e encryption (2024-03-08) -- 9 - batch sending in direct connections (2024-07-24) -- 10 - business chats (2024-11-29) +-- 11 - fix profile update in business chats (2024-12-05) -- This should not be used directly in code, instead use `maxVersion chatVRange` from ChatConfig. -- This indirection is needed for backward/forward compatibility testing. -- Testing with real app versions is still needed, as tests use the current code with different version ranges, not the old code. currentChatVersion :: VersionChat -currentChatVersion = VersionChat 10 +currentChatVersion = VersionChat 11 -- This should not be used directly in code, instead use `chatVRange` from ChatConfig (see comment above) supportedChatVRange :: VersionRangeChat @@ -115,6 +117,10 @@ batchSend2Version = VersionChat 9 businessChatsVersion :: VersionChat businessChatsVersion = VersionChat 10 +-- support updating preferences in business chats (XGrpPrefs message) +businessChatPrefsVersion :: VersionChat +businessChatPrefsVersion = VersionChat 11 + agentToChatVersion :: VersionSMPA -> VersionChat agentToChatVersion v | v < pqdrSMPAgentVersion = initialChatVersion @@ -299,6 +305,7 @@ data ChatMsgEvent (e :: MsgEncoding) where XGrpLeave :: ChatMsgEvent 'Json XGrpDel :: ChatMsgEvent 'Json XGrpInfo :: GroupProfile -> ChatMsgEvent 'Json + XGrpPrefs :: GroupPreferences -> ChatMsgEvent 'Json XGrpDirectInv :: ConnReqInvitation -> Maybe MsgContent -> ChatMsgEvent 'Json XGrpMsgForward :: MemberId -> ChatMessage 'Json -> UTCTime -> ChatMsgEvent 'Json XInfoProbe :: Probe -> ChatMsgEvent 'Json @@ -339,6 +346,7 @@ isForwardedGroupMsg ev = case ev of XGrpLeave -> True XGrpDel -> True -- TODO there should be a special logic - host should forward before deleting connections XGrpInfo _ -> True + XGrpPrefs _ -> True _ -> False forwardedGroupMsg :: forall e. MsgEncodingI e => ChatMessage e -> Maybe (ChatMessage 'Json) @@ -721,6 +729,7 @@ data CMEventTag (e :: MsgEncoding) where XGrpLeave_ :: CMEventTag 'Json XGrpDel_ :: CMEventTag 'Json XGrpInfo_ :: CMEventTag 'Json + XGrpPrefs_ :: CMEventTag 'Json XGrpDirectInv_ :: CMEventTag 'Json XGrpMsgForward_ :: CMEventTag 'Json XInfoProbe_ :: CMEventTag 'Json @@ -771,6 +780,7 @@ instance MsgEncodingI e => StrEncoding (CMEventTag e) where XGrpLeave_ -> "x.grp.leave" XGrpDel_ -> "x.grp.del" XGrpInfo_ -> "x.grp.info" + XGrpPrefs_ -> "x.grp.prefs" XGrpDirectInv_ -> "x.grp.direct.inv" XGrpMsgForward_ -> "x.grp.msg.forward" XInfoProbe_ -> "x.info.probe" @@ -822,6 +832,7 @@ instance StrEncoding ACMEventTag where "x.grp.leave" -> XGrpLeave_ "x.grp.del" -> XGrpDel_ "x.grp.info" -> XGrpInfo_ + "x.grp.prefs" -> XGrpPrefs_ "x.grp.direct.inv" -> XGrpDirectInv_ "x.grp.msg.forward" -> XGrpMsgForward_ "x.info.probe" -> XInfoProbe_ @@ -869,6 +880,7 @@ toCMEventTag msg = case msg of XGrpLeave -> XGrpLeave_ XGrpDel -> XGrpDel_ XGrpInfo _ -> XGrpInfo_ + XGrpPrefs _ -> XGrpPrefs_ XGrpDirectInv _ _ -> XGrpDirectInv_ XGrpMsgForward {} -> XGrpMsgForward_ XInfoProbe _ -> XInfoProbe_ @@ -969,6 +981,7 @@ appJsonToCM AppMessageJson {v, msgId, event, params} = do XGrpLeave_ -> pure XGrpLeave XGrpDel_ -> pure XGrpDel XGrpInfo_ -> XGrpInfo <$> p "groupProfile" + XGrpPrefs_ -> XGrpPrefs <$> p "groupPreferences" XGrpDirectInv_ -> XGrpDirectInv <$> p "connReq" <*> opt "content" XGrpMsgForward_ -> XGrpMsgForward <$> p "memberId" <*> p "msg" <*> p "msgTs" XInfoProbe_ -> XInfoProbe <$> p "probe" @@ -1030,6 +1043,7 @@ chatToAppMessage ChatMessage {chatVRange, msgId, chatMsgEvent} = case encoding @ XGrpLeave -> JM.empty XGrpDel -> JM.empty XGrpInfo p -> o ["groupProfile" .= p] + XGrpPrefs p -> o ["groupPreferences" .= p] XGrpDirectInv connReq content -> o $ ("content" .=? content) ["connReq" .= connReq] XGrpMsgForward memberId msg msgTs -> o ["memberId" .= memberId, "msg" .= msg, "msgTs" .= msgTs] XInfoProbe probe -> o ["probe" .= probe] diff --git a/src/Simplex/Chat/Store/Connections.hs b/src/Simplex/Chat/Store/Connections.hs index fe52c6d7b7..db787b0112 100644 --- a/src/Simplex/Chat/Store/Connections.hs +++ b/src/Simplex/Chat/Store/Connections.hs @@ -123,7 +123,7 @@ getConnectionEntity db vr user@User {userId, userContactId} agentConnId = do -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_chat, g.business_member_id, g.customer_member_id, g.ui_themes, g.custom_data, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index 895acf0a7d..49158a60c9 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -39,6 +39,7 @@ module Simplex.Chat.Store.Groups getGroupInfoByUserContactLinkConnReq, getGroupInfoByGroupLinkHash, updateGroupProfile, + updateGroupPreferences, updateGroupProfileFromMember, getGroupIdByName, getGroupMemberIdByName, @@ -257,7 +258,7 @@ getGroupAndMember db User {userId, userContactId} groupMemberId vr = -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_chat, g.business_member_id, g.customer_member_id, g.ui_themes, g.custom_data, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, @@ -339,7 +340,7 @@ createNewGroup db vr gVar user@User {userId} groupProfile incognitoProfile = Exc -- | creates a new group record for the group the current user was invited to, or returns an existing one createGroupInvitation :: DB.Connection -> VersionRangeChat -> User -> Contact -> GroupInvitation -> Maybe ProfileId -> ExceptT StoreError IO (GroupInfo, GroupMemberId) createGroupInvitation _ _ _ Contact {localDisplayName, activeConn = Nothing} _ _ = throwError $ SEContactNotReady localDisplayName -createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activeConn = Just Connection {customUserProfileId, peerChatVRange}} GroupInvitation {fromMember, invitedMember, connRequest, groupProfile, businessChat} incognitoProfileId = do +createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activeConn = Just Connection {customUserProfileId, peerChatVRange}} GroupInvitation {fromMember, invitedMember, connRequest, groupProfile, business} incognitoProfileId = do liftIO getInvitationGroupId_ >>= \case Nothing -> createGroupInvitation_ Just gId -> do @@ -377,10 +378,10 @@ createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activ [sql| INSERT INTO groups (group_profile_id, local_display_name, inv_queue_info, host_conn_custom_user_profile_id, user_id, enable_ntfs, - created_at, updated_at, chat_ts, user_member_profile_sent_at, business_member_id, business_chat) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?) + created_at, updated_at, chat_ts, user_member_profile_sent_at, business_chat, business_member_id, customer_member_id) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) |] - ((profileId, localDisplayName, connRequest, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) :. businessChatTuple businessChat) + ((profileId, localDisplayName, connRequest, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) :. businessChatInfoRow business) insertedRowId db let hostVRange = adjustedMemberVRange vr peerChatVRange GroupMember {groupMemberId} <- createContactMemberInv_ db user groupId Nothing contact fromMember GCHostMember GSMemInvited IBUnknown Nothing currentTs hostVRange @@ -406,10 +407,10 @@ createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activ groupMemberId ) -businessChatTuple :: Maybe BusinessChatInfo -> (Maybe MemberId, Maybe BusinessChatType) -businessChatTuple = \case - Just BusinessChatInfo {memberId, chatType} -> (Just memberId, Just chatType) - Nothing -> (Nothing, Nothing) +businessChatInfoRow :: Maybe BusinessChatInfo -> BusinessChatInfoRow +businessChatInfoRow = \case + Just BusinessChatInfo {chatType, businessId, customerId} -> (Just chatType, Just businessId, Just customerId) + Nothing -> (Nothing, Nothing, Nothing) adjustedMemberVRange :: VersionRangeChat -> VersionRangeChat -> VersionRangeChat adjustedMemberVRange chatVR vr@(VersionRange minV maxV) = @@ -497,7 +498,7 @@ createGroupInvitedViaLink vr user@User {userId, userContactId} Connection {connId, customUserProfileId} - GroupLinkInvitation {fromMember, fromMemberName, invitedMember, groupProfile, businessChat} = do + GroupLinkInvitation {fromMember, fromMemberName, invitedMember, groupProfile, business} = do currentTs <- liftIO getCurrentTime groupId <- insertGroup_ currentTs hostMemberId <- insertHost_ currentTs groupId @@ -521,10 +522,10 @@ createGroupInvitedViaLink [sql| INSERT INTO groups (group_profile_id, local_display_name, host_conn_custom_user_profile_id, user_id, enable_ntfs, - created_at, updated_at, chat_ts, user_member_profile_sent_at, business_member_id, business_chat) - VALUES (?,?,?,?,?,?,?,?,?,?,?) + created_at, updated_at, chat_ts, user_member_profile_sent_at, business_chat, business_member_id, customer_member_id) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?) |] - ((profileId, localDisplayName, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) :. businessChatTuple businessChat) + ((profileId, localDisplayName, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) :. businessChatInfoRow business) insertedRowId db insertHost_ currentTs groupId = do let fromMemberProfile = profileFromName fromMemberName @@ -631,7 +632,7 @@ getUserGroupDetails db vr User {userId, userContactId} _contactId_ search_ = SELECT g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_chat, g.business_member_id, g.customer_member_id, g.ui_themes, g.custom_data, mu.group_member_id, g.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences FROM groups g @@ -918,9 +919,9 @@ createBusinessRequestGroup UserContactRequest {cReqChatVRange, xContactId, profile = Profile {displayName, fullName, image, contactLink, preferences}} groupPreferences = do currentTs <- liftIO getCurrentTime - (groupId, membership) <- insertGroup_ currentTs + (groupId, membership@GroupMember {memberId = userMemberId}) <- insertGroup_ currentTs (groupMemberId, memberId) <- insertClientMember_ currentTs groupId membership - liftIO $ DB.execute db "UPDATE groups SET business_member_id = ? WHERE group_id = ?" (memberId, groupId) + liftIO $ DB.execute db "UPDATE groups SET business_member_id = ?, customer_member_id = ? WHERE group_id = ?" (userMemberId, memberId, groupId) groupInfo <- getGroupInfo db vr user groupId clientMember <- getGroupMemberById db vr user groupMemberId pure (groupInfo, clientMember) @@ -1370,7 +1371,7 @@ getViaGroupMember db vr User {userId, userContactId} Contact {contactId} = -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_chat, g.business_member_id, g.customer_member_id, g.ui_themes, g.custom_data, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, @@ -1456,6 +1457,23 @@ updateGroupProfile db user@User {userId} g@GroupInfo {groupId, localDisplayName, (ldn, currentTs, userId, groupId) safeDeleteLDN db user localDisplayName +updateGroupPreferences :: DB.Connection -> User -> GroupInfo -> GroupPreferences -> IO GroupInfo +updateGroupPreferences db User {userId} g@GroupInfo {groupId, groupProfile = p} ps = do + currentTs <- getCurrentTime + DB.execute + db + [sql| + UPDATE group_profiles + SET preferences = ?, updated_at = ? + WHERE group_profile_id IN ( + SELECT group_profile_id + FROM groups + WHERE user_id = ? AND group_id = ? + ) + |] + (ps, currentTs, userId, groupId) + pure (g :: GroupInfo) {groupProfile = p {groupPreferences = Just ps}} + updateGroupProfileFromMember :: DB.Connection -> User -> GroupInfo -> Profile -> ExceptT StoreError IO GroupInfo updateGroupProfileFromMember db user g@GroupInfo {groupId} Profile {displayName = n, fullName = fn, image = img} = do p <- getGroupProfile -- to avoid any race conditions with UI diff --git a/src/Simplex/Chat/Store/Migrations.hs b/src/Simplex/Chat/Store/Migrations.hs index 6654dec034..65fe8223fe 100644 --- a/src/Simplex/Chat/Store/Migrations.hs +++ b/src/Simplex/Chat/Store/Migrations.hs @@ -118,6 +118,7 @@ import Simplex.Chat.Migrations.M20241023_chat_item_autoincrement_id import Simplex.Chat.Migrations.M20241027_server_operators import Simplex.Chat.Migrations.M20241125_indexes import Simplex.Chat.Migrations.M20241128_business_chats +import Simplex.Chat.Migrations.M20241205_business_chat_members import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..)) schemaMigrations :: [(String, Query, Maybe Query)] @@ -235,7 +236,8 @@ schemaMigrations = ("20241023_chat_item_autoincrement_id", m20241023_chat_item_autoincrement_id, Just down_m20241023_chat_item_autoincrement_id), ("20241027_server_operators", m20241027_server_operators, Just down_m20241027_server_operators), ("20241125_indexes", m20241125_indexes, Just down_m20241125_indexes), - ("20241128_business_chats", m20241128_business_chats, Just down_m20241128_business_chats) + ("20241128_business_chats", m20241128_business_chats, Just down_m20241128_business_chats), + ("20241205_business_chat_members", m20241205_business_chat_members, Just down_m20241205_business_chat_members) ] -- | The list of migrations in ascending order by date diff --git a/src/Simplex/Chat/Store/Shared.hs b/src/Simplex/Chat/Store/Shared.hs index b00ba5705f..851078ec1f 100644 --- a/src/Simplex/Chat/Store/Shared.hs +++ b/src/Simplex/Chat/Store/Shared.hs @@ -546,17 +546,19 @@ safeDeleteLDN db User {userId} localDisplayName = do |] (userId, localDisplayName, userId) -type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime, Maybe MemberId, Maybe BusinessChatType, Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow +type BusinessChatInfoRow = (Maybe BusinessChatType, Maybe MemberId, Maybe MemberId) + +type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime) :. BusinessChatInfoRow :. (Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow type GroupMemberRow = ((Int64, Int64, MemberId, VersionChat, VersionChat, GroupMemberRole, GroupMemberCategory, GroupMemberStatus, Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, ContactName, Maybe ContactId, ProfileId, ProfileId, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Preferences)) toGroupInfo :: VersionRangeChat -> Int64 -> GroupInfoRow -> GroupInfo -toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, description, image, hostConnCustomUserProfileId, enableNtfs_, sendRcpts, favorite, groupPreferences) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt, businessMemberId, businessChatType, uiThemes, customData) :. userMemberRow) = +toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, description, image, hostConnCustomUserProfileId, enableNtfs_, sendRcpts, favorite, groupPreferences) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt) :. businessRow :. (uiThemes, customData) :. userMemberRow) = let membership = (toGroupMember userContactId userMemberRow) {memberChatVRange = vr} chatSettings = ChatSettings {enableNtfs = fromMaybe MFAll enableNtfs_, sendRcpts, favorite} fullGroupPreferences = mergeGroupPreferences groupPreferences groupProfile = GroupProfile {displayName, fullName, description, image, groupPreferences} - businessChat = BusinessChatInfo <$> businessMemberId <*> businessChatType + businessChat = toBusinessChatInfo businessRow in GroupInfo {groupId, localDisplayName, groupProfile, businessChat, fullGroupPreferences, membership, hostConnCustomUserProfileId, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt, uiThemes, customData} toGroupMember :: Int64 -> GroupMemberRow -> GroupMember @@ -569,6 +571,10 @@ toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberChatVRange = fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer in GroupMember {..} +toBusinessChatInfo :: BusinessChatInfoRow -> Maybe BusinessChatInfo +toBusinessChatInfo (Just chatType, Just businessId, Just customerId) = Just BusinessChatInfo {chatType, businessId, customerId} +toBusinessChatInfo _ = Nothing + groupInfoQuery :: Query groupInfoQuery = [sql| @@ -576,7 +582,7 @@ groupInfoQuery = -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_chat, g.business_member_id, g.customer_member_id, g.ui_themes, g.custom_data, -- GroupMember - membership mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index ec8f546d2f..77a02a4bc1 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -617,7 +617,7 @@ data GroupInvitation = GroupInvitation invitedMember :: MemberIdRole, connRequest :: ConnReqInvitation, groupProfile :: GroupProfile, - businessChat :: Maybe BusinessChatInfo, + business :: Maybe BusinessChatInfo, groupLinkId :: Maybe GroupLinkId, groupSize :: Maybe Int } @@ -628,7 +628,7 @@ data GroupLinkInvitation = GroupLinkInvitation fromMemberName :: ContactName, invitedMember :: MemberIdRole, groupProfile :: GroupProfile, - businessChat :: Maybe BusinessChatInfo, + business :: Maybe BusinessChatInfo, groupSize :: Maybe Int } deriving (Eq, Show) @@ -654,8 +654,9 @@ data MemberInfo = MemberInfo deriving (Eq, Show) data BusinessChatInfo = BusinessChatInfo - { memberId :: MemberId, - chatType :: BusinessChatType + { chatType :: BusinessChatType, + businessId :: MemberId, + customerId :: MemberId } deriving (Eq, Show) diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index ebfeecdbca..2bf157419c 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -734,8 +734,8 @@ testBusinessAddress = testChat3 businessProfile aliceProfile {fullName = "Alice (biz <# "#bob bob_1> hey there") testBusinessUpdateProfiles :: HasCallStack => FilePath -> IO () -testBusinessUpdateProfiles = testChat3 businessProfile aliceProfile bobProfile $ - \biz alice bob -> do +testBusinessUpdateProfiles = testChat4 businessProfile aliceProfile bobProfile cathProfile $ + \biz alice bob cath -> do biz ##> "/ad" cLink <- getContactLink biz True biz ##> "/auto_accept on business text Welcome" @@ -794,9 +794,37 @@ testBusinessUpdateProfiles = testChat3 businessProfile aliceProfile bobProfile $ bob #> "#biz hi there" -- profile update is sent to group with message alice <# "#biz robert> hi there" biz <# "#alisa robert> hi there" + -- add business team member + connectUsers biz cath + biz ##> "/a #alisa cath" + biz <## "invitation to join the group #alisa sent to cath" + cath <## "#alisa: biz invites you to join the group as member" + cath <## "use /j alisa to accept" + cath ##> "/j alisa" + concurrentlyN_ + [ do + cath <## "#alisa: you joined the group" + cath + <### + [ WithTime "#alisa biz> Welcome [>>]", + WithTime "#alisa biz> hi [>>]", + WithTime "#alisa alisa_1> hello [>>]", + WithTime "#alisa alisa_1> hello again [>>]", + WithTime "#alisa robert> hi there [>>]" + ] + cath <## "#alisa: member alisa_1 is connected" + cath <## "#alisa: member robert is connected", + biz <## "#alisa: cath joined the group", + do + alice <## "#biz: biz_1 added cath (Catherine) to the group (connecting...)" + alice <## "#biz: new member cath is connected", + do + bob <## "#biz: biz_1 added cath (Catherine) to the group (connecting...)" + bob <## "#biz: new member cath is connected" + ] -- both customers receive business profile change biz ##> "/p business" - biz <## "user profile is changed to business (your 0 contacts are notified)" + biz <## "user profile is changed to business (your 1 contacts are notified)" biz #> "#alisa hey" concurrentlyN_ [ do @@ -806,7 +834,28 @@ testBusinessUpdateProfiles = testChat3 businessProfile aliceProfile bobProfile $ do bob <## "biz_1 updated group #biz:" bob <## "changed to #business" - bob <# "#business business_1> hey" + bob <# "#business business_1> hey", + do + cath <## "contact biz changed to business" + cath <## "use @business to send messages" + cath <# "#alisa business> hey" + ] + biz ##> "/set voice #alisa on" + biz <## "updated group preferences:" + biz <## "Voice messages: on" + concurrentlyN_ + [ do + alice <## "business_1 updated group #business:" + alice <## "updated group preferences:" + alice <## "Voice messages: on", + do + bob <## "business_1 updated group #business:" + bob <## "updated group preferences:" + bob <## "Voice messages: on", + do + cath <## "business updated group #alisa:" + cath <## "updated group preferences:" + cath <## "Voice messages: on" ] testPlanAddressOkKnown :: HasCallStack => FilePath -> IO () @@ -2512,7 +2561,7 @@ testSetUITheme = a <## "you've shared main profile with this contact" a <## "connection not verified, use /code command to see security code" a <## "quantum resistant end-to-end encryption" - a <## "peer chat protocol version range: (Version 1, Version 10)" + a <## "peer chat protocol version range: (Version 1, Version 11)" groupInfo a = do a <## "group ID: 1" a <## "current members: 1" diff --git a/tests/ProtocolTests.hs b/tests/ProtocolTests.hs index 2eb946d731..523df81ade 100644 --- a/tests/ProtocolTests.hs +++ b/tests/ProtocolTests.hs @@ -133,7 +133,7 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do "{\"v\":\"1\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello\",\"type\":\"text\"}}}" ##==## ChatMessage chatInitialVRange (Just $ SharedMsgId "\1\2\3\4") (XMsgNew (MCSimple (extMsgContent (MCText "hello") Nothing))) it "x.msg.new chat message with chat version range" $ - "{\"v\":\"1-10\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello\",\"type\":\"text\"}}}" + "{\"v\":\"1-11\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello\",\"type\":\"text\"}}}" ##==## ChatMessage supportedChatVRange (Just $ SharedMsgId "\1\2\3\4") (XMsgNew (MCSimple (extMsgContent (MCText "hello") Nothing))) it "x.msg.new quote" $ "{\"v\":\"1\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello to you too\",\"type\":\"text\"},\"quote\":{\"content\":{\"text\":\"hello there!\",\"type\":\"text\"},\"msgRef\":{\"msgId\":\"BQYHCA==\",\"sent\":true,\"sentAt\":\"1970-01-01T00:00:01.000000001Z\"}}}}" @@ -232,10 +232,10 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do ==# XContact testProfile Nothing it "x.grp.inv" $ "{\"v\":\"1\",\"event\":\"x.grp.inv\",\"params\":{\"groupInvitation\":{\"connRequest\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"invitedMember\":{\"memberRole\":\"member\",\"memberId\":\"BQYHCA==\"},\"groupProfile\":{\"fullName\":\"Team\",\"displayName\":\"team\",\"groupPreferences\":{\"reactions\":{\"enable\":\"on\"},\"voice\":{\"enable\":\"on\"}}},\"fromMember\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\"}}}}" - #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, businessChat = Nothing, groupLinkId = Nothing, groupSize = Nothing} + #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, business = Nothing, groupLinkId = Nothing, groupSize = Nothing} it "x.grp.inv with group link id" $ "{\"v\":\"1\",\"event\":\"x.grp.inv\",\"params\":{\"groupInvitation\":{\"connRequest\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"invitedMember\":{\"memberRole\":\"member\",\"memberId\":\"BQYHCA==\"},\"groupProfile\":{\"fullName\":\"Team\",\"displayName\":\"team\",\"groupPreferences\":{\"reactions\":{\"enable\":\"on\"},\"voice\":{\"enable\":\"on\"}}},\"fromMember\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\"}, \"groupLinkId\":\"AQIDBA==\"}}}" - #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, businessChat = Nothing, groupLinkId = Just $ GroupLinkId "\1\2\3\4", groupSize = Nothing} + #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, business = Nothing, groupLinkId = Just $ GroupLinkId "\1\2\3\4", groupSize = Nothing} it "x.grp.acpt without incognito profile" $ "{\"v\":\"1\",\"event\":\"x.grp.acpt\",\"params\":{\"memberId\":\"AQIDBA==\"}}" #==# XGrpAcpt (MemberId "\1\2\3\4") @@ -243,13 +243,13 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do "{\"v\":\"1\",\"event\":\"x.grp.mem.new\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemNew MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} it "x.grp.mem.new with member chat version range" $ - "{\"v\":\"1\",\"event\":\"x.grp.mem.new\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-10\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" + "{\"v\":\"1\",\"event\":\"x.grp.mem.new\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-11\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemNew MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} it "x.grp.mem.intro" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} Nothing it "x.grp.mem.intro with member chat version range" $ - "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-10\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" + "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-11\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} Nothing it "x.grp.mem.intro with member restrictions" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberRestrictions\":{\"restriction\":\"blocked\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" @@ -264,7 +264,7 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do "{\"v\":\"1\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"directConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemFwd MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} IntroInvitation {groupConnReq = testConnReq, directConnReq = Just testConnReq} it "x.grp.mem.fwd with member chat version range and w/t directConnReq" $ - "{\"v\":\"1\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-10\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" + "{\"v\":\"1\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-11\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemFwd MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} IntroInvitation {groupConnReq = testConnReq, directConnReq = Nothing} it "x.grp.mem.info" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.info\",\"params\":{\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}" From e9bf229a9d374b4be72074a698f2d27b99db11de Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 5 Dec 2024 18:36:07 +0000 Subject: [PATCH 06/12] core: 6.2.0.6 --- package.yaml | 2 +- simplex-chat.cabal | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.yaml b/package.yaml index 8752a141f7..b9c41ccdc0 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 6.2.0.5 +version: 6.2.0.6 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/simplex-chat.cabal b/simplex-chat.cabal index e23305faf9..ace5afd851 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: simplex-chat -version: 6.2.0.5 +version: 6.2.0.6 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat From 69e23ad58ffc32509cebaf0749b22ef4486206d1 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:45:19 +0400 Subject: [PATCH 07/12] android, desktop: don't show unwanted notifications (#5328) * android, desktop: don't show unwanted notifications * format * fix * code style --------- Co-authored-by: Avently <7953703+avently@users.noreply.github.com> --- .../chat/simplex/common/model/SimpleXAPI.kt | 16 +++++++++++----- .../chat/simplex/common/platform/NtfManager.kt | 14 +++++++++++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 757d80193c..94ce22d356 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -2436,9 +2436,7 @@ object ChatController { ) { receiveFile(rhId, r.user, file.fileId, auto = true) } - if (cItem.showNotification && (allowedToShowNotification() || chatModel.chatId.value != cInfo.id || chatModel.remoteHostId() != rhId)) { - ntfManager.notifyMessageReceived(r.user, cInfo, cItem) - } + ntfManager.notifyMessageReceived(rhId, r.user, cInfo, cItem) } } is CR.ChatItemsStatusesUpdated -> @@ -2452,7 +2450,7 @@ object ChatController { } } is CR.ChatItemUpdated -> - chatItemSimpleUpdate(rhId, r.user, r.chatItem) + chatItemUpdateNotify(rhId, r.user, r.chatItem) is CR.ChatItemReaction -> { if (active(r.user)) { withChats { @@ -2950,9 +2948,17 @@ object ChatController { } private suspend fun chatItemSimpleUpdate(rh: Long?, user: UserLike, aChatItem: AChatItem) { + if (activeUser(rh, user)) { + val cInfo = aChatItem.chatInfo + val cItem = aChatItem.chatItem + withChats { upsertChatItem(rh, cInfo, cItem) } + } + } + + private suspend fun chatItemUpdateNotify(rh: Long?, user: UserLike, aChatItem: AChatItem) { val cInfo = aChatItem.chatInfo val cItem = aChatItem.chatItem - val notify = { ntfManager.notifyMessageReceived(user, cInfo, cItem) } + val notify = { ntfManager.notifyMessageReceived(rh, user, cInfo, cItem) } if (!activeUser(rh, user)) { notify() } else if (withChats { upsertChatItem(rh, cInfo, cItem) }) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt index 1f1cb45d48..51d26f8ff2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt @@ -36,9 +36,17 @@ abstract class NtfManager { ) ) - fun notifyMessageReceived(user: UserLike, cInfo: ChatInfo, cItem: ChatItem) { - if (!cInfo.ntfsEnabled) return - displayNotification(user = user, chatId = cInfo.id, displayName = cInfo.displayName, msgText = hideSecrets(cItem)) + fun notifyMessageReceived(rhId: Long?, user: UserLike, cInfo: ChatInfo, cItem: ChatItem) { + if ( + cItem.showNotification && + cInfo.ntfsEnabled && + ( + allowedToShowNotification() || + chatModel.chatId.value != cInfo.id || + chatModel.remoteHostId() != rhId) + ) { + displayNotification(user = user, chatId = cInfo.id, displayName = cInfo.displayName, msgText = hideSecrets(cItem)) + } } fun acceptContactRequestAction(userId: Long?, incognito: Boolean, chatId: ChatId) { From ff504702de112206b9a10a752f079e6218d02c25 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 5 Dec 2024 21:42:53 +0000 Subject: [PATCH 08/12] ui: translations (#5330) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (German) Currently translated at 97.5% (2155 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (French) Currently translated at 93.2% (2060 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (Italian) Currently translated at 97.5% (2155 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Spanish) Currently translated at 97.6% (2157 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Dutch) Currently translated at 97.5% (2154 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 92.3% (2041 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/ * Translated using Weblate (Arabic) Currently translated at 97.4% (2153 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Ukrainian) Currently translated at 97.5% (2155 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/ * Translated using Weblate (Polish) Currently translated at 93.2% (2059 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Russian) Currently translated at 93.2% (2061 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 97.4% (2154 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/ * Translated using Weblate (Italian) Currently translated at 98.9% (2187 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 99.5% (2201 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Russian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Russian) Currently translated at 96.6% (1868 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (Italian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Indonesian) Currently translated at 60.0% (1326 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/id/ * Translated using Weblate (Russian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Russian) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (German) Currently translated at 97.5% (2155 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (French) Currently translated at 93.2% (2060 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (Italian) Currently translated at 97.5% (2155 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Spanish) Currently translated at 97.6% (2157 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Dutch) Currently translated at 97.5% (2154 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 92.3% (2041 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/ * Translated using Weblate (Arabic) Currently translated at 97.4% (2153 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Ukrainian) Currently translated at 97.5% (2155 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/ * Translated using Weblate (Polish) Currently translated at 93.2% (2059 of 2209 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Russian) Currently translated at 93.2% (2061 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 97.4% (2154 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/ * Translated using Weblate (Italian) Currently translated at 98.9% (2187 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 99.5% (2201 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Russian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Russian) Currently translated at 96.6% (1868 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (Italian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Indonesian) Currently translated at 60.0% (1326 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/id/ * Translated using Weblate (Russian) Currently translated at 100.0% (2210 of 2210 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Russian) Currently translated at 100.0% (1932 of 1932 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * process localizations * update translations --------- Co-authored-by: Anonymous Co-authored-by: 大王叫我来巡山 Co-authored-by: M1K4 Co-authored-by: summoner001 Co-authored-by: Random Co-authored-by: Rafi --- .../Onboarding/ChooseServerOperators.swift | 2 +- .../Onboarding/SetNotificationsMode.swift | 3 +- .../NetworkAndServers/OperatorView.swift | 2 +- .../Views/UserSettings/UserProfilesView.swift | 2 +- .../bg.xcloc/Localized Contents/bg.xliff | 28 +- .../cs.xcloc/Localized Contents/cs.xliff | 28 +- .../de.xcloc/Localized Contents/de.xliff | 35 +- .../en.xcloc/Localized Contents/en.xliff | 35 +- .../es.xcloc/Localized Contents/es.xliff | 37 +- .../fi.xcloc/Localized Contents/fi.xliff | 28 +- .../fr.xcloc/Localized Contents/fr.xliff | 28 +- .../hu.xcloc/Localized Contents/hu.xliff | 65 +- .../it.xcloc/Localized Contents/it.xliff | 59 +- .../ja.xcloc/Localized Contents/ja.xliff | 28 +- .../nl.xcloc/Localized Contents/nl.xliff | 103 +-- .../pl.xcloc/Localized Contents/pl.xliff | 28 +- .../ru.xcloc/Localized Contents/ru.xliff | 153 ++++- .../th.xcloc/Localized Contents/th.xliff | 28 +- .../tr.xcloc/Localized Contents/tr.xliff | 28 +- .../uk.xcloc/Localized Contents/uk.xliff | 37 +- .../Localized Contents/zh-Hans.xliff | 28 +- .../SimpleX NSE/ru.lproj/Localizable.strings | 20 +- apps/ios/bg.lproj/Localizable.strings | 42 +- apps/ios/cs.lproj/Localizable.strings | 36 +- apps/ios/de.lproj/Localizable.strings | 51 +- apps/ios/es.lproj/Localizable.strings | 53 +- apps/ios/fi.lproj/Localizable.strings | 36 +- apps/ios/fr.lproj/Localizable.strings | 42 +- apps/ios/hu.lproj/Localizable.strings | 129 +++- apps/ios/it.lproj/Localizable.strings | 123 +++- apps/ios/ja.lproj/Localizable.strings | 36 +- apps/ios/nl.lproj/Localizable.strings | 167 +++-- apps/ios/pl.lproj/Localizable.strings | 42 +- apps/ios/ru.lproj/Localizable.strings | 399 ++++++++++- apps/ios/th.lproj/Localizable.strings | 36 +- apps/ios/tr.lproj/Localizable.strings | 42 +- apps/ios/uk.lproj/Localizable.strings | 50 +- apps/ios/zh-Hans.lproj/Localizable.strings | 42 +- .../commonMain/resources/MR/ar/strings.xml | 3 +- .../commonMain/resources/MR/base/strings.xml | 6 +- .../commonMain/resources/MR/de/strings.xml | 3 +- .../commonMain/resources/MR/es/strings.xml | 3 +- .../commonMain/resources/MR/fr/strings.xml | 3 +- .../commonMain/resources/MR/hu/strings.xml | 95 ++- .../commonMain/resources/MR/in/strings.xml | 53 ++ .../commonMain/resources/MR/it/strings.xml | 78 ++- .../commonMain/resources/MR/nl/strings.xml | 118 ++-- .../commonMain/resources/MR/pl/strings.xml | 3 +- .../resources/MR/pt-rBR/strings.xml | 3 +- .../commonMain/resources/MR/ru/strings.xml | 172 ++++- .../commonMain/resources/MR/uk/strings.xml | 3 +- .../resources/MR/zh-rCN/strings.xml | 621 +++++++++--------- 52 files changed, 2141 insertions(+), 1154 deletions(-) diff --git a/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift b/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift index 14e08ff219..318e0b2f0d 100644 --- a/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift +++ b/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift @@ -323,7 +323,7 @@ struct ChooseServerOperators: View { VStack(alignment: .leading, spacing: 20) { if !operatorsWithConditionsAccepted.isEmpty { Text("Conditions are already accepted for following operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.") - Text("Same conditions will apply to operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.") + Text("The same conditions will apply to operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.") } else { Text("Conditions will be accepted for operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.") } diff --git a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift index 6164fcae70..642220454c 100644 --- a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift +++ b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift @@ -19,7 +19,7 @@ struct SetNotificationsMode: View { GeometryReader { g in ScrollView { VStack(alignment: .center, spacing: 20) { - Text("Push Notifications") + Text("Push notifications") .font(.largeTitle) .bold() .padding(.top, 50) @@ -119,6 +119,7 @@ struct NtfModeSelector: View { Text(ntfModeShortDescription(mode)) .lineLimit(2) .font(.callout) + .fixedSize(horizontal: false, vertical: true) } } .padding(.vertical, 12) diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift index c544d8724c..b1e4d36eda 100644 --- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift +++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift @@ -450,7 +450,7 @@ struct SingleOperatorUsageConditionsView: View { Group { viewHeader() Text("Conditions are already accepted for following operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.") - Text("Same conditions will apply to operator **\(userServers[operatorIndex].operator_.legalName_)**.") + Text("The same conditions will apply to operator **\(userServers[operatorIndex].operator_.legalName_)**.") conditionsAppliedToOtherOperatorsText() usageConditionsNavLinkButton() diff --git a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift index c3dce183bb..7cd86ef1ef 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift @@ -197,7 +197,7 @@ struct UserProfilesView: View { action() } else { authenticate( - reason: NSLocalizedString("Change user profiles", comment: "authentication reason") + reason: NSLocalizedString("Change chat profiles", comment: "authentication reason") ) { laResult in switch laResult { case .success, .unavailable: diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index 0e8e30d8aa..901bee26dd 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -1288,6 +1288,10 @@ Промени No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? Промяна на паролата на базата данни? @@ -1334,10 +1338,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5344,10 +5344,6 @@ Enable in *Network & servers* settings. Proxy requires password No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications Push известия @@ -5752,14 +5748,6 @@ Enable in *Network & servers* settings. По-безопасни групи No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Запази @@ -6850,6 +6838,14 @@ It can happen because of some bug or when the connection is compromised.Профилът се споделя само с вашите контакти. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index 10f6355692..fd8958f5f8 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -1247,6 +1247,10 @@ Změnit No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? Změnit přístupovou frázi databáze? @@ -1293,10 +1297,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5166,10 +5166,6 @@ Enable in *Network & servers* settings. Proxy requires password No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications Nabízená oznámení @@ -5562,14 +5558,6 @@ Enable in *Network & servers* settings. Safer groups No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Uložit @@ -6638,6 +6626,14 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován Profil je sdílen pouze s vašimi kontakty. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 35e11b4861..77ddbfb69b 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -1341,6 +1341,11 @@ Ändern No comment provided by engineer. + + Change chat profiles + Chat-Profile wechseln + authentication reason + Change database passphrase? Datenbank-Passwort ändern? @@ -1387,11 +1392,6 @@ authentication reason set passcode view - - Change user profiles - Chat-Profile wechseln - authentication reason - Chat No comment provided by engineer. @@ -5590,11 +5590,6 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Der Proxy benötigt ein Passwort No comment provided by engineer. - - Push Notifications - Push-Benachrichtigungen - No comment provided by engineer. - Push notifications Push-Benachrichtigungen @@ -6021,16 +6016,6 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Sicherere Gruppen No comment provided by engineer. - - Same conditions will apply to operator **%@**. - Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**. - No comment provided by engineer. - Save Speichern @@ -7191,6 +7176,16 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro Das Profil wird nur mit Ihren Kontakten geteilt. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**. + No comment provided by engineer. + The second preset operator in the app! Der zweite voreingestellte Netzwerk-Betreiber in der App! diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 1d7f3f16be..a70a22581b 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -1346,6 +1346,11 @@ Change No comment provided by engineer. + + Change chat profiles + Change chat profiles + authentication reason + Change database passphrase? Change database passphrase? @@ -1392,11 +1397,6 @@ authentication reason set passcode view - - Change user profiles - Change user profiles - authentication reason - Chat Chat @@ -5611,11 +5611,6 @@ Enable in *Network & servers* settings. Proxy requires password No comment provided by engineer. - - Push Notifications - Push Notifications - No comment provided by engineer. - Push notifications Push notifications @@ -6042,16 +6037,6 @@ Enable in *Network & servers* settings. Safer groups No comment provided by engineer. - - Same conditions will apply to operator **%@**. - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Save @@ -7213,6 +7198,16 @@ It can happen because of some bug or when the connection is compromised.The profile is only shared with your contacts. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! The second preset operator in the app! diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 147ad6128f..32af6e9cfd 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -1341,6 +1341,11 @@ Cambiar No comment provided by engineer. + + Change chat profiles + Cambiar perfil de usuario + authentication reason + Change database passphrase? ¿Cambiar contraseña de la base de datos? @@ -1387,11 +1392,6 @@ authentication reason set passcode view - - Change user profiles - Cambiar perfil de usuario - authentication reason - Chat No comment provided by engineer. @@ -5590,14 +5590,9 @@ Actívalo en ajustes de *Servidores y Redes*. El proxy requiere contraseña No comment provided by engineer. - - Push Notifications - Notificaciones push - No comment provided by engineer. - Push notifications - Notificaciones automáticas + Notificaciones push No comment provided by engineer. @@ -6021,16 +6016,6 @@ Actívalo en ajustes de *Servidores y Redes*. Grupos más seguros No comment provided by engineer. - - Same conditions will apply to operator **%@**. - Las mismas condiciones se aplicarán al operador **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - Las mismas condiciones se aplicarán a el/los operador(es) **%@**. - No comment provided by engineer. - Save Guardar @@ -7191,6 +7176,16 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. El perfil sólo se comparte con tus contactos. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + Las mismas condiciones se aplicarán al operador **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + Las mismas condiciones se aplicarán a el/los operador(es) **%@**. + No comment provided by engineer. + The second preset operator in the app! El segundo operador predefinido! diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index 39277bbcce..bbd8a338bc 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -1240,6 +1240,10 @@ Muuta No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? Muutetaanko tietokannan tunnuslause? @@ -1286,10 +1290,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5154,10 +5154,6 @@ Enable in *Network & servers* settings. Proxy requires password No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications Push-ilmoitukset @@ -5550,14 +5546,6 @@ Enable in *Network & servers* settings. Safer groups No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Tallenna @@ -6624,6 +6612,14 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.Profiili jaetaan vain kontaktiesi kanssa. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index c2030ab657..9c44fe91e4 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -1329,6 +1329,10 @@ Changer No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? Changer la phrase secrète de la base de données ? @@ -1375,10 +1379,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5530,10 +5530,6 @@ Activez-le dans les paramètres *Réseau et serveurs*. Le proxy est protégé par un mot de passe No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications Notifications push @@ -5958,14 +5954,6 @@ Activez-le dans les paramètres *Réseau et serveurs*. Groupes plus sûrs No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Enregistrer @@ -7113,6 +7101,14 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. Le profil n'est partagé qu'avec vos contacts. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff index 437d97274d..ffc162633f 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -637,6 +637,7 @@ Add friends + Barátok hozzáadása No comment provided by engineer. @@ -656,6 +657,7 @@ Add team members + Csapattagok hozzáadása No comment provided by engineer. @@ -670,6 +672,7 @@ Add your team members to the conversations. + Adja hozzá csapattagjait a beszélgetésekhez. No comment provided by engineer. @@ -1209,7 +1212,7 @@ Blur media - Média elhomályosítása + Médiatartalom elhomályosítása No comment provided by engineer. @@ -1244,10 +1247,12 @@ Business address + Üzleti cím No comment provided by engineer. Business chats + Üzleti csevegések No comment provided by engineer. @@ -1341,6 +1346,11 @@ Változtatás No comment provided by engineer. + + Change chat profiles + Felhasználói profilok megváltoztatása + authentication reason + Change database passphrase? Adatbázis-jelmondat megváltoztatása? @@ -1387,21 +1397,19 @@ authentication reason set passcode view - - Change user profiles - Felhasználói profilok megváltoztatása - authentication reason - Chat + Csevegés No comment provided by engineer. Chat already exists + A csevegés már létezik No comment provided by engineer. Chat already exists! + A csevegés már létezik! No comment provided by engineer. @@ -1481,10 +1489,12 @@ Chat will be deleted for all members - this cannot be undone! + A csevegés minden tag számára törlésre kerül - ezt a műveletet nem lehet visszavonni! No comment provided by engineer. Chat will be deleted for you - this cannot be undone! + A csevegés törlésre kerül az Ön számára - ezt a műveletet nem lehet visszavonni! No comment provided by engineer. @@ -2243,6 +2253,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Delete chat + Csevegés törlése No comment provided by engineer. @@ -2257,6 +2268,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Delete chat? + Csevegés törlése? No comment provided by engineer. @@ -2526,6 +2538,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Direct messages between members are prohibited in this chat. + A tagok közötti közvetlen üzenetek le vannak tiltva ebben a csevegésben. No comment provided by engineer. @@ -4101,6 +4114,7 @@ További fejlesztések hamarosan! Invite to chat + Meghívás a csevegésbe No comment provided by engineer. @@ -4263,10 +4277,12 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Leave chat + Csevegés elhagyása No comment provided by engineer. Leave chat? + Csevegés elhagyása? No comment provided by engineer. @@ -4401,6 +4417,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Member role will be changed to "%@". All chat members will be notified. + A tag szerepeköre meg fog változni a következőre: "%@". A csevegés tagjai értesítést fognak kapni. No comment provided by engineer. @@ -4415,6 +4432,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Member will be removed from chat - this cannot be undone! + A tag el lesz távolítva a csevegésből - ezt a műveletet nem lehet visszavonni! No comment provided by engineer. @@ -5032,6 +5050,7 @@ VPN engedélyezése szükséges. Only chat owners can change preferences. + Csak a csevegés tulajdonosai módosíthatják a beállításokat. No comment provided by engineer. @@ -5166,6 +5185,7 @@ VPN engedélyezése szükséges. Or import archive file + Vagy archívumfájl importálása No comment provided by engineer. @@ -5431,6 +5451,7 @@ Hiba: %@ Privacy for your customers. + Az Ön ügyfeleinek adatvédelme. No comment provided by engineer. @@ -5590,11 +5611,6 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. A proxy jelszót igényel No comment provided by engineer. - - Push Notifications - Push értesítések - No comment provided by engineer. - Push notifications Push-értesítések @@ -6021,16 +6037,6 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Biztonságosabb csoportok No comment provided by engineer. - - Same conditions will apply to operator **%@**. - Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**. - No comment provided by engineer. - Save Mentés @@ -6119,7 +6125,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Saved from - Mentve innen: + Elmentve innen: No comment provided by engineer. @@ -7017,6 +7023,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Tap Create SimpleX address in the menu to create it later. + Koppintson a SimpleX-cím létrehozása menüpontra a későbbi létrehozáshoz. No comment provided by engineer. @@ -7191,6 +7198,16 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. A profilja csak az ismerőseivel kerül megosztásra. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**. + No comment provided by engineer. + The second preset operator in the app! A második előre beállított üzemeltető az alkalmazásban! @@ -8057,6 +8074,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc You are already connected with %@. + Ön már kapcsolódva van vele: %@. No comment provided by engineer. @@ -8335,6 +8353,7 @@ Kapcsolatkérés megismétlése? You will stop receiving messages from this chat. Chat history will be preserved. + Ön nem fog több üzenetet kapni ebből a csevegésből, de a csevegés előzményei megmaradnak. No comment provided by engineer. @@ -9211,7 +9230,7 @@ Kapcsolatkérés megismétlése? saved from %@ - mentve innen: %@ + elmentve innen: %@ No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index f20b0515db..0b578e6a25 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -637,6 +637,7 @@ Add friends + Aggiungi amici No comment provided by engineer. @@ -656,6 +657,7 @@ Add team members + Aggiungi membri del team No comment provided by engineer. @@ -670,6 +672,7 @@ Add your team members to the conversations. + Aggiungi i membri del tuo team alle conversazioni. No comment provided by engineer. @@ -1244,10 +1247,12 @@ Business address + Indirizzo di lavoro No comment provided by engineer. Business chats + Chat di lavoro No comment provided by engineer. @@ -1341,6 +1346,11 @@ Cambia No comment provided by engineer. + + Change chat profiles + Modifica profili utente + authentication reason + Change database passphrase? Cambiare password del database? @@ -1387,21 +1397,19 @@ authentication reason set passcode view - - Change user profiles - Modifica profili utente - authentication reason - Chat + Chat No comment provided by engineer. Chat already exists + La chat esiste già No comment provided by engineer. Chat already exists! + La chat esiste già! No comment provided by engineer. @@ -1481,10 +1489,12 @@ Chat will be deleted for all members - this cannot be undone! + La chat verrà eliminata per tutti i membri, non è reversibile! No comment provided by engineer. Chat will be deleted for you - this cannot be undone! + La chat verrà eliminata solo per te, non è reversibile! No comment provided by engineer. @@ -2243,6 +2253,7 @@ Questo è il tuo link una tantum! Delete chat + Elimina chat No comment provided by engineer. @@ -2257,6 +2268,7 @@ Questo è il tuo link una tantum! Delete chat? + Eliminare la chat? No comment provided by engineer. @@ -2526,6 +2538,7 @@ Questo è il tuo link una tantum! Direct messages between members are prohibited in this chat. + I messaggi diretti tra i membri sono vietati in questa chat. No comment provided by engineer. @@ -4101,6 +4114,7 @@ Altri miglioramenti sono in arrivo! Invite to chat + Invita in chat No comment provided by engineer. @@ -4263,10 +4277,12 @@ Questo è il tuo link per il gruppo %@! Leave chat + Esci dalla chat No comment provided by engineer. Leave chat? + Uscire dalla chat? No comment provided by engineer. @@ -4401,6 +4417,7 @@ Questo è il tuo link per il gruppo %@! Member role will be changed to "%@". All chat members will be notified. + Il ruolo del membro verrà cambiato in "%@". Verranno notificati tutti i membri della chat. No comment provided by engineer. @@ -4415,6 +4432,7 @@ Questo è il tuo link per il gruppo %@! Member will be removed from chat - this cannot be undone! + Il membro verrà rimosso dalla chat, non è reversibile! No comment provided by engineer. @@ -5032,6 +5050,7 @@ Richiede l'attivazione della VPN. Only chat owners can change preferences. + Solo i proprietari della chat possono modificarne le preferenze. No comment provided by engineer. @@ -5166,6 +5185,7 @@ Richiede l'attivazione della VPN. Or import archive file + O importa file archivio No comment provided by engineer. @@ -5431,6 +5451,7 @@ Errore: %@ Privacy for your customers. + Privacy per i tuoi clienti. No comment provided by engineer. @@ -5590,11 +5611,6 @@ Attivalo nelle impostazioni *Rete e server*. Il proxy richiede una password No comment provided by engineer. - - Push Notifications - Notifiche push - No comment provided by engineer. - Push notifications Notifiche push @@ -6021,16 +6037,6 @@ Attivalo nelle impostazioni *Rete e server*. Gruppi più sicuri No comment provided by engineer. - - Same conditions will apply to operator **%@**. - Le stesse condizioni si applicheranno all'operatore **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - Le stesse condizioni si applicheranno agli operatori **%@**. - No comment provided by engineer. - Save Salva @@ -7017,6 +7023,7 @@ Attivalo nelle impostazioni *Rete e server*. Tap Create SimpleX address in the menu to create it later. + Tocca "Crea indirizzo SimpleX" nel menu per crearlo più tardi. No comment provided by engineer. @@ -7191,6 +7198,16 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.Il profilo è condiviso solo con i tuoi contatti. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + Le stesse condizioni si applicheranno all'operatore **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + Le stesse condizioni si applicheranno agli operatori **%@**. + No comment provided by engineer. + The second preset operator in the app! Il secondo operatore preimpostato nell'app! @@ -8057,6 +8074,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e You are already connected with %@. + Sei già connesso/a con %@. No comment provided by engineer. @@ -8335,6 +8353,7 @@ Ripetere la richiesta di connessione? You will stop receiving messages from this chat. Chat history will be preserved. + Non riceverai più messaggi da questa chat. La cronologia della chat verrà conservata. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff index 288276124c..87058e0bdc 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -1264,6 +1264,10 @@ 変更 No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? データベースのパスフレーズを更新しますか? @@ -1310,10 +1314,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5204,10 +5204,6 @@ Enable in *Network & servers* settings. Proxy requires password No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications プッシュ通知 @@ -5599,14 +5595,6 @@ Enable in *Network & servers* settings. Safer groups No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save 保存 @@ -6667,6 +6655,14 @@ It can happen because of some bug or when the connection is compromised.プロフィールは連絡先にしか共有されません。 No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 6bf4808025..ce3adc3c41 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -637,6 +637,7 @@ Add friends + Vrienden toevoegen No comment provided by engineer. @@ -656,6 +657,7 @@ Add team members + Teamleden toevoegen No comment provided by engineer. @@ -670,6 +672,7 @@ Add your team members to the conversations. + Voeg uw teamleden toe aan de gesprekken. No comment provided by engineer. @@ -829,7 +832,7 @@ Allow irreversible message deletion only if your contact allows it to you. (24 hours) - Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur) + Sta het definitief verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur) No comment provided by engineer. @@ -859,7 +862,7 @@ Allow to irreversibly delete sent messages. (24 hours) - Sta toe om verzonden berichten onomkeerbaar te verwijderen. (24 uur) + Sta toe om verzonden berichten definitief te verwijderen. (24 uur) No comment provided by engineer. @@ -899,7 +902,7 @@ Allow your contacts to irreversibly delete sent messages. (24 hours) - Laat uw contacten verzonden berichten onomkeerbaar verwijderen. (24 uur) + Laat uw contacten verzonden berichten definitief verwijderen. (24 uur) No comment provided by engineer. @@ -1054,7 +1057,7 @@ Audio/video calls are prohibited. - Audio/video gesprekken zijn verboden. + Audio/video gesprekken zijn niet toegestaan. No comment provided by engineer. @@ -1244,10 +1247,12 @@ Business address + Zakelijk adres No comment provided by engineer. Business chats + Zakelijke chats No comment provided by engineer. @@ -1267,7 +1272,7 @@ Calls prohibited! - Bellen verboden! + Bellen niet toegestaan! No comment provided by engineer. @@ -1341,6 +1346,11 @@ Veranderen No comment provided by engineer. + + Change chat profiles + Gebruikersprofielen wijzigen + authentication reason + Change database passphrase? Wachtwoord database wijzigen? @@ -1387,21 +1397,19 @@ authentication reason set passcode view - - Change user profiles - Gebruikersprofielen wijzigen - authentication reason - Chat + Chat No comment provided by engineer. Chat already exists + Chat bestaat al No comment provided by engineer. Chat already exists! + Chat bestaat al! No comment provided by engineer. @@ -1481,10 +1489,12 @@ Chat will be deleted for all members - this cannot be undone! + De chat wordt voor alle leden verwijderd - dit kan niet ongedaan worden gemaakt! No comment provided by engineer. Chat will be deleted for you - this cannot be undone! + De chat wordt voor je verwijderd - dit kan niet ongedaan worden gemaakt! No comment provided by engineer. @@ -2243,6 +2253,7 @@ Dit is uw eigen eenmalige link! Delete chat + Chat verwijderen No comment provided by engineer. @@ -2257,6 +2268,7 @@ Dit is uw eigen eenmalige link! Delete chat? + Chat verwijderen? No comment provided by engineer. @@ -2526,11 +2538,12 @@ Dit is uw eigen eenmalige link! Direct messages between members are prohibited in this chat. + Directe berichten tussen leden zijn in deze chat niet toegestaan. No comment provided by engineer. Direct messages between members are prohibited. - Directe berichten tussen leden zijn verboden in deze groep. + Directe berichten tussen leden zijn niet toegestaan. No comment provided by engineer. @@ -2565,12 +2578,12 @@ Dit is uw eigen eenmalige link! Disappearing messages are prohibited in this chat. - Verdwijnende berichten zijn verboden in dit gesprek. + Verdwijnende berichten zijn niet toegestaan in dit gesprek. No comment provided by engineer. Disappearing messages are prohibited. - Verdwijnende berichten zijn verboden in deze groep. + Verdwijnende berichten zijn niet toegestaan. No comment provided by engineer. @@ -3428,7 +3441,7 @@ Dit is uw eigen eenmalige link! Files and media are prohibited. - Bestanden en media zijn verboden in deze groep. + Bestanden en media zijn niet toegestaan. No comment provided by engineer. @@ -3438,7 +3451,7 @@ Dit is uw eigen eenmalige link! Files and media prohibited! - Bestanden en media verboden! + Bestanden en media niet toegestaan! No comment provided by engineer. @@ -3842,7 +3855,7 @@ Fout: %2$@ If you enter this passcode when opening the app, all app data will be irreversibly removed! - Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens onomkeerbaar verwijderd! + Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens definitief verwijderd! No comment provided by engineer. @@ -4101,6 +4114,7 @@ Binnenkort meer verbeteringen! Invite to chat + Uitnodigen voor een chat No comment provided by engineer. @@ -4115,12 +4129,12 @@ Binnenkort meer verbeteringen! Irreversible message deletion is prohibited in this chat. - Het onomkeerbaar verwijderen van berichten is verboden in dit gesprek. + Het definitief verwijderen van berichten is niet toegestaan in dit gesprek. No comment provided by engineer. Irreversible message deletion is prohibited. - Het onomkeerbaar verwijderen van berichten is verboden in deze groep. + Het definitief verwijderen van berichten is verbHet definitief verwijderen van berichten is niet toegestaan.. No comment provided by engineer. @@ -4263,10 +4277,12 @@ Dit is jouw link voor groep %@! Leave chat + Chat verlaten No comment provided by engineer. Leave chat? + Chat verlaten? No comment provided by engineer. @@ -4401,6 +4417,7 @@ Dit is jouw link voor groep %@! Member role will be changed to "%@". All chat members will be notified. + De rol van het lid wordt gewijzigd naar "%@". Alle chatleden worden op de hoogte gebracht. No comment provided by engineer. @@ -4415,6 +4432,7 @@ Dit is jouw link voor groep %@! Member will be removed from chat - this cannot be undone! + Lid wordt verwijderd uit de chat - dit kan niet ongedaan worden gemaakt! No comment provided by engineer. @@ -4504,12 +4522,12 @@ Dit is jouw link voor groep %@! Message reactions are prohibited in this chat. - Reacties op berichten zijn verboden in deze chat. + Reacties op berichten zijn niet toegestaan in deze chat. No comment provided by engineer. Message reactions are prohibited. - Reacties op berichten zijn verboden in deze groep. + Reacties op berichten zijn niet toegestaan. No comment provided by engineer. @@ -5032,6 +5050,7 @@ Vereist het inschakelen van VPN. Only chat owners can change preferences. + Alleen chateigenaren kunnen voorkeuren wijzigen. No comment provided by engineer. @@ -5066,7 +5085,7 @@ Vereist het inschakelen van VPN. Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours) - Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering). (24 uur) + Alleen jij kunt berichten definitief verwijderen (je contact kan ze markeren voor verwijdering). (24 uur) No comment provided by engineer. @@ -5166,6 +5185,7 @@ Vereist het inschakelen van VPN. Or import archive file + Of importeer archiefbestand No comment provided by engineer. @@ -5431,6 +5451,7 @@ Fout: %@ Privacy for your customers. + Privacy voor uw klanten. No comment provided by engineer. @@ -5505,7 +5526,7 @@ Fout: %@ Prohibit irreversible message deletion. - Verbied het onomkeerbaar verwijderen van berichten. + Verbied het definitief verwijderen van berichten. No comment provided by engineer. @@ -5590,11 +5611,6 @@ Schakel dit in in *Netwerk en servers*-instellingen. Proxy vereist wachtwoord No comment provided by engineer. - - Push Notifications - Pushmeldingen - No comment provided by engineer. - Push notifications Push meldingen @@ -6021,16 +6037,6 @@ Schakel dit in in *Netwerk en servers*-instellingen. Veiligere groepen No comment provided by engineer. - - Same conditions will apply to operator **%@**. - Dezelfde voorwaarden gelden voor operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - Dezelfde voorwaarden gelden voor operator(s): **%@**. - No comment provided by engineer. - Save Opslaan @@ -6765,7 +6771,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. SimpleX links are prohibited. - SimpleX-links zijn in deze groep verboden. + SimpleX-links zijn niet toegestaan. No comment provided by engineer. @@ -7017,6 +7023,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Tap Create SimpleX address in the menu to create it later. + Tik op SimpleX-adres maken in het menu om het later te maken. No comment provided by engineer. @@ -7191,6 +7198,16 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. Het profiel wordt alleen gedeeld met uw contacten. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + Dezelfde voorwaarden gelden voor operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + Dezelfde voorwaarden gelden voor operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! De tweede vooraf ingestelde operator in de app! @@ -7258,7 +7275,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. - Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. + Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan definitief verloren. No comment provided by engineer. @@ -7857,12 +7874,12 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Voice messages are prohibited in this chat. - Spraak berichten zijn verboden in deze chat. + Spraak berichten zijn niet toegestaan in dit gesprek. No comment provided by engineer. Voice messages are prohibited. - Spraak berichten zijn verboden in deze groep. + Spraak berichten zijn niet toegestaan. No comment provided by engineer. @@ -7872,7 +7889,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Voice messages prohibited! - Spraak berichten verboden! + Spraak berichten niet toegestaan! No comment provided by engineer. @@ -8057,6 +8074,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak You are already connected with %@. + U bent al verbonden met %@. No comment provided by engineer. @@ -8335,6 +8353,7 @@ Verbindingsverzoek herhalen? You will stop receiving messages from this chat. Chat history will be preserved. + U ontvangt geen berichten meer van deze chat. De chatgeschiedenis blijft bewaard. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index ea40b78582..e99439f3ae 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -1324,6 +1324,10 @@ Zmień No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? Zmienić hasło bazy danych? @@ -1370,10 +1374,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5520,10 +5520,6 @@ Włącz w ustawianiach *Sieć i serwery* . Proxy wymaga hasła No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications Powiadomienia push @@ -5948,14 +5944,6 @@ Włącz w ustawianiach *Sieć i serwery* . Bezpieczniejsze grupy No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Zapisz @@ -7100,6 +7088,14 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom Profil jest udostępniany tylko Twoim kontaktom. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index 3fd5d194de..85b4aaa4ae 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -114,10 +114,12 @@ %@ server + %@ сервер No comment provided by engineer. %@ servers + %@ серверы No comment provided by engineer. @@ -382,6 +384,7 @@ **Scan / Paste link**: to connect via a link you received. + **Сканировать / Вставить ссылку**: чтобы соединится через полученную ссылку. No comment provided by engineer. @@ -492,10 +495,12 @@ 1-time link + Одноразовая ссылка No comment provided by engineer. 1-time link can be used *with one contact only* - share in person or via any messenger. + Одноразовая ссылка может быть использована *только с одним контактом* - поделитесь при встрече или через любой мессенджер. No comment provided by engineer. @@ -586,6 +591,7 @@ Accept conditions + Принять условия No comment provided by engineer. @@ -606,6 +612,7 @@ Accepted conditions + Принятые условия No comment provided by engineer. @@ -630,6 +637,7 @@ Add friends + Добавить друзей No comment provided by engineer. @@ -649,6 +657,7 @@ Add team members + Добавить сотрудников No comment provided by engineer. @@ -663,14 +672,17 @@ Add your team members to the conversations. + Добавьте сотрудников в разговор. No comment provided by engineer. Added media & file servers + Дополнительные серверы файлов и медиа No comment provided by engineer. Added message servers + Дополнительные серверы сообщений No comment provided by engineer. @@ -700,10 +712,12 @@ Address or 1-time link? + Адрес или одноразовая ссылка? No comment provided by engineer. Address settings + Настройки адреса No comment provided by engineer. @@ -1233,10 +1247,12 @@ Business address + Бизнес адрес No comment provided by engineer. Business chats + Бизнес разговоры No comment provided by engineer. @@ -1330,6 +1346,11 @@ Поменять No comment provided by engineer. + + Change chat profiles + Поменять профили + authentication reason + Change database passphrase? Поменять пароль базы данных? @@ -1376,20 +1397,19 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat + Разговор No comment provided by engineer. Chat already exists + Разговор уже существует No comment provided by engineer. Chat already exists! + Разговор уже существует! No comment provided by engineer. @@ -1469,10 +1489,12 @@ Chat will be deleted for all members - this cannot be undone! + Разговор будет удален для всех участников - это действие нельзя отменить! No comment provided by engineer. Chat will be deleted for you - this cannot be undone! + Разговор будет удален для Вас - это действие нельзя отменить! No comment provided by engineer. @@ -1482,10 +1504,12 @@ Check messages every 20 min. + Проверять сообщения каждые 20 минут. No comment provided by engineer. Check messages when allowed. + Проверять сообщения по возможности. No comment provided by engineer. @@ -1580,38 +1604,47 @@ Conditions accepted on: %@. + Условия приняты: %@. No comment provided by engineer. Conditions are accepted for the operator(s): **%@**. + Условия приняты для оператора(ов): **%@**. No comment provided by engineer. Conditions are already accepted for following operator(s): **%@**. + Условия уже приняты для следующих оператора(ов): **%@**. No comment provided by engineer. Conditions of use + Условия использования No comment provided by engineer. Conditions will be accepted for enabled operators after 30 days. + Условия будут приняты для включенных операторов через 30 дней. No comment provided by engineer. Conditions will be accepted for operator(s): **%@**. + Условия будут приняты для оператора(ов): **%@**. No comment provided by engineer. Conditions will be accepted for the operator(s): **%@**. + Условия будут приняты для оператора(ов): **%@**. No comment provided by engineer. Conditions will be accepted on: %@. + Условия будут приняты: %@. No comment provided by engineer. Conditions will be automatically accepted for enabled operators on: %@. + Условия будут автоматически приняты для включенных операторов: %@. No comment provided by engineer. @@ -1810,6 +1843,7 @@ This is your own one-time link! Connection security + Безопасность соединения No comment provided by engineer. @@ -1929,6 +1963,7 @@ This is your own one-time link! Create 1-time link + Создать одноразовую ссылку No comment provided by engineer. @@ -2018,6 +2053,7 @@ This is your own one-time link! Current conditions text couldn't be loaded, you can review conditions via this link: + Текст условий использования не может быть показан, вы можете посмотреть их через ссылку: No comment provided by engineer. @@ -2217,6 +2253,7 @@ This is your own one-time link! Delete chat + Удалить разговор No comment provided by engineer. @@ -2231,6 +2268,7 @@ This is your own one-time link! Delete chat? + Удалить разговор? No comment provided by engineer. @@ -2395,6 +2433,7 @@ This is your own one-time link! Delivered even when Apple drops them. + Доставляются даже тогда, когда Apple их теряет. No comment provided by engineer. @@ -2499,6 +2538,7 @@ This is your own one-time link! Direct messages between members are prohibited in this chat. + Прямые сообщения между членами запрещены в этом разговоре. No comment provided by engineer. @@ -2684,6 +2724,7 @@ This is your own one-time link! E2E encrypted notifications. + E2E зашифрованные нотификации. No comment provided by engineer. @@ -2708,6 +2749,7 @@ This is your own one-time link! Enable Flux + Включить Flux No comment provided by engineer. @@ -2917,6 +2959,7 @@ This is your own one-time link! Error accepting conditions + Ошибка приема условий alert title @@ -2931,6 +2974,7 @@ This is your own one-time link! Error adding server + Ошибка добавления сервера alert title @@ -3075,6 +3119,7 @@ This is your own one-time link! Error loading servers + Ошибка загрузки серверов alert title @@ -3134,6 +3179,7 @@ This is your own one-time link! Error saving servers + Ошибка сохранения серверов alert title @@ -3208,6 +3254,7 @@ This is your own one-time link! Error updating server + Ошибка сохранения сервера alert title @@ -3257,6 +3304,7 @@ This is your own one-time link! Errors in servers configuration. + Ошибки в настройках серверов. servers error @@ -3463,6 +3511,7 @@ This is your own one-time link! For chat profile %@: + Для профиля чата %@: servers error @@ -3472,14 +3521,17 @@ This is your own one-time link! For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. + Например, если Ваш контакт получает сообщения через сервер SimpleX Chat, Ваше приложение доставит их через сервер Flux. No comment provided by engineer. For private routing + Для доставки сообщений No comment provided by engineer. For social media + Для социальных сетей No comment provided by engineer. @@ -3758,10 +3810,12 @@ Error: %2$@ How it affects privacy + Как это влияет на конфиденциальность No comment provided by engineer. How it helps privacy + Как это улучшает конфиденциальность No comment provided by engineer. @@ -4059,6 +4113,7 @@ More improvements are coming soon! Invite to chat + Пригласить в разговор No comment provided by engineer. @@ -4221,10 +4276,12 @@ This is your link for group %@! Leave chat + Покинуть разговор No comment provided by engineer. Leave chat? + Покинуть разговор? No comment provided by engineer. @@ -4359,6 +4416,7 @@ This is your link for group %@! Member role will be changed to "%@". All chat members will be notified. + Роль участника будет изменена на "%@". Все участники разговора получат уведомление. No comment provided by engineer. @@ -4373,6 +4431,7 @@ This is your link for group %@! Member will be removed from chat - this cannot be undone! + Член будет удален из разговора - это действие нельзя отменить! No comment provided by engineer. @@ -4637,6 +4696,7 @@ This is your link for group %@! More reliable notifications + Более надежные уведомления No comment provided by engineer. @@ -4676,6 +4736,7 @@ This is your link for group %@! Network decentralization + Децентрализация сети No comment provided by engineer. @@ -4690,6 +4751,7 @@ This is your link for group %@! Network operator + Оператор сети No comment provided by engineer. @@ -4749,6 +4811,7 @@ This is your link for group %@! New events + Новые события notification @@ -4778,6 +4841,7 @@ This is your link for group %@! New server + Новый сервер No comment provided by engineer. @@ -4837,10 +4901,12 @@ This is your link for group %@! No media & file servers. + Нет серверов файлов и медиа. servers error No message servers. + Нет серверов сообщений. servers error @@ -4875,18 +4941,22 @@ This is your link for group %@! No servers for private message routing. + Нет серверов для доставки сообщений. servers error No servers to receive files. + Нет серверов для приема файлов. servers error No servers to receive messages. + Нет серверов для приема сообщений. servers error No servers to send files. + Нет серверов для отправки файлов. servers error @@ -4921,6 +4991,7 @@ This is your link for group %@! Notifications privacy + Конфиденциальность уведомлений No comment provided by engineer. @@ -4978,6 +5049,7 @@ Requires compatible VPN. Only chat owners can change preferences. + Только владельцы разговора могут поменять предпочтения. No comment provided by engineer. @@ -5067,6 +5139,7 @@ Requires compatible VPN. Open changes + Открыть изменения No comment provided by engineer. @@ -5081,6 +5154,7 @@ Requires compatible VPN. Open conditions + Открыть условия No comment provided by engineer. @@ -5100,14 +5174,17 @@ Requires compatible VPN. Operator + Оператор No comment provided by engineer. Operator server + Сервер оператора alert title Or import archive file + Или импортировать файл архива No comment provided by engineer. @@ -5132,6 +5209,7 @@ Requires compatible VPN. Or to share privately + Или поделиться конфиденциально No comment provided by engineer. @@ -5352,6 +5430,7 @@ Error: %@ Preset servers + Серверы по умолчанию No comment provided by engineer. @@ -5371,6 +5450,7 @@ Error: %@ Privacy for your customers. + Конфиденциальность для ваших покупателей. No comment provided by engineer. @@ -5530,10 +5610,6 @@ Enable in *Network & servers* settings. Прокси требует пароль No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications Доставка уведомлений @@ -5907,10 +5983,12 @@ Enable in *Network & servers* settings. Review conditions + Посмотреть условия No comment provided by engineer. Review later + Посмотреть позже No comment provided by engineer. @@ -5958,14 +6036,6 @@ Enable in *Network & servers* settings. Более безопасные группы No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Сохранить @@ -6369,6 +6439,7 @@ Enable in *Network & servers* settings. Server added to operator %@. + Сервер добавлен к оператору %@. alert message @@ -6388,14 +6459,17 @@ Enable in *Network & servers* settings. Server operator changed. + Оператор серверов изменен. alert title Server operators + Операторы серверов No comment provided by engineer. Server protocol changed. + Протокол сервера изменен. alert title @@ -6526,10 +6600,12 @@ Enable in *Network & servers* settings. Share 1-time link with a friend + Поделитесь одноразовой ссылкой с другом No comment provided by engineer. Share SimpleX address on social media. + Поделитесь SimpleX адресом в социальных сетях. No comment provided by engineer. @@ -6539,6 +6615,7 @@ Enable in *Network & servers* settings. Share address publicly + Поделитесь адресом No comment provided by engineer. @@ -6663,10 +6740,12 @@ Enable in *Network & servers* settings. SimpleX address and 1-time links are safe to share via any messenger. + Адрес SimpleX и одноразовые ссылки безопасно отправлять через любой мессенджер. No comment provided by engineer. SimpleX address or 1-time link? + Адрес SimpleX или одноразовая ссылка? No comment provided by engineer. @@ -6762,6 +6841,8 @@ Enable in *Network & servers* settings. Some servers failed the test: %@ + Серверы не прошли тест: +%@ alert message @@ -6941,6 +7022,7 @@ Enable in *Network & servers* settings. Tap Create SimpleX address in the menu to create it later. + Нажмите Создать адрес SimpleX в меню, чтобы создать его позже. No comment provided by engineer. @@ -7032,6 +7114,7 @@ It can happen because of some bug or when the connection is compromised. The app protects your privacy by using different operators in each conversation. + Приложение улучшает конфиденциальность используя разных операторов в каждом разговоре. No comment provided by engineer. @@ -7051,6 +7134,7 @@ It can happen because of some bug or when the connection is compromised. The connection reached the limit of undelivered messages, your contact may be offline. + Соединение достигло предела недоставленных сообщений. Возможно, Ваш контакт не в сети. No comment provided by engineer. @@ -7113,8 +7197,19 @@ It can happen because of some bug or when the connection is compromised.Профиль отправляется только Вашим контактам. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + Те же самые условия будут приняты для оператора **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + Те же самые условия будут приняты для оператора(ов): **%@**. + No comment provided by engineer. + The second preset operator in the app! + Второй оператор серверов в приложении! No comment provided by engineer. @@ -7134,6 +7229,7 @@ It can happen because of some bug or when the connection is compromised. The servers for new files of your current chat profile **%@**. + Серверы для новых файлов Вашего текущего профиля **%@**. No comment provided by engineer. @@ -7153,6 +7249,7 @@ It can happen because of some bug or when the connection is compromised. These conditions will also apply for: **%@**. + Эти условия также будут применены к: **%@**. No comment provided by engineer. @@ -7257,6 +7354,7 @@ It can happen because of some bug or when the connection is compromised. To protect against your link being replaced, you can compare contact security codes. + Чтобы защитить Вашу ссылку от замены, Вы можете сравнить код безопасности. No comment provided by engineer. @@ -7283,6 +7381,7 @@ You will be prompted to complete authentication before this feature is enabled.< To receive + Для получения No comment provided by engineer. @@ -7307,6 +7406,7 @@ You will be prompted to complete authentication before this feature is enabled.< To send + Для оправки No comment provided by engineer. @@ -7316,6 +7416,7 @@ You will be prompted to complete authentication before this feature is enabled.< To use the servers of **%@**, accept conditions of use. + Чтобы использовать серверы оператора **%@**, примите условия использования. No comment provided by engineer. @@ -7410,6 +7511,7 @@ You will be prompted to complete authentication before this feature is enabled.< Undelivered messages + Недоставленные сообщения No comment provided by engineer. @@ -7571,6 +7673,7 @@ To connect, please ask your contact to create another connection link and check Use %@ + Использовать %@ No comment provided by engineer. @@ -7600,10 +7703,12 @@ To connect, please ask your contact to create another connection link and check Use for files + Использовать для файлов No comment provided by engineer. Use for messages + Использовать для сообщений No comment provided by engineer. @@ -7648,6 +7753,7 @@ To connect, please ask your contact to create another connection link and check Use servers + Использовать серверы No comment provided by engineer. @@ -7742,6 +7848,7 @@ To connect, please ask your contact to create another connection link and check View conditions + Посмотреть условия No comment provided by engineer. @@ -7751,6 +7858,7 @@ To connect, please ask your contact to create another connection link and check View updated conditions + Посмотреть измененные условия No comment provided by engineer. @@ -7865,6 +7973,7 @@ To connect, please ask your contact to create another connection link and check When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + Когда больше чем один оператор включен, ни один из них не видит метаданные, чтобы определить, кто соединен с кем. No comment provided by engineer. @@ -7964,6 +8073,7 @@ To connect, please ask your contact to create another connection link and check You are already connected with %@. + Вы уже соединены с %@. No comment provided by engineer. @@ -8030,10 +8140,12 @@ Repeat join request? You can configure operators in Network & servers settings. + Вы можете настроить операторов в настройках Сеть и серверы. No comment provided by engineer. You can configure servers via settings. + Вы можете сконфигурировать серверы через настройки. No comment provided by engineer. @@ -8078,6 +8190,7 @@ Repeat join request? You can set connection name, to remember who the link was shared with. + Вы можете установить имя соединения, чтобы запомнить кому Вы отправили ссылку. No comment provided by engineer. @@ -8239,6 +8352,7 @@ Repeat connection request? You will stop receiving messages from this chat. Chat history will be preserved. + Вы прекратите получать сообщения в этом разговоре. История будет сохранена. No comment provided by engineer. @@ -8383,6 +8497,7 @@ Repeat connection request? Your servers + Ваши серверы No comment provided by engineer. @@ -8807,6 +8922,7 @@ Repeat connection request? for better metadata privacy. + для лучшей конфиденциальности метаданных. No comment provided by engineer. @@ -9438,22 +9554,27 @@ last received msg: %2$@ %d new events + %d новых сообщений notification body From: %@ + От: %@ notification body New events + Новые события notification New messages + Новые сообщения notification New messages in %d chats + Новые сообщения в %d разговоре(ах) notification body diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index edf32b06f2..438fae5c47 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -1232,6 +1232,10 @@ เปลี่ยน No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? เปลี่ยนรหัสผ่านฐานข้อมูล? @@ -1278,10 +1282,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5133,10 +5133,6 @@ Enable in *Network & servers* settings. Proxy requires password No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications การแจ้งเตือนแบบทันที @@ -5527,14 +5523,6 @@ Enable in *Network & servers* settings. Safer groups No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save บันทึก @@ -6598,6 +6586,14 @@ It can happen because of some bug or when the connection is compromised.โปรไฟล์นี้แชร์กับผู้ติดต่อของคุณเท่านั้น No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index 6d69920454..5919cc4d49 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -1329,6 +1329,10 @@ Değiştir No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? Veritabanı parolasını değiştir? @@ -1375,10 +1379,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5530,10 +5530,6 @@ Enable in *Network & servers* settings. Proxy şifre gerektirir No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications Anında bildirimler @@ -5958,14 +5954,6 @@ Enable in *Network & servers* settings. Daha güvenli gruplar No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save Kaydet @@ -7113,6 +7101,14 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir. Profil sadece kişilerinle paylaşılacak. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 2f1e5d96a6..72e9896872 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -1341,6 +1341,11 @@ Зміна No comment provided by engineer. + + Change chat profiles + Зміна профілів користувачів + authentication reason + Change database passphrase? Змінити пароль до бази даних? @@ -1387,11 +1392,6 @@ authentication reason set passcode view - - Change user profiles - Зміна профілів користувачів - authentication reason - Chat No comment provided by engineer. @@ -5590,14 +5590,9 @@ Enable in *Network & servers* settings. Проксі вимагає пароль No comment provided by engineer. - - Push Notifications - Push-сповіщення - No comment provided by engineer. - Push notifications - Push-повідомлення + Push-сповіщення No comment provided by engineer. @@ -6021,16 +6016,6 @@ Enable in *Network & servers* settings. Безпечніші групи No comment provided by engineer. - - Same conditions will apply to operator **%@**. - Такі ж умови діятимуть і для оператора **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - Такі ж умови будуть застосовуватися до оператора(ів): **%@**. - No comment provided by engineer. - Save Зберегти @@ -7191,6 +7176,16 @@ It can happen because of some bug or when the connection is compromised.Профіль доступний лише вашим контактам. No comment provided by engineer. + + The same conditions will apply to operator **%@**. + Такі ж умови діятимуть і для оператора **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + Такі ж умови будуть застосовуватися до оператора(ів): **%@**. + No comment provided by engineer. + The second preset operator in the app! Другий попередньо встановлений оператор у застосунку! diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index a113c75603..ede559c968 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -1316,6 +1316,10 @@ 更改 No comment provided by engineer. + + Change chat profiles + authentication reason + Change database passphrase? 更改数据库密码? @@ -1362,10 +1366,6 @@ authentication reason set passcode view - - Change user profiles - authentication reason - Chat No comment provided by engineer. @@ -5485,10 +5485,6 @@ Enable in *Network & servers* settings. Proxy requires password No comment provided by engineer. - - Push Notifications - No comment provided by engineer. - Push notifications 推送通知 @@ -5911,14 +5907,6 @@ Enable in *Network & servers* settings. 更安全的群组 No comment provided by engineer. - - Same conditions will apply to operator **%@**. - No comment provided by engineer. - - - Same conditions will apply to operator(s): **%@**. - No comment provided by engineer. - Save 保存 @@ -7055,6 +7043,14 @@ It can happen because of some bug or when the connection is compromised.该资料仅与您的联系人共享。 No comment provided by engineer. + + The same conditions will apply to operator **%@**. + No comment provided by engineer. + + + The same conditions will apply to operator(s): **%@**. + No comment provided by engineer. + The second preset operator in the app! No comment provided by engineer. diff --git a/apps/ios/SimpleX NSE/ru.lproj/Localizable.strings b/apps/ios/SimpleX NSE/ru.lproj/Localizable.strings index 5ef592ec70..6ba39ccc63 100644 --- a/apps/ios/SimpleX NSE/ru.lproj/Localizable.strings +++ b/apps/ios/SimpleX NSE/ru.lproj/Localizable.strings @@ -1,7 +1,15 @@ -/* - Localizable.strings - SimpleX +/* notification body */ +"%d new events" = "%d новых сообщений"; + +/* notification body */ +"From: %@" = "От: %@"; + +/* notification */ +"New events" = "Новые события"; + +/* notification */ +"New messages" = "Новые сообщения"; + +/* notification body */ +"New messages in %d chats" = "Новые сообщения в %d разговоре(ах)"; - Created by EP on 30/07/2024. - Copyright © 2024 SimpleX Chat. All rights reserved. -*/ diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index a63ca87a99..41f6730fdc 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -1905,27 +1905,6 @@ /* No comment provided by engineer. */ "Group links" = "Групови линкове"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Членовете на групата могат да добавят реакции към съобщенията."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Членовете на групата могат да изпращат лични съобщения."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Членовете на групата могат да изпращат изчезващи съобщения."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Членовете на групата могат да изпращат файлове и медия."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Членовете на групата могат да изпращат SimpleX линкове."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Членовете на групата могат да изпращат гласови съобщения."; - /* notification */ "Group message:" = "Групово съобщение:"; @@ -2376,6 +2355,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Членът ще бъде премахнат от групата - това не може да бъде отменено!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Членовете на групата могат да добавят реакции към съобщенията."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Членовете на групата могат да изпращат лични съобщения."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Членовете на групата могат да изпращат изчезващи съобщения."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Членовете на групата могат да изпращат файлове и медия."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Членовете на групата могат да изпращат SimpleX линкове."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Членовете на групата могат да изпращат гласови съобщения."; + /* item status text */ "Message delivery error" = "Грешка при доставката на съобщението"; diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index a150c2427f..bbe754aa47 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -1544,24 +1544,6 @@ /* No comment provided by engineer. */ "Group links" = "Odkazy na skupiny"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Členové skupin mohou přidávat reakce na zprávy."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Členové skupiny mohou posílat přímé zprávy."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Členové skupiny mohou posílat mizící zprávy."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Členové skupiny mohou posílat soubory a média."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Členové skupiny mohou posílat hlasové zprávy."; - /* notification */ "Group message:" = "Skupinová zpráva:"; @@ -1934,6 +1916,24 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Člen bude odstraněn ze skupiny - toto nelze vzít zpět!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Členové skupin mohou přidávat reakce na zprávy."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Členové skupiny mohou posílat přímé zprávy."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Členové skupiny mohou posílat mizící zprávy."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Členové skupiny mohou posílat soubory a média."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Členové skupiny mohou posílat hlasové zprávy."; + /* item status text */ "Message delivery error" = "Chyba doručení zprávy"; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 6231000330..28cc658d30 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -892,7 +892,7 @@ "Change self-destruct passcode" = "Selbstzerstörungs-Zugangscode ändern"; /* authentication reason */ -"Change user profiles" = "Chat-Profile wechseln"; +"Change chat profiles" = "Chat-Profile wechseln"; /* chat item text */ "changed address for you" = "Wechselte die Empfängeradresse von Ihnen"; @@ -2424,27 +2424,6 @@ /* No comment provided by engineer. */ "Group links" = "Gruppen-Links"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Gruppenmitglieder können eine Reaktion auf Nachrichten geben."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Gruppenmitglieder können Direktnachrichten versenden."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Gruppenmitglieder können verschwindende Nachrichten senden."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Gruppenmitglieder können Dateien und Medien senden."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Gruppenmitglieder können SimpleX-Links senden."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Gruppenmitglieder können Sprachnachrichten versenden."; - /* notification */ "Group message:" = "Grppennachricht:"; @@ -2934,6 +2913,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Das Mitglied wird aus der Gruppe entfernt. Dies kann nicht rückgängig gemacht werden!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Gruppenmitglieder können eine Reaktion auf Nachrichten geben."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Gruppenmitglieder können Direktnachrichten versenden."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Gruppenmitglieder können verschwindende Nachrichten senden."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Gruppenmitglieder können Dateien und Medien senden."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Gruppenmitglieder können SimpleX-Links senden."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Gruppenmitglieder können Sprachnachrichten versenden."; + /* No comment provided by engineer. */ "Menus" = "Menüs"; @@ -3671,9 +3671,6 @@ /* No comment provided by engineer. */ "Push notifications" = "Push-Benachrichtigungen"; -/* No comment provided by engineer. */ -"Push Notifications" = "Push-Benachrichtigungen"; - /* No comment provided by engineer. */ "Push server" = "Push-Server"; @@ -3949,10 +3946,10 @@ "Safer groups" = "Sicherere Gruppen"; /* No comment provided by engineer. */ -"Same conditions will apply to operator **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**."; +"The same conditions will apply to operator **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**."; /* No comment provided by engineer. */ -"Same conditions will apply to operator(s): **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**."; +"The same conditions will apply to operator(s): **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**."; /* alert button chat item action */ diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index d15e6d75ce..1ccb679069 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -892,7 +892,7 @@ "Change self-destruct passcode" = "Cambiar código autodestrucción"; /* authentication reason */ -"Change user profiles" = "Cambiar perfil de usuario"; +"Change chat profiles" = "Cambiar perfil de usuario"; /* chat item text */ "changed address for you" = "ha cambiado tu servidor de envío"; @@ -2424,27 +2424,6 @@ /* No comment provided by engineer. */ "Group links" = "Enlaces de grupo"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Los miembros pueden añadir reacciones a los mensajes."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Los miembros del grupo pueden enviar mensajes directos."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Los miembros del grupo pueden enviar mensajes temporales."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Los miembros del grupo pueden enviar archivos y multimedia."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Los miembros del grupo pueden enviar enlaces SimpleX."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Los miembros del grupo pueden enviar mensajes de voz."; - /* notification */ "Group message:" = "Mensaje de grupo:"; @@ -2934,6 +2913,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "El miembro será expulsado del grupo. ¡No podrá deshacerse!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Los miembros pueden añadir reacciones a los mensajes."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Los miembros del grupo pueden enviar mensajes directos."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Los miembros del grupo pueden enviar mensajes temporales."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Los miembros del grupo pueden enviar archivos y multimedia."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Los miembros del grupo pueden enviar enlaces SimpleX."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Los miembros del grupo pueden enviar mensajes de voz."; + /* No comment provided by engineer. */ "Menus" = "Menus"; @@ -3669,10 +3669,7 @@ "Proxy requires password" = "El proxy requiere contraseña"; /* No comment provided by engineer. */ -"Push notifications" = "Notificaciones automáticas"; - -/* No comment provided by engineer. */ -"Push Notifications" = "Notificaciones push"; +"Push notifications" = "Notificaciones push"; /* No comment provided by engineer. */ "Push server" = "Servidor push"; @@ -3949,10 +3946,10 @@ "Safer groups" = "Grupos más seguros"; /* No comment provided by engineer. */ -"Same conditions will apply to operator **%@**." = "Las mismas condiciones se aplicarán al operador **%@**."; +"The same conditions will apply to operator **%@**." = "Las mismas condiciones se aplicarán al operador **%@**."; /* No comment provided by engineer. */ -"Same conditions will apply to operator(s): **%@**." = "Las mismas condiciones se aplicarán a el/los operador(es) **%@**."; +"The same conditions will apply to operator(s): **%@**." = "Las mismas condiciones se aplicarán a el/los operador(es) **%@**."; /* alert button chat item action */ diff --git a/apps/ios/fi.lproj/Localizable.strings b/apps/ios/fi.lproj/Localizable.strings index 8946be02b4..486c0e7650 100644 --- a/apps/ios/fi.lproj/Localizable.strings +++ b/apps/ios/fi.lproj/Localizable.strings @@ -1520,24 +1520,6 @@ /* No comment provided by engineer. */ "Group links" = "Ryhmälinkit"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Ryhmän jäsenet voivat lisätä viestireaktioita."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Ryhmän jäsenet voivat lähettää suoraviestejä."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Ryhmän jäsenet voivat lähettää katoavia viestejä."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Ryhmän jäsenet voivat lähettää ääniviestejä."; - /* notification */ "Group message:" = "Ryhmäviesti:"; @@ -1910,6 +1892,24 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Jäsen poistetaan ryhmästä - tätä ei voi perua!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Ryhmän jäsenet voivat lisätä viestireaktioita."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Ryhmän jäsenet voivat lähettää suoraviestejä."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Ryhmän jäsenet voivat lähettää katoavia viestejä."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Ryhmän jäsenet voivat lähettää ääniviestejä."; + /* item status text */ "Message delivery error" = "Viestin toimitusvirhe"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index f1a8e97758..1a9e289404 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -2301,27 +2301,6 @@ /* No comment provided by engineer. */ "Group links" = "Liens de groupe"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Les membres du groupe peuvent ajouter des réactions aux messages."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Les membres du groupe peuvent envoyer des messages directs."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Les membres du groupes peuvent envoyer des messages éphémères."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Les membres du groupe peuvent envoyer des fichiers et des médias."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Les membres du groupe peuvent envoyer des liens SimpleX."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Les membres du groupe peuvent envoyer des messages vocaux."; - /* notification */ "Group message:" = "Message du groupe :"; @@ -2805,6 +2784,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Ce membre sera retiré du groupe - impossible de revenir en arrière !"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Les membres du groupe peuvent ajouter des réactions aux messages."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Les membres du groupe peuvent envoyer des messages directs."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Les membres du groupes peuvent envoyer des messages éphémères."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Les membres du groupe peuvent envoyer des fichiers et des médias."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Les membres du groupe peuvent envoyer des liens SimpleX."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Les membres du groupe peuvent envoyer des messages vocaux."; + /* No comment provided by engineer. */ "Menus" = "Menus"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index c1008ad30b..4893d5a13f 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -388,6 +388,9 @@ /* No comment provided by engineer. */ "Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Cím hozzáadása a profilhoz, hogy az ismerősei megoszthassák másokkal. A profilfrissítés elküldésre kerül az ismerősei számára."; +/* No comment provided by engineer. */ +"Add friends" = "Barátok hozzáadása"; + /* No comment provided by engineer. */ "Add profile" = "Profil hozzáadása"; @@ -397,12 +400,18 @@ /* No comment provided by engineer. */ "Add servers by scanning QR codes." = "Kiszolgáló hozzáadása QR-kód beolvasásával."; +/* No comment provided by engineer. */ +"Add team members" = "Csapattagok hozzáadása"; + /* No comment provided by engineer. */ "Add to another device" = "Hozzáadás egy másik eszközhöz"; /* No comment provided by engineer. */ "Add welcome message" = "Üdvözlőüzenet hozzáadása"; +/* No comment provided by engineer. */ +"Add your team members to the conversations." = "Adja hozzá csapattagjait a beszélgetésekhez."; + /* No comment provided by engineer. */ "Added media & file servers" = "Hozzáadott média- és fájlkiszolgálók"; @@ -770,7 +779,7 @@ "Blur for better privacy." = "Elhomályosítás a jobb adatvédelemért."; /* No comment provided by engineer. */ -"Blur media" = "Média elhomályosítása"; +"Blur media" = "Médiatartalom elhomályosítása"; /* No comment provided by engineer. */ "bold" = "félkövér"; @@ -793,6 +802,12 @@ /* No comment provided by engineer. */ "Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Bolgár, finn, thai és ukrán – köszönet a felhasználóknak és a [Weblate-nek](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!"; +/* No comment provided by engineer. */ +"Business address" = "Üzleti cím"; + +/* No comment provided by engineer. */ +"Business chats" = "Üzleti csevegések"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "A csevegési profillal (alapértelmezett), vagy a [kapcsolattal] (https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BÉTA)."; @@ -892,7 +907,7 @@ "Change self-destruct passcode" = "Önmegsemmisító jelkód megváltoztatása"; /* authentication reason */ -"Change user profiles" = "Felhasználói profilok megváltoztatása"; +"Change chat profiles" = "Felhasználói profilok megváltoztatása"; /* chat item text */ "changed address for you" = "cím megváltoztatva"; @@ -909,6 +924,15 @@ /* chat item text */ "changing address…" = "cím megváltoztatása…"; +/* No comment provided by engineer. */ +"Chat" = "Csevegés"; + +/* No comment provided by engineer. */ +"Chat already exists" = "A csevegés már létezik"; + +/* No comment provided by engineer. */ +"Chat already exists!" = "A csevegés már létezik!"; + /* No comment provided by engineer. */ "Chat colors" = "Csevegés színei"; @@ -954,6 +978,12 @@ /* No comment provided by engineer. */ "Chat theme" = "Csevegés témája"; +/* No comment provided by engineer. */ +"Chat will be deleted for all members - this cannot be undone!" = "A csevegés minden tag számára törlésre kerül - ezt a műveletet nem lehet visszavonni!"; + +/* No comment provided by engineer. */ +"Chat will be deleted for you - this cannot be undone!" = "A csevegés törlésre kerül az Ön számára - ezt a műveletet nem lehet visszavonni!"; + /* No comment provided by engineer. */ "Chats" = "Csevegések"; @@ -1475,12 +1505,18 @@ /* No comment provided by engineer. */ "Delete and notify contact" = "Törlés, és az ismerős értesítése"; +/* No comment provided by engineer. */ +"Delete chat" = "Csevegés törlése"; + /* No comment provided by engineer. */ "Delete chat profile" = "Csevegési profil törlése"; /* No comment provided by engineer. */ "Delete chat profile?" = "Csevegési profil törlése?"; +/* No comment provided by engineer. */ +"Delete chat?" = "Csevegés törlése?"; + /* No comment provided by engineer. */ "Delete connection" = "Kapcsolat törlése"; @@ -1655,6 +1691,9 @@ /* chat feature */ "Direct messages" = "Közvetlen üzenetek"; +/* No comment provided by engineer. */ +"Direct messages between members are prohibited in this chat." = "A tagok közötti közvetlen üzenetek le vannak tiltva ebben a csevegésben."; + /* No comment provided by engineer. */ "Direct messages between members are prohibited." = "A közvetlen üzenetek küldése a tagok között le van tiltva ebben a csoportban."; @@ -2424,27 +2463,6 @@ /* No comment provided by engineer. */ "Group links" = "Csoporthivatkozások"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Csoporttagok üzenetreakciókat adhatnak hozzá."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "A csoport tagjai küldhetnek eltűnő üzeneteket."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "A csoport tagjai küldhetnek fájlokat és médiatartalmakat."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "A csoport tagjai küldhetnek SimpleX-hivatkozásokat."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "A csoport tagjai küldhetnek hangüzeneteket."; - /* notification */ "Group message:" = "Csoport üzenet:"; @@ -2715,6 +2733,9 @@ /* No comment provided by engineer. */ "Invite members" = "Tagok meghívása"; +/* No comment provided by engineer. */ +"Invite to chat" = "Meghívás a csevegésbe"; + /* No comment provided by engineer. */ "Invite to group" = "Meghívás a csoportba"; @@ -2829,6 +2850,12 @@ /* swipe action */ "Leave" = "Elhagyás"; +/* No comment provided by engineer. */ +"Leave chat" = "Csevegés elhagyása"; + +/* No comment provided by engineer. */ +"Leave chat?" = "Csevegés elhagyása?"; + /* No comment provided by engineer. */ "Leave group" = "Csoport elhagyása"; @@ -2925,15 +2952,42 @@ /* item status text */ "Member inactive" = "Inaktív tag"; +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". All chat members will be notified." = "A tag szerepeköre meg fog változni a következőre: \"%@\". A csevegés tagjai értesítést fognak kapni."; + /* No comment provided by engineer. */ "Member role will be changed to \"%@\". All group members will be notified." = "A tag szerepköre meg fog változni erre: „%@”. A csoportban az összes tag értesítve lesz."; /* No comment provided by engineer. */ "Member role will be changed to \"%@\". The member will receive a new invitation." = "A tag szerepköre meg fog változni erre: „%@”. A tag új meghívást fog kapni."; +/* No comment provided by engineer. */ +"Member will be removed from chat - this cannot be undone!" = "A tag el lesz távolítva a csevegésből - ezt a műveletet nem lehet visszavonni!"; + /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "A tag eltávolítása a csoportból - ez a művelet nem vonható vissza!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Csoporttagok üzenetreakciókat adhatnak hozzá."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "A csoport tagjai küldhetnek eltűnő üzeneteket."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "A csoport tagjai küldhetnek fájlokat és médiatartalmakat."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "A csoport tagjai küldhetnek SimpleX-hivatkozásokat."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "A csoport tagjai küldhetnek hangüzeneteket."; + /* No comment provided by engineer. */ "Menus" = "Menük"; @@ -3329,6 +3383,9 @@ /* No comment provided by engineer. */ "Onion hosts will not be used." = "Onion-kiszolgálók nem lesznek használva."; +/* No comment provided by engineer. */ +"Only chat owners can change preferences." = "Csak a csevegés tulajdonosai módosíthatják a beállításokat."; + /* No comment provided by engineer. */ "Only client devices store user profiles, contacts, groups, and messages." = "Csak az eszközök alkalmazásai tárolják a felhasználó-profilokat, névjegyeket, csoportokat és a **2 rétegű végpontok közötti titkosítással** küldött üzeneteket."; @@ -3407,6 +3464,9 @@ /* alert title */ "Operator server" = "Kiszolgáló üzemeltető"; +/* No comment provided by engineer. */ +"Or import archive file" = "Vagy archívumfájl importálása"; + /* No comment provided by engineer. */ "Or paste archive link" = "Vagy az archívum hivatkozásának beillesztése"; @@ -3575,6 +3635,9 @@ /* No comment provided by engineer. */ "Privacy & security" = "Adatvédelem és biztonság"; +/* No comment provided by engineer. */ +"Privacy for your customers." = "Az Ön ügyfeleinek adatvédelme."; + /* No comment provided by engineer. */ "Privacy redefined" = "Adatvédelem újraértelmezve"; @@ -3671,9 +3734,6 @@ /* No comment provided by engineer. */ "Push notifications" = "Push-értesítések"; -/* No comment provided by engineer. */ -"Push Notifications" = "Push értesítések"; - /* No comment provided by engineer. */ "Push server" = "Push-kiszolgáló"; @@ -3949,10 +4009,10 @@ "Safer groups" = "Biztonságosabb csoportok"; /* No comment provided by engineer. */ -"Same conditions will apply to operator **%@**." = "Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**."; +"The same conditions will apply to operator **%@**." = "Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**."; /* No comment provided by engineer. */ -"Same conditions will apply to operator(s): **%@**." = "Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**."; +"The same conditions will apply to operator(s): **%@**." = "Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**."; /* alert button chat item action */ @@ -4007,10 +4067,10 @@ "Saved" = "Mentett"; /* No comment provided by engineer. */ -"Saved from" = "Mentve innen:"; +"Saved from" = "Elmentve innen:"; /* No comment provided by engineer. */ -"saved from %@" = "mentve innen: %@"; +"saved from %@" = "elmentve innen: %@"; /* message info title */ "Saved message" = "Mentett üzenet"; @@ -4580,6 +4640,9 @@ /* No comment provided by engineer. */ "Tap button " = "Koppintson a "; +/* No comment provided by engineer. */ +"Tap Create SimpleX address in the menu to create it later." = "Koppintson a SimpleX-cím létrehozása menüpontra a későbbi létrehozáshoz."; + /* No comment provided by engineer. */ "Tap to activate profile." = "A profil aktiválásához koppintson az ikonra."; @@ -5282,6 +5345,9 @@ /* No comment provided by engineer. */ "You are already connected to %@." = "Ön már kapcsolódva van ehhez: %@."; +/* No comment provided by engineer. */ +"You are already connected with %@." = "Ön már kapcsolódva van vele: %@."; + /* No comment provided by engineer. */ "You are already connecting to %@." = "Már folyamatban van a kapcsolódás ehhez: %@."; @@ -5480,6 +5546,9 @@ /* No comment provided by engineer. */ "You will still receive calls and notifications from muted profiles when they are active." = "Továbbra is kap hívásokat és értesítéseket a némított profiloktól, ha azok aktívak."; +/* No comment provided by engineer. */ +"You will stop receiving messages from this chat. Chat history will be preserved." = "Ön nem fog több üzenetet kapni ebből a csevegésből, de a csevegés előzményei megmaradnak."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Ettől a csoporttól nem fog értesítéseket kapni. A csevegési előzmények megmaradnak."; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 42f399b710..2fe1216f35 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -388,6 +388,9 @@ /* No comment provided by engineer. */ "Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Aggiungi l'indirizzo al tuo profilo, in modo che i tuoi contatti possano condividerlo con altre persone. L'aggiornamento del profilo verrà inviato ai tuoi contatti."; +/* No comment provided by engineer. */ +"Add friends" = "Aggiungi amici"; + /* No comment provided by engineer. */ "Add profile" = "Aggiungi profilo"; @@ -397,12 +400,18 @@ /* No comment provided by engineer. */ "Add servers by scanning QR codes." = "Aggiungi server scansionando codici QR."; +/* No comment provided by engineer. */ +"Add team members" = "Aggiungi membri del team"; + /* No comment provided by engineer. */ "Add to another device" = "Aggiungi ad un altro dispositivo"; /* No comment provided by engineer. */ "Add welcome message" = "Aggiungi messaggio di benvenuto"; +/* No comment provided by engineer. */ +"Add your team members to the conversations." = "Aggiungi i membri del tuo team alle conversazioni."; + /* No comment provided by engineer. */ "Added media & file servers" = "Server di multimediali e file aggiunti"; @@ -793,6 +802,12 @@ /* No comment provided by engineer. */ "Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Bulgaro, finlandese, tailandese e ucraino - grazie agli utenti e a [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!"; +/* No comment provided by engineer. */ +"Business address" = "Indirizzo di lavoro"; + +/* No comment provided by engineer. */ +"Business chats" = "Chat di lavoro"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; @@ -892,7 +907,7 @@ "Change self-destruct passcode" = "Cambia codice di autodistruzione"; /* authentication reason */ -"Change user profiles" = "Modifica profili utente"; +"Change chat profiles" = "Modifica profili utente"; /* chat item text */ "changed address for you" = "indirizzo cambiato per te"; @@ -909,6 +924,15 @@ /* chat item text */ "changing address…" = "cambio indirizzo…"; +/* No comment provided by engineer. */ +"Chat" = "Chat"; + +/* No comment provided by engineer. */ +"Chat already exists" = "La chat esiste già"; + +/* No comment provided by engineer. */ +"Chat already exists!" = "La chat esiste già!"; + /* No comment provided by engineer. */ "Chat colors" = "Colori della chat"; @@ -954,6 +978,12 @@ /* No comment provided by engineer. */ "Chat theme" = "Tema della chat"; +/* No comment provided by engineer. */ +"Chat will be deleted for all members - this cannot be undone!" = "La chat verrà eliminata per tutti i membri, non è reversibile!"; + +/* No comment provided by engineer. */ +"Chat will be deleted for you - this cannot be undone!" = "La chat verrà eliminata solo per te, non è reversibile!"; + /* No comment provided by engineer. */ "Chats" = "Chat"; @@ -1475,12 +1505,18 @@ /* No comment provided by engineer. */ "Delete and notify contact" = "Elimina e avvisa il contatto"; +/* No comment provided by engineer. */ +"Delete chat" = "Elimina chat"; + /* No comment provided by engineer. */ "Delete chat profile" = "Elimina il profilo di chat"; /* No comment provided by engineer. */ "Delete chat profile?" = "Eliminare il profilo di chat?"; +/* No comment provided by engineer. */ +"Delete chat?" = "Eliminare la chat?"; + /* No comment provided by engineer. */ "Delete connection" = "Elimina connessione"; @@ -1655,6 +1691,9 @@ /* chat feature */ "Direct messages" = "Messaggi diretti"; +/* No comment provided by engineer. */ +"Direct messages between members are prohibited in this chat." = "I messaggi diretti tra i membri sono vietati in questa chat."; + /* No comment provided by engineer. */ "Direct messages between members are prohibited." = "I messaggi diretti tra i membri sono vietati in questo gruppo."; @@ -2424,27 +2463,6 @@ /* No comment provided by engineer. */ "Group links" = "Link del gruppo"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "I membri del gruppo possono aggiungere reazioni ai messaggi."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "I membri del gruppo possono inviare messaggi diretti."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "I membri del gruppo possono inviare messaggi a tempo."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "I membri del gruppo possono inviare file e contenuti multimediali."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "I membri del gruppo possono inviare link di Simplex."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "I membri del gruppo possono inviare messaggi vocali."; - /* notification */ "Group message:" = "Messaggio del gruppo:"; @@ -2715,6 +2733,9 @@ /* No comment provided by engineer. */ "Invite members" = "Invita membri"; +/* No comment provided by engineer. */ +"Invite to chat" = "Invita in chat"; + /* No comment provided by engineer. */ "Invite to group" = "Invita al gruppo"; @@ -2829,6 +2850,12 @@ /* swipe action */ "Leave" = "Esci"; +/* No comment provided by engineer. */ +"Leave chat" = "Esci dalla chat"; + +/* No comment provided by engineer. */ +"Leave chat?" = "Uscire dalla chat?"; + /* No comment provided by engineer. */ "Leave group" = "Esci dal gruppo"; @@ -2925,15 +2952,42 @@ /* item status text */ "Member inactive" = "Membro inattivo"; +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". All chat members will be notified." = "Il ruolo del membro verrà cambiato in \"%@\". Verranno notificati tutti i membri della chat."; + /* No comment provided by engineer. */ "Member role will be changed to \"%@\". All group members will be notified." = "Il ruolo del membro verrà cambiato in \"%@\". Tutti i membri del gruppo verranno avvisati."; /* No comment provided by engineer. */ "Member role will be changed to \"%@\". The member will receive a new invitation." = "Il ruolo del membro verrà cambiato in \"%@\". Il membro riceverà un invito nuovo."; +/* No comment provided by engineer. */ +"Member will be removed from chat - this cannot be undone!" = "Il membro verrà rimosso dalla chat, non è reversibile!"; + /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Il membro verrà rimosso dal gruppo, non è reversibile!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "I membri del gruppo possono aggiungere reazioni ai messaggi."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "I membri del gruppo possono inviare messaggi diretti."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "I membri del gruppo possono inviare messaggi a tempo."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "I membri del gruppo possono inviare file e contenuti multimediali."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "I membri del gruppo possono inviare link di Simplex."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "I membri del gruppo possono inviare messaggi vocali."; + /* No comment provided by engineer. */ "Menus" = "Menu"; @@ -3329,6 +3383,9 @@ /* No comment provided by engineer. */ "Onion hosts will not be used." = "Gli host Onion non verranno usati."; +/* No comment provided by engineer. */ +"Only chat owners can change preferences." = "Solo i proprietari della chat possono modificarne le preferenze."; + /* No comment provided by engineer. */ "Only client devices store user profiles, contacts, groups, and messages." = "Solo i dispositivi client archiviano profili utente, i contatti, i gruppi e i messaggi inviati con la **crittografia end-to-end a 2 livelli**."; @@ -3407,6 +3464,9 @@ /* alert title */ "Operator server" = "Server dell'operatore"; +/* No comment provided by engineer. */ +"Or import archive file" = "O importa file archivio"; + /* No comment provided by engineer. */ "Or paste archive link" = "O incolla il link dell'archivio"; @@ -3575,6 +3635,9 @@ /* No comment provided by engineer. */ "Privacy & security" = "Privacy e sicurezza"; +/* No comment provided by engineer. */ +"Privacy for your customers." = "Privacy per i tuoi clienti."; + /* No comment provided by engineer. */ "Privacy redefined" = "Privacy ridefinita"; @@ -3671,9 +3734,6 @@ /* No comment provided by engineer. */ "Push notifications" = "Notifiche push"; -/* No comment provided by engineer. */ -"Push Notifications" = "Notifiche push"; - /* No comment provided by engineer. */ "Push server" = "Server push"; @@ -3949,10 +4009,10 @@ "Safer groups" = "Gruppi più sicuri"; /* No comment provided by engineer. */ -"Same conditions will apply to operator **%@**." = "Le stesse condizioni si applicheranno all'operatore **%@**."; +"The same conditions will apply to operator **%@**." = "Le stesse condizioni si applicheranno all'operatore **%@**."; /* No comment provided by engineer. */ -"Same conditions will apply to operator(s): **%@**." = "Le stesse condizioni si applicheranno agli operatori **%@**."; +"The same conditions will apply to operator(s): **%@**." = "Le stesse condizioni si applicheranno agli operatori **%@**."; /* alert button chat item action */ @@ -4580,6 +4640,9 @@ /* No comment provided by engineer. */ "Tap button " = "Tocca il pulsante "; +/* No comment provided by engineer. */ +"Tap Create SimpleX address in the menu to create it later." = "Tocca \"Crea indirizzo SimpleX\" nel menu per crearlo più tardi."; + /* No comment provided by engineer. */ "Tap to activate profile." = "Tocca per attivare il profilo."; @@ -5282,6 +5345,9 @@ /* No comment provided by engineer. */ "You are already connected to %@." = "Sei già connesso/a a %@."; +/* No comment provided by engineer. */ +"You are already connected with %@." = "Sei già connesso/a con %@."; + /* No comment provided by engineer. */ "You are already connecting to %@." = "Ti stai già connettendo a %@."; @@ -5480,6 +5546,9 @@ /* No comment provided by engineer. */ "You will still receive calls and notifications from muted profiles when they are active." = "Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi."; +/* No comment provided by engineer. */ +"You will stop receiving messages from this chat. Chat history will be preserved." = "Non riceverai più messaggi da questa chat. La cronologia della chat verrà conservata."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Non riceverai più messaggi da questo gruppo. La cronologia della chat verrà conservata."; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 019472b804..06fa3f70b3 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -1661,24 +1661,6 @@ /* No comment provided by engineer. */ "Group links" = "グループのリンク"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "グループメンバーはメッセージへのリアクションを追加できます。"; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "グループのメンバーがメッセージを完全削除することができます。(24時間)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "グループのメンバーがダイレクトメッセージを送信できます。"; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "グループのメンバーが消えるメッセージを送信できます。"; - -/* No comment provided by engineer. */ -"Members can send files and media." = "グループメンバーはファイルやメディアを送信できます。"; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "グループのメンバーが音声メッセージを送信できます。"; - /* notification */ "Group message:" = "グループメッセージ:"; @@ -2051,6 +2033,24 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "メンバーをグループから除名する (※元に戻せません※)!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "グループメンバーはメッセージへのリアクションを追加できます。"; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "グループのメンバーがメッセージを完全削除することができます。(24時間)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "グループのメンバーがダイレクトメッセージを送信できます。"; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "グループのメンバーが消えるメッセージを送信できます。"; + +/* No comment provided by engineer. */ +"Members can send files and media." = "グループメンバーはファイルやメディアを送信できます。"; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "グループのメンバーが音声メッセージを送信できます。"; + /* item status text */ "Message delivery error" = "メッセージ送信エラー"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index 652ccdf63c..edb123334d 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -388,6 +388,9 @@ /* No comment provided by engineer. */ "Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Voeg een adres toe aan uw profiel, zodat uw contacten het met andere mensen kunnen delen. Profiel update wordt naar uw contacten verzonden."; +/* No comment provided by engineer. */ +"Add friends" = "Vrienden toevoegen"; + /* No comment provided by engineer. */ "Add profile" = "Profiel toevoegen"; @@ -397,12 +400,18 @@ /* No comment provided by engineer. */ "Add servers by scanning QR codes." = "Servers toevoegen door QR-codes te scannen."; +/* No comment provided by engineer. */ +"Add team members" = "Teamleden toevoegen"; + /* No comment provided by engineer. */ "Add to another device" = "Toevoegen aan een ander apparaat"; /* No comment provided by engineer. */ "Add welcome message" = "Welkom bericht toevoegen"; +/* No comment provided by engineer. */ +"Add your team members to the conversations." = "Voeg uw teamleden toe aan de gesprekken."; + /* No comment provided by engineer. */ "Added media & file servers" = "Media- en bestandsservers toegevoegd"; @@ -512,7 +521,7 @@ "Allow downgrade" = "Downgraden toestaan"; /* No comment provided by engineer. */ -"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur)"; +"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Sta het definitief verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur)"; /* No comment provided by engineer. */ "Allow message reactions only if your contact allows them." = "Sta bericht reacties alleen toe als uw contact dit toestaat."; @@ -530,7 +539,7 @@ "Allow sharing" = "Delen toestaan"; /* No comment provided by engineer. */ -"Allow to irreversibly delete sent messages. (24 hours)" = "Sta toe om verzonden berichten onomkeerbaar te verwijderen. (24 uur)"; +"Allow to irreversibly delete sent messages. (24 hours)" = "Sta toe om verzonden berichten definitief te verwijderen. (24 uur)"; /* No comment provided by engineer. */ "Allow to send files and media." = "Sta toe om bestanden en media te verzenden."; @@ -554,7 +563,7 @@ "Allow your contacts to call you." = "Sta toe dat uw contacten u bellen."; /* No comment provided by engineer. */ -"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Laat uw contacten verzonden berichten onomkeerbaar verwijderen. (24 uur)"; +"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Laat uw contacten verzonden berichten definitief verwijderen. (24 uur)"; /* No comment provided by engineer. */ "Allow your contacts to send disappearing messages." = "Sta toe dat uw contacten verdwijnende berichten verzenden."; @@ -659,7 +668,7 @@ "Audio/video calls" = "Audio/video oproepen"; /* No comment provided by engineer. */ -"Audio/video calls are prohibited." = "Audio/video gesprekken zijn verboden."; +"Audio/video calls are prohibited." = "Audio/video gesprekken zijn niet toegestaan."; /* PIN entry */ "Authentication cancelled" = "Verificatie geannuleerd"; @@ -793,6 +802,12 @@ /* No comment provided by engineer. */ "Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Bulgaars, Fins, Thais en Oekraïens - dankzij de gebruikers en [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!"; +/* No comment provided by engineer. */ +"Business address" = "Zakelijk adres"; + +/* No comment provided by engineer. */ +"Business chats" = "Zakelijke chats"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Via chatprofiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; @@ -815,7 +830,7 @@ "Calls" = "Oproepen"; /* No comment provided by engineer. */ -"Calls prohibited!" = "Bellen verboden!"; +"Calls prohibited!" = "Bellen niet toegestaan!"; /* No comment provided by engineer. */ "Camera not available" = "Camera niet beschikbaar"; @@ -892,7 +907,7 @@ "Change self-destruct passcode" = "Zelfvernietigings code wijzigen"; /* authentication reason */ -"Change user profiles" = "Gebruikersprofielen wijzigen"; +"Change chat profiles" = "Gebruikersprofielen wijzigen"; /* chat item text */ "changed address for you" = "adres voor u gewijzigd"; @@ -909,6 +924,15 @@ /* chat item text */ "changing address…" = "adres wijzigen…"; +/* No comment provided by engineer. */ +"Chat" = "Chat"; + +/* No comment provided by engineer. */ +"Chat already exists" = "Chat bestaat al"; + +/* No comment provided by engineer. */ +"Chat already exists!" = "Chat bestaat al!"; + /* No comment provided by engineer. */ "Chat colors" = "Chat kleuren"; @@ -954,6 +978,12 @@ /* No comment provided by engineer. */ "Chat theme" = "Chat thema"; +/* No comment provided by engineer. */ +"Chat will be deleted for all members - this cannot be undone!" = "De chat wordt voor alle leden verwijderd - dit kan niet ongedaan worden gemaakt!"; + +/* No comment provided by engineer. */ +"Chat will be deleted for you - this cannot be undone!" = "De chat wordt voor je verwijderd - dit kan niet ongedaan worden gemaakt!"; + /* No comment provided by engineer. */ "Chats" = "Chats"; @@ -1475,12 +1505,18 @@ /* No comment provided by engineer. */ "Delete and notify contact" = "Verwijderen en contact op de hoogte stellen"; +/* No comment provided by engineer. */ +"Delete chat" = "Chat verwijderen"; + /* No comment provided by engineer. */ "Delete chat profile" = "Chatprofiel verwijderen"; /* No comment provided by engineer. */ "Delete chat profile?" = "Chatprofiel verwijderen?"; +/* No comment provided by engineer. */ +"Delete chat?" = "Chat verwijderen?"; + /* No comment provided by engineer. */ "Delete connection" = "Verbinding verwijderen"; @@ -1656,7 +1692,10 @@ "Direct messages" = "Directe berichten"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited." = "Directe berichten tussen leden zijn verboden in deze groep."; +"Direct messages between members are prohibited in this chat." = "Directe berichten tussen leden zijn in deze chat niet toegestaan."; + +/* No comment provided by engineer. */ +"Direct messages between members are prohibited." = "Directe berichten tussen leden zijn niet toegestaan."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Uitschakelen (overschrijvingen behouden)"; @@ -1680,10 +1719,10 @@ "Disappearing messages" = "Verdwijnende berichten"; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this chat." = "Verdwijnende berichten zijn verboden in dit gesprek."; +"Disappearing messages are prohibited in this chat." = "Verdwijnende berichten zijn niet toegestaan in dit gesprek."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited." = "Verdwijnende berichten zijn verboden in deze groep."; +"Disappearing messages are prohibited." = "Verdwijnende berichten zijn niet toegestaan."; /* No comment provided by engineer. */ "Disappears at" = "Verdwijnt op"; @@ -2254,13 +2293,13 @@ "Files and media" = "Bestanden en media"; /* No comment provided by engineer. */ -"Files and media are prohibited." = "Bestanden en media zijn verboden in deze groep."; +"Files and media are prohibited." = "Bestanden en media zijn niet toegestaan."; /* No comment provided by engineer. */ "Files and media not allowed" = "Bestanden en media niet toegestaan"; /* No comment provided by engineer. */ -"Files and media prohibited!" = "Bestanden en media verboden!"; +"Files and media prohibited!" = "Bestanden en media niet toegestaan!"; /* No comment provided by engineer. */ "Filter unread and favorite chats." = "Filter ongelezen en favoriete chats."; @@ -2424,27 +2463,6 @@ /* No comment provided by engineer. */ "Group links" = "Groep links"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Groepsleden kunnen bericht reacties toevoegen."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Groepsleden kunnen directe berichten sturen."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Groepsleden kunnen verdwijnende berichten sturen."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Groepsleden kunnen bestanden en media verzenden."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Groepsleden kunnen SimpleX-links verzenden."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Groepsleden kunnen spraak berichten verzenden."; - /* notification */ "Group message:" = "Groep bericht:"; @@ -2533,7 +2551,7 @@ "If you can't meet in person, show QR code in a video call, or share the link." = "Als je elkaar niet persoonlijk kunt ontmoeten, laat dan de QR-code zien in een videogesprek of deel de link."; /* No comment provided by engineer. */ -"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens onomkeerbaar verwijderd!"; +"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens definitief verwijderd!"; /* No comment provided by engineer. */ "If you enter your self-destruct passcode while opening the app:" = "Als u uw zelfvernietigings wachtwoord invoert tijdens het openen van de app:"; @@ -2715,6 +2733,9 @@ /* No comment provided by engineer. */ "Invite members" = "Nodig leden uit"; +/* No comment provided by engineer. */ +"Invite to chat" = "Uitnodigen voor een chat"; + /* No comment provided by engineer. */ "Invite to group" = "Uitnodigen voor groep"; @@ -2743,10 +2764,10 @@ "Irreversible message deletion" = "Onomkeerbare berichtverwijdering"; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this chat." = "Het onomkeerbaar verwijderen van berichten is verboden in dit gesprek."; +"Irreversible message deletion is prohibited in this chat." = "Het definitief verwijderen van berichten is niet toegestaan in dit gesprek."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited." = "Het onomkeerbaar verwijderen van berichten is verboden in deze groep."; +"Irreversible message deletion is prohibited." = "Het definitief verwijderen van berichten is verbHet definitief verwijderen van berichten is niet toegestaan.."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chatprofiel."; @@ -2829,6 +2850,12 @@ /* swipe action */ "Leave" = "Verlaten"; +/* No comment provided by engineer. */ +"Leave chat" = "Chat verlaten"; + +/* No comment provided by engineer. */ +"Leave chat?" = "Chat verlaten?"; + /* No comment provided by engineer. */ "Leave group" = "Groep verlaten"; @@ -2925,15 +2952,42 @@ /* item status text */ "Member inactive" = "Lid inactief"; +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". All chat members will be notified." = "De rol van het lid wordt gewijzigd naar \"%@\". Alle chatleden worden op de hoogte gebracht."; + /* No comment provided by engineer. */ "Member role will be changed to \"%@\". All group members will be notified." = "De rol van lid wordt gewijzigd in \"%@\". Alle groepsleden worden op de hoogte gebracht."; /* No comment provided by engineer. */ "Member role will be changed to \"%@\". The member will receive a new invitation." = "De rol van lid wordt gewijzigd in \"%@\". Het lid ontvangt een nieuwe uitnodiging."; +/* No comment provided by engineer. */ +"Member will be removed from chat - this cannot be undone!" = "Lid wordt verwijderd uit de chat - dit kan niet ongedaan worden gemaakt!"; + /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Lid wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Groepsleden kunnen bericht reacties toevoegen."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Groepsleden kunnen directe berichten sturen."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Groepsleden kunnen verdwijnende berichten sturen."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Groepsleden kunnen bestanden en media verzenden."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Groepsleden kunnen SimpleX-links verzenden."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Groepsleden kunnen spraak berichten verzenden."; + /* No comment provided by engineer. */ "Menus" = "Menu's"; @@ -2965,10 +3019,10 @@ "Message reactions" = "Reacties op berichten"; /* No comment provided by engineer. */ -"Message reactions are prohibited in this chat." = "Reacties op berichten zijn verboden in deze chat."; +"Message reactions are prohibited in this chat." = "Reacties op berichten zijn niet toegestaan in deze chat."; /* No comment provided by engineer. */ -"Message reactions are prohibited." = "Reacties op berichten zijn verboden in deze groep."; +"Message reactions are prohibited." = "Reacties op berichten zijn niet toegestaan."; /* notification */ "message received" = "bericht ontvangen"; @@ -3329,6 +3383,9 @@ /* No comment provided by engineer. */ "Onion hosts will not be used." = "Onion hosts worden niet gebruikt."; +/* No comment provided by engineer. */ +"Only chat owners can change preferences." = "Alleen chateigenaren kunnen voorkeuren wijzigen."; + /* No comment provided by engineer. */ "Only client devices store user profiles, contacts, groups, and messages." = "Alleen client apparaten slaan gebruikers profielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**."; @@ -3348,7 +3405,7 @@ "Only you can add message reactions." = "Alleen jij kunt bericht reacties toevoegen."; /* No comment provided by engineer. */ -"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering). (24 uur)"; +"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Alleen jij kunt berichten definitief verwijderen (je contact kan ze markeren voor verwijdering). (24 uur)"; /* No comment provided by engineer. */ "Only you can make calls." = "Alleen jij kunt bellen."; @@ -3407,6 +3464,9 @@ /* alert title */ "Operator server" = "Operatorserver"; +/* No comment provided by engineer. */ +"Or import archive file" = "Of importeer archiefbestand"; + /* No comment provided by engineer. */ "Or paste archive link" = "Of plak de archief link"; @@ -3575,6 +3635,9 @@ /* No comment provided by engineer. */ "Privacy & security" = "Privacy en beveiliging"; +/* No comment provided by engineer. */ +"Privacy for your customers." = "Privacy voor uw klanten."; + /* No comment provided by engineer. */ "Privacy redefined" = "Privacy opnieuw gedefinieerd"; @@ -3618,7 +3681,7 @@ "Prohibit audio/video calls." = "Audio/video gesprekken verbieden."; /* No comment provided by engineer. */ -"Prohibit irreversible message deletion." = "Verbied het onomkeerbaar verwijderen van berichten."; +"Prohibit irreversible message deletion." = "Verbied het definitief verwijderen van berichten."; /* No comment provided by engineer. */ "Prohibit message reactions." = "Bericht reacties verbieden."; @@ -3671,9 +3734,6 @@ /* No comment provided by engineer. */ "Push notifications" = "Push meldingen"; -/* No comment provided by engineer. */ -"Push Notifications" = "Pushmeldingen"; - /* No comment provided by engineer. */ "Push server" = "Push server"; @@ -3949,10 +4009,10 @@ "Safer groups" = "Veiligere groepen"; /* No comment provided by engineer. */ -"Same conditions will apply to operator **%@**." = "Dezelfde voorwaarden gelden voor operator **%@**."; +"The same conditions will apply to operator **%@**." = "Dezelfde voorwaarden gelden voor operator **%@**."; /* No comment provided by engineer. */ -"Same conditions will apply to operator(s): **%@**." = "Dezelfde voorwaarden gelden voor operator(s): **%@**."; +"The same conditions will apply to operator(s): **%@**." = "Dezelfde voorwaarden gelden voor operator(s): **%@**."; /* alert button chat item action */ @@ -4416,7 +4476,7 @@ "SimpleX links" = "SimpleX links"; /* No comment provided by engineer. */ -"SimpleX links are prohibited." = "SimpleX-links zijn in deze groep verboden."; +"SimpleX links are prohibited." = "SimpleX-links zijn niet toegestaan."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "SimpleX-links zijn niet toegestaan"; @@ -4580,6 +4640,9 @@ /* No comment provided by engineer. */ "Tap button " = "Tik op de knop "; +/* No comment provided by engineer. */ +"Tap Create SimpleX address in the menu to create it later." = "Tik op SimpleX-adres maken in het menu om het later te maken."; + /* No comment provided by engineer. */ "Tap to activate profile." = "Tik hier om profiel te activeren."; @@ -4734,7 +4797,7 @@ "This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren."; /* No comment provided by engineer. */ -"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren."; +"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan definitief verloren."; /* E2EE info chat item */ "This chat is protected by end-to-end encryption." = "Deze chat is beveiligd met end-to-end codering."; @@ -5145,16 +5208,16 @@ "Voice messages" = "Spraak berichten"; /* No comment provided by engineer. */ -"Voice messages are prohibited in this chat." = "Spraak berichten zijn verboden in deze chat."; +"Voice messages are prohibited in this chat." = "Spraak berichten zijn niet toegestaan in dit gesprek."; /* No comment provided by engineer. */ -"Voice messages are prohibited." = "Spraak berichten zijn verboden in deze groep."; +"Voice messages are prohibited." = "Spraak berichten zijn niet toegestaan."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Spraakberichten niet toegestaan"; /* No comment provided by engineer. */ -"Voice messages prohibited!" = "Spraak berichten verboden!"; +"Voice messages prohibited!" = "Spraak berichten niet toegestaan!"; /* No comment provided by engineer. */ "waiting for answer…" = "wachten op antwoord…"; @@ -5282,6 +5345,9 @@ /* No comment provided by engineer. */ "You are already connected to %@." = "U bent al verbonden met %@."; +/* No comment provided by engineer. */ +"You are already connected with %@." = "U bent al verbonden met %@."; + /* No comment provided by engineer. */ "You are already connecting to %@." = "U maakt al verbinding met %@."; @@ -5480,6 +5546,9 @@ /* No comment provided by engineer. */ "You will still receive calls and notifications from muted profiles when they are active." = "U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn."; +/* No comment provided by engineer. */ +"You will stop receiving messages from this chat. Chat history will be preserved." = "U ontvangt geen berichten meer van deze chat. De chatgeschiedenis blijft bewaard."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Je ontvangt geen berichten meer van deze groep. Je gesprek geschiedenis blijft behouden."; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index 04279064ee..782e1c18f4 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -2277,27 +2277,6 @@ /* No comment provided by engineer. */ "Group links" = "Linki grupowe"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Członkowie grupy mogą dodawać reakcje wiadomości."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Członkowie grupy mogą wysyłać bezpośrednie wiadomości."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Członkowie grupy mogą wysyłać znikające wiadomości."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Członkowie grupy mogą wysyłać pliki i media."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Członkowie grupy mogą wysyłać linki SimpleX."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Członkowie grupy mogą wysyłać wiadomości głosowe."; - /* notification */ "Group message:" = "Wiadomość grupowa:"; @@ -2778,6 +2757,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Członek zostanie usunięty z grupy - nie można tego cofnąć!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Członkowie grupy mogą dodawać reakcje wiadomości."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Członkowie grupy mogą wysyłać bezpośrednie wiadomości."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Członkowie grupy mogą wysyłać znikające wiadomości."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Członkowie grupy mogą wysyłać pliki i media."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Członkowie grupy mogą wysyłać linki SimpleX."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Członkowie grupy mogą wysyłać wiadomości głosowe."; + /* No comment provided by engineer. */ "Menus" = "Menu"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index bb7ec81ace..c2124b34a4 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -82,6 +82,9 @@ /* No comment provided by engineer. */ "**Recommended**: device token and end-to-end encrypted notifications are sent to SimpleX Chat push server, but it does not see the message content, size or who it is from." = "**Рекомендовано**: токен устройства и уведомления отправляются на сервер SimpleX Chat, но сервер не получает сами сообщения, их размер или от кого они."; +/* No comment provided by engineer. */ +"**Scan / Paste link**: to connect via a link you received." = "**Сканировать / Вставить ссылку**: чтобы соединится через полученную ссылку."; + /* No comment provided by engineer. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Внимание**: для работы мгновенных уведомлений пароль должен быть сохранен в Keychain."; @@ -142,6 +145,12 @@ /* No comment provided by engineer. */ "%@ is verified" = "%@ подтверждён"; +/* No comment provided by engineer. */ +"%@ server" = "%@ сервер"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ серверы"; + /* No comment provided by engineer. */ "%@ uploaded" = "%@ загружено"; @@ -295,6 +304,12 @@ /* time interval */ "1 week" = "1 неделю"; +/* No comment provided by engineer. */ +"1-time link" = "Одноразовая ссылка"; + +/* No comment provided by engineer. */ +"1-time link can be used *with one contact only* - share in person or via any messenger." = "Одноразовая ссылка может быть использована *только с одним контактом* - поделитесь при встрече или через любой мессенджер."; + /* No comment provided by engineer. */ "5 minutes" = "5 минут"; @@ -342,6 +357,9 @@ swipe action */ "Accept" = "Принять"; +/* No comment provided by engineer. */ +"Accept conditions" = "Принять условия"; + /* No comment provided by engineer. */ "Accept connection request?" = "Принять запрос?"; @@ -355,6 +373,9 @@ /* call status */ "accepted call" = "принятый звонок"; +/* No comment provided by engineer. */ +"Accepted conditions" = "Принятые условия"; + /* No comment provided by engineer. */ "Acknowledged" = "Подтверждено"; @@ -367,6 +388,9 @@ /* No comment provided by engineer. */ "Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Добавьте адрес в свой профиль, чтобы Ваши контакты могли поделиться им. Профиль будет отправлен Вашим контактам."; +/* No comment provided by engineer. */ +"Add friends" = "Добавить друзей"; + /* No comment provided by engineer. */ "Add profile" = "Добавить профиль"; @@ -376,12 +400,24 @@ /* No comment provided by engineer. */ "Add servers by scanning QR codes." = "Добавить серверы через QR код."; +/* No comment provided by engineer. */ +"Add team members" = "Добавить сотрудников"; + /* No comment provided by engineer. */ "Add to another device" = "Добавить на другое устройство"; /* No comment provided by engineer. */ "Add welcome message" = "Добавить приветственное сообщение"; +/* No comment provided by engineer. */ +"Add your team members to the conversations." = "Добавьте сотрудников в разговор."; + +/* No comment provided by engineer. */ +"Added media & file servers" = "Дополнительные серверы файлов и медиа"; + +/* No comment provided by engineer. */ +"Added message servers" = "Дополнительные серверы сообщений"; + /* No comment provided by engineer. */ "Additional accent" = "Дополнительный акцент"; @@ -397,6 +433,12 @@ /* No comment provided by engineer. */ "Address change will be aborted. Old receiving address will be used." = "Изменение адреса будет прекращено. Будет использоваться старый адрес."; +/* No comment provided by engineer. */ +"Address or 1-time link?" = "Адрес или одноразовая ссылка?"; + +/* No comment provided by engineer. */ +"Address settings" = "Настройки адреса"; + /* member role */ "admin" = "админ"; @@ -760,6 +802,12 @@ /* No comment provided by engineer. */ "Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Болгарский, финский, тайский и украинский - благодаря пользователям и [Weblate] (https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!"; +/* No comment provided by engineer. */ +"Business address" = "Бизнес адрес"; + +/* No comment provided by engineer. */ +"Business chats" = "Бизнес разговоры"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "По профилю чата или [по соединению](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА)."; @@ -858,6 +906,9 @@ set passcode view */ "Change self-destruct passcode" = "Изменить код самоуничтожения"; +/* authentication reason */ +"Change chat profiles" = "Поменять профили"; + /* chat item text */ "changed address for you" = "поменял(а) адрес для Вас"; @@ -873,6 +924,15 @@ /* chat item text */ "changing address…" = "смена адреса…"; +/* No comment provided by engineer. */ +"Chat" = "Разговор"; + +/* No comment provided by engineer. */ +"Chat already exists" = "Разговор уже существует"; + +/* No comment provided by engineer. */ +"Chat already exists!" = "Разговор уже существует!"; + /* No comment provided by engineer. */ "Chat colors" = "Цвета чата"; @@ -918,9 +978,21 @@ /* No comment provided by engineer. */ "Chat theme" = "Тема чата"; +/* No comment provided by engineer. */ +"Chat will be deleted for all members - this cannot be undone!" = "Разговор будет удален для всех участников - это действие нельзя отменить!"; + +/* No comment provided by engineer. */ +"Chat will be deleted for you - this cannot be undone!" = "Разговор будет удален для Вас - это действие нельзя отменить!"; + /* No comment provided by engineer. */ "Chats" = "Чаты"; +/* No comment provided by engineer. */ +"Check messages every 20 min." = "Проверять сообщения каждые 20 минут."; + +/* No comment provided by engineer. */ +"Check messages when allowed." = "Проверять сообщения по возможности."; + /* alert title */ "Check server address and try again." = "Проверьте адрес сервера и попробуйте снова."; @@ -981,6 +1053,33 @@ /* No comment provided by engineer. */ "Completed" = "Готово"; +/* No comment provided by engineer. */ +"Conditions accepted on: %@." = "Условия приняты: %@."; + +/* No comment provided by engineer. */ +"Conditions are accepted for the operator(s): **%@**." = "Условия приняты для оператора(ов): **%@**."; + +/* No comment provided by engineer. */ +"Conditions are already accepted for following operator(s): **%@**." = "Условия уже приняты для следующих оператора(ов): **%@**."; + +/* No comment provided by engineer. */ +"Conditions of use" = "Условия использования"; + +/* No comment provided by engineer. */ +"Conditions will be accepted for enabled operators after 30 days." = "Условия будут приняты для включенных операторов через 30 дней."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for operator(s): **%@**." = "Условия будут приняты для оператора(ов): **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for the operator(s): **%@**." = "Условия будут приняты для оператора(ов): **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted on: %@." = "Условия будут приняты: %@."; + +/* No comment provided by engineer. */ +"Conditions will be automatically accepted for enabled operators on: %@." = "Условия будут автоматически приняты для включенных операторов: %@."; + /* No comment provided by engineer. */ "Configure ICE servers" = "Настройка ICE серверов"; @@ -1128,6 +1227,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "Запрос на соединение отправлен!"; +/* No comment provided by engineer. */ +"Connection security" = "Безопасность соединения"; + /* No comment provided by engineer. */ "Connection terminated" = "Подключение прервано"; @@ -1209,6 +1311,9 @@ /* No comment provided by engineer. */ "Create" = "Создать"; +/* No comment provided by engineer. */ +"Create 1-time link" = "Создать одноразовую ссылку"; + /* No comment provided by engineer. */ "Create a group using a random profile." = "Создайте группу, используя случайный профиль."; @@ -1260,6 +1365,9 @@ /* No comment provided by engineer. */ "creator" = "создатель"; +/* No comment provided by engineer. */ +"Current conditions text couldn't be loaded, you can review conditions via this link:" = "Текст условий использования не может быть показан, вы можете посмотреть их через ссылку:"; + /* No comment provided by engineer. */ "Current Passcode" = "Текущий Код"; @@ -1397,12 +1505,18 @@ /* No comment provided by engineer. */ "Delete and notify contact" = "Удалить и уведомить контакт"; +/* No comment provided by engineer. */ +"Delete chat" = "Удалить разговор"; + /* No comment provided by engineer. */ "Delete chat profile" = "Удалить профиль чата"; /* No comment provided by engineer. */ "Delete chat profile?" = "Удалить профиль?"; +/* No comment provided by engineer. */ +"Delete chat?" = "Удалить разговор?"; + /* No comment provided by engineer. */ "Delete connection" = "Удалить соединение"; @@ -1508,6 +1622,9 @@ /* No comment provided by engineer. */ "Deletion errors" = "Ошибки удаления"; +/* No comment provided by engineer. */ +"Delivered even when Apple drops them." = "Доставляются даже тогда, когда Apple их теряет."; + /* No comment provided by engineer. */ "Delivery" = "Доставка"; @@ -1574,6 +1691,9 @@ /* chat feature */ "Direct messages" = "Прямые сообщения"; +/* No comment provided by engineer. */ +"Direct messages between members are prohibited in this chat." = "Прямые сообщения между членами запрещены в этом разговоре."; + /* No comment provided by engineer. */ "Direct messages between members are prohibited." = "Прямые сообщения между членами группы запрещены."; @@ -1695,6 +1815,9 @@ /* No comment provided by engineer. */ "e2e encrypted" = "e2e зашифровано"; +/* No comment provided by engineer. */ +"E2E encrypted notifications." = "E2E зашифрованные нотификации."; + /* chat item action */ "Edit" = "Редактировать"; @@ -1713,6 +1836,9 @@ /* No comment provided by engineer. */ "Enable camera access" = "Включить доступ к камере"; +/* No comment provided by engineer. */ +"Enable Flux" = "Включить Flux"; + /* No comment provided by engineer. */ "Enable for all" = "Включить для всех"; @@ -1872,12 +1998,18 @@ /* No comment provided by engineer. */ "Error aborting address change" = "Ошибка при прекращении изменения адреса"; +/* alert title */ +"Error accepting conditions" = "Ошибка приема условий"; + /* No comment provided by engineer. */ "Error accepting contact request" = "Ошибка при принятии запроса на соединение"; /* No comment provided by engineer. */ "Error adding member(s)" = "Ошибка при добавлении членов группы"; +/* alert title */ +"Error adding server" = "Ошибка добавления сервера"; + /* No comment provided by engineer. */ "Error changing address" = "Ошибка при изменении адреса"; @@ -1962,6 +2094,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Ошибка при вступлении в группу"; +/* alert title */ +"Error loading servers" = "Ошибка загрузки серверов"; + /* No comment provided by engineer. */ "Error migrating settings" = "Ошибка миграции настроек"; @@ -1995,6 +2130,9 @@ /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Ошибка сохранения пароля в Keychain"; +/* alert title */ +"Error saving servers" = "Ошибка сохранения серверов"; + /* when migrating */ "Error saving settings" = "Ошибка сохранения настроек"; @@ -2037,6 +2175,9 @@ /* No comment provided by engineer. */ "Error updating message" = "Ошибка при обновлении сообщения"; +/* alert title */ +"Error updating server" = "Ошибка сохранения сервера"; + /* No comment provided by engineer. */ "Error updating settings" = "Ошибка при сохранении настроек сети"; @@ -2064,6 +2205,9 @@ /* No comment provided by engineer. */ "Errors" = "Ошибки"; +/* servers error */ +"Errors in servers configuration." = "Ошибки в настройках серверов."; + /* No comment provided by engineer. */ "Even when disabled in the conversation." = "Даже когда они выключены в разговоре."; @@ -2190,9 +2334,24 @@ /* No comment provided by engineer. */ "Fix not supported by group member" = "Починка не поддерживается членом группы"; +/* No comment provided by engineer. */ +"for better metadata privacy." = "для лучшей конфиденциальности метаданных."; + +/* servers error */ +"For chat profile %@:" = "Для профиля чата %@:"; + /* No comment provided by engineer. */ "For console" = "Для консоли"; +/* No comment provided by engineer. */ +"For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server." = "Например, если Ваш контакт получает сообщения через сервер SimpleX Chat, Ваше приложение доставит их через сервер Flux."; + +/* No comment provided by engineer. */ +"For private routing" = "Для доставки сообщений"; + +/* No comment provided by engineer. */ +"For social media" = "Для социальных сетей"; + /* chat item action */ "Forward" = "Переслать"; @@ -2304,27 +2463,6 @@ /* No comment provided by engineer. */ "Group links" = "Ссылки групп"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Члены группы могут добавлять реакции на сообщения."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Члены группы могут необратимо удалять отправленные сообщения. (24 часа)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Члены группы могут посылать прямые сообщения."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Члены группы могут посылать исчезающие сообщения."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Члены группы могут слать файлы и медиа."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Члены группы могут отправлять ссылки SimpleX."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Члены группы могут отправлять голосовые сообщения."; - /* notification */ "Group message:" = "Групповое сообщение:"; @@ -2385,6 +2523,12 @@ /* time unit */ "hours" = "часов"; +/* No comment provided by engineer. */ +"How it affects privacy" = "Как это влияет на конфиденциальность"; + +/* No comment provided by engineer. */ +"How it helps privacy" = "Как это улучшает конфиденциальность"; + /* No comment provided by engineer. */ "How SimpleX works" = "Как SimpleX работает"; @@ -2589,6 +2733,9 @@ /* No comment provided by engineer. */ "Invite members" = "Пригласить членов группы"; +/* No comment provided by engineer. */ +"Invite to chat" = "Пригласить в разговор"; + /* No comment provided by engineer. */ "Invite to group" = "Пригласить в группу"; @@ -2703,6 +2850,12 @@ /* swipe action */ "Leave" = "Выйти"; +/* No comment provided by engineer. */ +"Leave chat" = "Покинуть разговор"; + +/* No comment provided by engineer. */ +"Leave chat?" = "Покинуть разговор?"; + /* No comment provided by engineer. */ "Leave group" = "Выйти из группы"; @@ -2799,15 +2952,42 @@ /* item status text */ "Member inactive" = "Член неактивен"; +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". All chat members will be notified." = "Роль участника будет изменена на \"%@\". Все участники разговора получат уведомление."; + /* No comment provided by engineer. */ "Member role will be changed to \"%@\". All group members will be notified." = "Роль члена группы будет изменена на \"%@\". Все члены группы получат сообщение."; /* No comment provided by engineer. */ "Member role will be changed to \"%@\". The member will receive a new invitation." = "Роль члена группы будет изменена на \"%@\". Будет отправлено новое приглашение."; +/* No comment provided by engineer. */ +"Member will be removed from chat - this cannot be undone!" = "Член будет удален из разговора - это действие нельзя отменить!"; + /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Член группы будет удален - это действие нельзя отменить!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Члены группы могут добавлять реакции на сообщения."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Члены группы могут необратимо удалять отправленные сообщения. (24 часа)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Члены группы могут посылать прямые сообщения."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Члены группы могут посылать исчезающие сообщения."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Члены группы могут слать файлы и медиа."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Члены группы могут отправлять ссылки SimpleX."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Члены группы могут отправлять голосовые сообщения."; + /* No comment provided by engineer. */ "Menus" = "Меню"; @@ -2961,6 +3141,9 @@ /* No comment provided by engineer. */ "More reliable network connection." = "Более надежное соединение с сетью."; +/* No comment provided by engineer. */ +"More reliable notifications" = "Более надежные уведомления"; + /* item status description */ "Most likely this connection is deleted." = "Скорее всего, соединение удалено."; @@ -2985,12 +3168,18 @@ /* No comment provided by engineer. */ "Network connection" = "Интернет-соединение"; +/* No comment provided by engineer. */ +"Network decentralization" = "Децентрализация сети"; + /* snd error text */ "Network issues - message expired after many attempts to send it." = "Ошибка сети - сообщение не было отправлено после многократных попыток."; /* No comment provided by engineer. */ "Network management" = "Статус сети"; +/* No comment provided by engineer. */ +"Network operator" = "Оператор сети"; + /* No comment provided by engineer. */ "Network settings" = "Настройки сети"; @@ -3018,6 +3207,9 @@ /* No comment provided by engineer. */ "New display name" = "Новое имя"; +/* notification */ +"New events" = "Новые события"; + /* No comment provided by engineer. */ "New in %@" = "Новое в %@"; @@ -3039,6 +3231,9 @@ /* No comment provided by engineer. */ "New passphrase…" = "Новый пароль…"; +/* No comment provided by engineer. */ +"New server" = "Новый сервер"; + /* No comment provided by engineer. */ "New SOCKS credentials will be used every time you start the app." = "Новые учетные данные SOCKS будут использоваться при каждом запуске приложения."; @@ -3084,6 +3279,12 @@ /* No comment provided by engineer. */ "No info, try to reload" = "Нет информации, попробуйте перезагрузить"; +/* servers error */ +"No media & file servers." = "Нет серверов файлов и медиа."; + +/* servers error */ +"No message servers." = "Нет серверов сообщений."; + /* No comment provided by engineer. */ "No network connection" = "Нет интернет-соединения"; @@ -3102,6 +3303,18 @@ /* No comment provided by engineer. */ "No received or sent files" = "Нет полученных или отправленных файлов"; +/* servers error */ +"No servers for private message routing." = "Нет серверов для доставки сообщений."; + +/* servers error */ +"No servers to receive files." = "Нет серверов для приема файлов."; + +/* servers error */ +"No servers to receive messages." = "Нет серверов для приема сообщений."; + +/* servers error */ +"No servers to send files." = "Нет серверов для отправки файлов."; + /* copied message info in history */ "no text" = "нет текста"; @@ -3123,6 +3336,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Уведомления выключены"; +/* No comment provided by engineer. */ +"Notifications privacy" = "Конфиденциальность уведомлений"; + /* No comment provided by engineer. */ "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Теперь админы могут:\n- удалять сообщения членов.\n- приостанавливать членов (роль \"наблюдатель\")"; @@ -3167,6 +3383,9 @@ /* No comment provided by engineer. */ "Onion hosts will not be used." = "Onion хосты не используются."; +/* No comment provided by engineer. */ +"Only chat owners can change preferences." = "Только владельцы разговора могут поменять предпочтения."; + /* No comment provided by engineer. */ "Only client devices store user profiles, contacts, groups, and messages." = "Только пользовательские устройства хранят контакты, группы и сообщения."; @@ -3215,12 +3434,18 @@ /* No comment provided by engineer. */ "Open" = "Открыть"; +/* No comment provided by engineer. */ +"Open changes" = "Открыть изменения"; + /* No comment provided by engineer. */ "Open chat" = "Открыть чат"; /* authentication reason */ "Open chat console" = "Открыть консоль"; +/* No comment provided by engineer. */ +"Open conditions" = "Открыть условия"; + /* No comment provided by engineer. */ "Open group" = "Открыть группу"; @@ -3233,6 +3458,15 @@ /* No comment provided by engineer. */ "Opening app…" = "Приложение отрывается…"; +/* No comment provided by engineer. */ +"Operator" = "Оператор"; + +/* alert title */ +"Operator server" = "Сервер оператора"; + +/* No comment provided by engineer. */ +"Or import archive file" = "Или импортировать файл архива"; + /* No comment provided by engineer. */ "Or paste archive link" = "Или вставьте ссылку архива"; @@ -3245,6 +3479,9 @@ /* No comment provided by engineer. */ "Or show this code" = "Или покажите этот код"; +/* No comment provided by engineer. */ +"Or to share privately" = "Или поделиться конфиденциально"; + /* No comment provided by engineer. */ "other" = "другое"; @@ -3386,6 +3623,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Адрес сервера по умолчанию"; +/* No comment provided by engineer. */ +"Preset servers" = "Серверы по умолчанию"; + /* No comment provided by engineer. */ "Preview" = "Просмотр"; @@ -3395,6 +3635,9 @@ /* No comment provided by engineer. */ "Privacy & security" = "Конфиденциальность"; +/* No comment provided by engineer. */ +"Privacy for your customers." = "Конфиденциальность для ваших покупателей."; + /* No comment provided by engineer. */ "Privacy redefined" = "Более конфиденциальный"; @@ -3738,6 +3981,12 @@ /* chat item action */ "Reveal" = "Показать"; +/* No comment provided by engineer. */ +"Review conditions" = "Посмотреть условия"; + +/* No comment provided by engineer. */ +"Review later" = "Посмотреть позже"; + /* No comment provided by engineer. */ "Revoke" = "Отозвать"; @@ -3759,6 +4008,12 @@ /* No comment provided by engineer. */ "Safer groups" = "Более безопасные группы"; +/* No comment provided by engineer. */ +"The same conditions will apply to operator **%@**." = "Те же самые условия будут приняты для оператора **%@**."; + +/* No comment provided by engineer. */ +"The same conditions will apply to operator(s): **%@**." = "Те же самые условия будут приняты для оператора(ов): **%@**."; + /* alert button chat item action */ "Save" = "Сохранить"; @@ -4024,6 +4279,9 @@ /* No comment provided by engineer. */ "Server" = "Сервер"; +/* alert message */ +"Server added to operator %@." = "Сервер добавлен к оператору %@."; + /* No comment provided by engineer. */ "Server address" = "Адрес сервера"; @@ -4033,6 +4291,15 @@ /* srv error text. */ "Server address is incompatible with network settings." = "Адрес сервера несовместим с настройками сети."; +/* alert title */ +"Server operator changed." = "Оператор серверов изменен."; + +/* No comment provided by engineer. */ +"Server operators" = "Операторы серверов"; + +/* alert title */ +"Server protocol changed." = "Протокол сервера изменен."; + /* queue info */ "server queue info: %@\n\nlast received msg: %@" = "информация сервера об очереди: %1$@\n\nпоследнее полученное сообщение: %2$@"; @@ -4118,9 +4385,15 @@ /* No comment provided by engineer. */ "Share 1-time link" = "Поделиться одноразовой ссылкой"; +/* No comment provided by engineer. */ +"Share 1-time link with a friend" = "Поделитесь одноразовой ссылкой с другом"; + /* No comment provided by engineer. */ "Share address" = "Поделиться адресом"; +/* No comment provided by engineer. */ +"Share address publicly" = "Поделитесь адресом"; + /* alert title */ "Share address with contacts?" = "Поделиться адресом с контактами?"; @@ -4133,6 +4406,9 @@ /* No comment provided by engineer. */ "Share profile" = "Поделиться профилем"; +/* No comment provided by engineer. */ +"Share SimpleX address on social media." = "Поделитесь SimpleX адресом в социальных сетях."; + /* No comment provided by engineer. */ "Share this 1-time invite link" = "Поделиться одноразовой ссылкой-приглашением"; @@ -4178,6 +4454,12 @@ /* No comment provided by engineer. */ "SimpleX Address" = "Адрес SimpleX"; +/* No comment provided by engineer. */ +"SimpleX address and 1-time links are safe to share via any messenger." = "Адрес SimpleX и одноразовые ссылки безопасно отправлять через любой мессенджер."; + +/* No comment provided by engineer. */ +"SimpleX address or 1-time link?" = "Адрес SimpleX или одноразовая ссылка?"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "Безопасность SimpleX Chat была проверена Trail of Bits."; @@ -4253,6 +4535,9 @@ /* No comment provided by engineer. */ "Some non-fatal errors occurred during import:" = "Во время импорта произошли некоторые ошибки:"; +/* alert message */ +"Some servers failed the test:\n%@" = "Серверы не прошли тест:\n%@"; + /* notification title */ "Somebody" = "Контакт"; @@ -4355,6 +4640,9 @@ /* No comment provided by engineer. */ "Tap button " = "Нажмите кнопку "; +/* No comment provided by engineer. */ +"Tap Create SimpleX address in the menu to create it later." = "Нажмите Создать адрес SimpleX в меню, чтобы создать его позже."; + /* No comment provided by engineer. */ "Tap to activate profile." = "Нажмите, чтобы сделать профиль активным."; @@ -4415,6 +4703,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "Приложение может посылать Вам уведомления о сообщениях и запросах на соединение - уведомления можно включить в Настройках."; +/* No comment provided by engineer. */ +"The app protects your privacy by using different operators in each conversation." = "Приложение улучшает конфиденциальность используя разных операторов в каждом разговоре."; + /* No comment provided by engineer. */ "The app will ask to confirm downloads from unknown file servers (except .onion)." = "Приложение будет запрашивать подтверждение загрузки с неизвестных серверов (за исключением .onion адресов)."; @@ -4424,6 +4715,9 @@ /* No comment provided by engineer. */ "The code you scanned is not a SimpleX link QR code." = "Этот QR код не является SimpleX-ccылкой."; +/* No comment provided by engineer. */ +"The connection reached the limit of undelivered messages, your contact may be offline." = "Соединение достигло предела недоставленных сообщений. Возможно, Ваш контакт не в сети."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "Подтвержденное соединение будет отменено!"; @@ -4463,6 +4757,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Профиль отправляется только Вашим контактам."; +/* No comment provided by engineer. */ +"The second preset operator in the app!" = "Второй оператор серверов в приложении!"; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "Вторая галочка - знать, что доставлено! ✅"; @@ -4472,6 +4769,9 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "Серверы для новых соединений Вашего текущего профиля чата **%@**."; +/* No comment provided by engineer. */ +"The servers for new files of your current chat profile **%@**." = "Серверы для новых файлов Вашего текущего профиля **%@**."; + /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "Вставленный текст не является SimpleX-ссылкой."; @@ -4481,6 +4781,9 @@ /* No comment provided by engineer. */ "Themes" = "Темы"; +/* No comment provided by engineer. */ +"These conditions will also apply for: **%@**." = "Эти условия также будут применены к: **%@**."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Установки для Вашего активного профиля **%@**."; @@ -4544,6 +4847,9 @@ /* No comment provided by engineer. */ "To make a new connection" = "Чтобы соединиться"; +/* No comment provided by engineer. */ +"To protect against your link being replaced, you can compare contact security codes." = "Чтобы защитить Вашу ссылку от замены, Вы можете сравнить код безопасности."; + /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Чтобы защитить Ваш часовой пояс, файлы картинок и голосовых сообщений используют UTC."; @@ -4556,6 +4862,9 @@ /* No comment provided by engineer. */ "To protect your privacy, SimpleX uses separate IDs for each of your contacts." = "Чтобы защитить Вашу конфиденциальность, SimpleX использует разные идентификаторы для каждого Вашeго контакта."; +/* No comment provided by engineer. */ +"To receive" = "Для получения"; + /* No comment provided by engineer. */ "To record speech please grant permission to use Microphone." = "Для записи речи, пожалуйста, дайте разрешение на использование микрофона."; @@ -4568,9 +4877,15 @@ /* No comment provided by engineer. */ "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Чтобы показать Ваш скрытый профиль, введите его пароль в поле поиска на странице **Ваши профили чата**."; +/* No comment provided by engineer. */ +"To send" = "Для оправки"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Для поддержки мгновенный доставки уведомлений данные чата должны быть перемещены."; +/* No comment provided by engineer. */ +"To use the servers of **%@**, accept conditions of use." = "Чтобы использовать серверы оператора **%@**, примите условия использования."; + /* No comment provided by engineer. */ "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Чтобы подтвердить end-to-end шифрование с Вашим контактом сравните (или сканируйте) код безопасности на Ваших устройствах."; @@ -4628,6 +4943,9 @@ /* rcv group event chat item */ "unblocked %@" = "%@ разблокирован"; +/* No comment provided by engineer. */ +"Undelivered messages" = "Недоставленные сообщения"; + /* No comment provided by engineer. */ "Unexpected migration state" = "Неожиданная ошибка при перемещении данных чата"; @@ -4745,12 +5063,21 @@ /* No comment provided by engineer. */ "Use .onion hosts" = "Использовать .onion хосты"; +/* No comment provided by engineer. */ +"Use %@" = "Использовать %@"; + /* No comment provided by engineer. */ "Use chat" = "Использовать чат"; /* No comment provided by engineer. */ "Use current profile" = "Использовать активный профиль"; +/* No comment provided by engineer. */ +"Use for files" = "Использовать для файлов"; + +/* No comment provided by engineer. */ +"Use for messages" = "Использовать для сообщений"; + /* No comment provided by engineer. */ "Use for new connections" = "Использовать для новых соединений"; @@ -4775,6 +5102,9 @@ /* No comment provided by engineer. */ "Use server" = "Использовать сервер"; +/* No comment provided by engineer. */ +"Use servers" = "Использовать серверы"; + /* No comment provided by engineer. */ "Use SimpleX Chat servers?" = "Использовать серверы предосталенные SimpleX Chat?"; @@ -4859,9 +5189,15 @@ /* No comment provided by engineer. */ "Videos and files up to 1gb" = "Видео и файлы до 1гб"; +/* No comment provided by engineer. */ +"View conditions" = "Посмотреть условия"; + /* No comment provided by engineer. */ "View security code" = "Показать код безопасности"; +/* No comment provided by engineer. */ +"View updated conditions" = "Посмотреть измененные условия"; + /* chat feature */ "Visible history" = "Доступ к истории"; @@ -4943,6 +5279,9 @@ /* No comment provided by engineer. */ "when IP hidden" = "когда IP защищен"; +/* No comment provided by engineer. */ +"When more than one operator is enabled, none of them has metadata to learn who communicates with whom." = "Когда больше чем один оператор включен, ни один из них не видит метаданные, чтобы определить, кто соединен с кем."; + /* No comment provided by engineer. */ "When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Когда Вы соединены с контактом инкогнито, тот же самый инкогнито профиль будет использоваться для групп с этим контактом."; @@ -5006,6 +5345,9 @@ /* No comment provided by engineer. */ "You are already connected to %@." = "Вы уже соединены с контактом %@."; +/* No comment provided by engineer. */ +"You are already connected with %@." = "Вы уже соединены с %@."; + /* No comment provided by engineer. */ "You are already connecting to %@." = "Вы уже соединяетесь с %@."; @@ -5051,6 +5393,12 @@ /* No comment provided by engineer. */ "You can change it in Appearance settings." = "Вы можете изменить это в настройках Интерфейса."; +/* No comment provided by engineer. */ +"You can configure operators in Network & servers settings." = "Вы можете настроить операторов в настройках Сеть и серверы."; + +/* No comment provided by engineer. */ +"You can configure servers via settings." = "Вы можете сконфигурировать серверы через настройки."; + /* No comment provided by engineer. */ "You can create it later" = "Вы можете создать его позже"; @@ -5075,6 +5423,9 @@ /* No comment provided by engineer. */ "You can send messages to %@ from Archived contacts." = "Вы можете отправлять сообщения %@ из Архивированных контактов."; +/* No comment provided by engineer. */ +"You can set connection name, to remember who the link was shared with." = "Вы можете установить имя соединения, чтобы запомнить кому Вы отправили ссылку."; + /* No comment provided by engineer. */ "You can set lock screen notification preview via settings." = "Вы можете установить просмотр уведомлений на экране блокировки в настройках."; @@ -5195,6 +5546,9 @@ /* No comment provided by engineer. */ "You will still receive calls and notifications from muted profiles when they are active." = "Вы все равно получите звонки и уведомления в профилях без звука, когда они активные."; +/* No comment provided by engineer. */ +"You will stop receiving messages from this chat. Chat history will be preserved." = "Вы прекратите получать сообщения в этом разговоре. История будет сохранена."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Вы перестанете получать сообщения от этой группы. История чата будет сохранена."; @@ -5276,6 +5630,9 @@ /* No comment provided by engineer. */ "Your server address" = "Адрес Вашего сервера"; +/* No comment provided by engineer. */ +"Your servers" = "Ваши серверы"; + /* No comment provided by engineer. */ "Your settings" = "Настройки"; diff --git a/apps/ios/th.lproj/Localizable.strings b/apps/ios/th.lproj/Localizable.strings index 962c64b710..b496fe11b4 100644 --- a/apps/ios/th.lproj/Localizable.strings +++ b/apps/ios/th.lproj/Localizable.strings @@ -1469,24 +1469,6 @@ /* No comment provided by engineer. */ "Group links" = "ลิงค์กลุ่ม"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้"; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้"; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้"; - -/* No comment provided by engineer. */ -"Members can send files and media." = "สมาชิกกลุ่มสามารถส่งไฟล์และสื่อ"; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "สมาชิกกลุ่มสามารถส่งข้อความเสียง"; - /* notification */ "Group message:" = "ข้อความกลุ่ม:"; @@ -1853,6 +1835,24 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "สมาชิกจะถูกลบออกจากกลุ่ม - ไม่สามารถยกเลิกได้!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้"; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้"; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้"; + +/* No comment provided by engineer. */ +"Members can send files and media." = "สมาชิกกลุ่มสามารถส่งไฟล์และสื่อ"; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "สมาชิกกลุ่มสามารถส่งข้อความเสียง"; + /* item status text */ "Message delivery error" = "ข้อผิดพลาดในการส่งข้อความ"; diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index ec29de0cf3..99668bec79 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -2301,27 +2301,6 @@ /* No comment provided by engineer. */ "Group links" = "Grup bağlantıları"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Grup üyeleri mesaj tepkileri ekleyebilir."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Grup üyeleri doğrudan mesajlar gönderebilir."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Grup üyeleri kaybolan mesajlar gönderebilir."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Grup üyeleri dosyalar ve medya gönderebilir."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Grup üyeleri SimpleX bağlantıları gönderebilir."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Grup üyeleri sesli mesajlar gönderebilir."; - /* notification */ "Group message:" = "Grup mesajı:"; @@ -2805,6 +2784,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Üye gruptan çıkarılacaktır - bu geri alınamaz!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Grup üyeleri mesaj tepkileri ekleyebilir."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Grup üyeleri doğrudan mesajlar gönderebilir."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Grup üyeleri kaybolan mesajlar gönderebilir."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Grup üyeleri dosyalar ve medya gönderebilir."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Grup üyeleri SimpleX bağlantıları gönderebilir."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Grup üyeleri sesli mesajlar gönderebilir."; + /* No comment provided by engineer. */ "Menus" = "Menüler"; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 28cc2839e8..d470a2a1e3 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -892,7 +892,7 @@ "Change self-destruct passcode" = "Змінити пароль самознищення"; /* authentication reason */ -"Change user profiles" = "Зміна профілів користувачів"; +"Change chat profiles" = "Зміна профілів користувачів"; /* chat item text */ "changed address for you" = "змінили для вас адресу"; @@ -2424,27 +2424,6 @@ /* No comment provided by engineer. */ "Group links" = "Групові посилання"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "Учасники групи можуть додавати реакції на повідомлення."; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години)"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "Учасники групи можуть надсилати прямі повідомлення."; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "Учасники групи можуть надсилати зникаючі повідомлення."; - -/* No comment provided by engineer. */ -"Members can send files and media." = "Учасники групи можуть надсилати файли та медіа."; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "Учасники групи можуть надсилати посилання SimpleX."; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "Учасники групи можуть надсилати голосові повідомлення."; - /* notification */ "Group message:" = "Групове повідомлення:"; @@ -2934,6 +2913,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "Учасник буде видалений з групи - це неможливо скасувати!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "Учасники групи можуть додавати реакції на повідомлення."; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години)"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "Учасники групи можуть надсилати прямі повідомлення."; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "Учасники групи можуть надсилати зникаючі повідомлення."; + +/* No comment provided by engineer. */ +"Members can send files and media." = "Учасники групи можуть надсилати файли та медіа."; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "Учасники групи можуть надсилати посилання SimpleX."; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "Учасники групи можуть надсилати голосові повідомлення."; + /* No comment provided by engineer. */ "Menus" = "Меню"; @@ -3672,7 +3672,7 @@ "Push notifications" = "Push-повідомлення"; /* No comment provided by engineer. */ -"Push Notifications" = "Push-сповіщення"; +"Push notifications" = "Push-сповіщення"; /* No comment provided by engineer. */ "Push server" = "Push-сервер"; @@ -3949,10 +3949,10 @@ "Safer groups" = "Безпечніші групи"; /* No comment provided by engineer. */ -"Same conditions will apply to operator **%@**." = "Такі ж умови діятимуть і для оператора **%@**."; +"The same conditions will apply to operator **%@**." = "Такі ж умови діятимуть і для оператора **%@**."; /* No comment provided by engineer. */ -"Same conditions will apply to operator(s): **%@**." = "Такі ж умови будуть застосовуватися до оператора(ів): **%@**."; +"The same conditions will apply to operator(s): **%@**." = "Такі ж умови будуть застосовуватися до оператора(ів): **%@**."; /* alert button chat item action */ diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index 5fac1a8577..6a924eea1f 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -2214,27 +2214,6 @@ /* No comment provided by engineer. */ "Group links" = "群组链接"; -/* No comment provided by engineer. */ -"Members can add message reactions." = "群组成员可以添加信息回应。"; - -/* No comment provided by engineer. */ -"Members can irreversibly delete sent messages. (24 hours)" = "群组成员可以不可撤回地删除已发送的消息"; - -/* No comment provided by engineer. */ -"Members can send direct messages." = "群组成员可以私信。"; - -/* No comment provided by engineer. */ -"Members can send disappearing messages." = "群组成员可以发送限时消息。"; - -/* No comment provided by engineer. */ -"Members can send files and media." = "群组成员可以发送文件和媒体。"; - -/* No comment provided by engineer. */ -"Members can send SimpleX links." = "群成员可发送 SimpleX 链接。"; - -/* No comment provided by engineer. */ -"Members can send voice messages." = "群组成员可以发送语音消息。"; - /* notification */ "Group message:" = "群组消息:"; @@ -2712,6 +2691,27 @@ /* No comment provided by engineer. */ "Member will be removed from group - this cannot be undone!" = "成员将被移出群组——此操作无法撤消!"; +/* No comment provided by engineer. */ +"Members can add message reactions." = "群组成员可以添加信息回应。"; + +/* No comment provided by engineer. */ +"Members can irreversibly delete sent messages. (24 hours)" = "群组成员可以不可撤回地删除已发送的消息"; + +/* No comment provided by engineer. */ +"Members can send direct messages." = "群组成员可以私信。"; + +/* No comment provided by engineer. */ +"Members can send disappearing messages." = "群组成员可以发送限时消息。"; + +/* No comment provided by engineer. */ +"Members can send files and media." = "群组成员可以发送文件和媒体。"; + +/* No comment provided by engineer. */ +"Members can send SimpleX links." = "群成员可发送 SimpleX 链接。"; + +/* No comment provided by engineer. */ +"Members can send voice messages." = "群组成员可以发送语音消息。"; + /* No comment provided by engineer. */ "Menus" = "菜单"; diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index 1171b1d1ae..259411688c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -15,8 +15,7 @@ لا يمكن التراجع عن هذا الإجراء - سيتم فقد ملف التعريف وجهات الاتصال والرسائل والملفات الخاصة بك بشكل نهائي. هذه المجموعة لم تعد موجودة. رمز QR هذا ليس رابطًا! - الجيل القادم من -\nالرسائل الخاصة + الجيل القادم من \nالرسائل الخاصة لا يمكن التراجع عن هذا الإجراء - سيتم حذف جميع الملفات والوسائط المستلمة والمرسلة. ستبقى الصور منخفضة الدقة. لا يمكن التراجع عن هذا الإجراء - سيتم حذف الرسائل المرسلة والمستلمة قبل التحديد. قد تأخذ عدة دقائق. ينطبق هذا الإعداد على الرسائل الموجودة في ملف تعريف الدردشة الحالي الخاص بك diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index df0b3d5cd7..d56a7fe87c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1745,10 +1745,10 @@ Use %s Current conditions text couldn\'t be loaded, you can review conditions via this link: %s.]]> - %s.]]> - %s.]]> + %s.]]> + %s.]]> %s.]]> - %s.]]> + %s.]]> %s.]]> %s.]]> View conditions diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index 3c3711be25..e90dd26aff 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -462,8 +462,7 @@ Verbunden Beendet - Die nächste Generation -\ndes privaten Messagings + Die nächste Generation \ndes privaten Messagings Datenschutz neu definiert Keine Benutzerkennungen. Immun gegen Spam diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index 98f34e4c81..02f69b0550 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -737,8 +737,7 @@ ¡La conexión que has aceptado se cancelará! La base de datos no funciona correctamente. Pulsa para conocer más El mensaje será marcado como moderado para todos los miembros. - La nueva generación -\nde mensajería privada + La nueva generación \nde mensajería privada Esta acción es irreversible. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán. Esta acción es irreversible. Los mensajes enviados y recibidos anteriores a la selección serán eliminados. Podría tardar varios minutos. Esta configuración se aplica a los mensajes del perfil actual diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index 480aa2e10c..5eea31e670 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -438,8 +438,7 @@ en attente de confirmation… connecté terminé - La nouvelle génération -\nde messagerie privée + La nouvelle génération \nde messagerie privée La vie privée redéfinie Aucun identifiant d\'utilisateur. Protégé du spam diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index 4f80e33166..34dc1227a7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -156,7 +156,7 @@ Az eltűnő üzenetek küldése csak abban az esetben van engedélyezve, ha az ismerőse is engedélyezi. Hang kikapcsolva A közvetlen üzenetek küldése a tagok között engedélyezve van. - Alkalmazás + ALKALMAZÁS Hívás folyamatban Mindkét fél küldhet üzenetreakciókat. Mindkét fél tud hívásokat kezdeményezni. @@ -360,7 +360,7 @@ Letiltás az összes csoport számára Engedélyezés az összes csoport számára engedélyezve az ismerős számára - Az eltűnő üzenetek küldése le van tiltva ebben a csoportban. + Az eltűnő üzenetek küldése le van tiltva. Cím törlése %d hét Számítógép címe @@ -547,15 +547,15 @@ A galériából Engedélyezés (csoport felülírások megtartásával) Hiba az ismerős törlésekor - A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra) + A tagok véglegesen törölhetik az elküldött üzeneteiket. (24 óra) Hiba a szerepkör megváltoztatásakor Javítás - A csoport tagjai küldhetnek eltűnő üzeneteket. + A tagok küldhetnek eltűnő üzeneteket. Kapcsolat javítása Hiba a profil létrehozásakor! Hiba a tag(ok) hozzáadásakor Fájl - A csoport tagjai küldhetnek fájlokat és médiatartalmakat. + A tagok küldhetnek fájlokat és médiatartalmakat. Törlés ennyi idő után Hiba a beállítás megváltoztatásakor Hiba a csoporthivatkozás frissítésekor @@ -565,7 +565,7 @@ Hiba a csevegési adatbázis importálásakor Hiba a kézbesítési jelentések engedélyezésekor! Hiba az XFTP-kiszolgálók mentésekor - A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket. + A tagok küldhetnek egymásnak közvetlen üzeneteket. Hiba a tag eltávolításakor befejeződött A csoport üdvözlőüzenete @@ -589,7 +589,7 @@ Ismerős általi javítás nem támogatott Fájl nem található Kapcsolat bontása - A csoport tagjai üzenetreakciókat adhatnak hozzá. + A tagok reakciókat adhatnak hozzá az üzenetekhez. Adatbázis exportálása Teljes név: Tovább csökkentett akkumulátor-használat @@ -600,7 +600,7 @@ Hiba a csevegési adatbázis törlésekor Teljes hivatkozás Hiba a cím megváltoztatásakor - A csoport tagjai küldhetnek hangüzeneteket. + A tagok küldhetnek hangüzeneteket. Csoportbeállítások Hiba: %s Eltűnő üzenetek @@ -614,7 +614,7 @@ titkosítás-újraegyeztetés szükséges Rejtett csevegési profilok Fájlok és médiatartalmak - A kép mentve a „Galériába” + A kép elmentve a „Galériába” Elrejtés Azonnal A fájlok- és a médiatartalmak küldése le van tiltva! @@ -657,7 +657,7 @@ Az azonnali értesítések le vannak tiltva! Azonnali értesítések! Kép - A fájlok- és a médiatartalmak le vannak tiltva ebben a csoportban. + A fájlok- és a médiatartalmak küldése le van tiltva. Hogyan működik Elrejtés: Hiba az ismerőssel történő kapcsolat létrehozásában @@ -721,11 +721,11 @@ Új számítógép-alkalmazás! Most már az adminisztrátorok is:\n- törölhetik a tagok üzeneteit.\n- letilthatnak tagokat (megfigyelő szerepkör) meghívta őt: %1$s - Az üzenetreakciók küldése le van tiltva ebben a csoportban. + A reakciók küldése az üzenetekre le van tiltva. Nem nincs szöveg TAG - Ez később a beállításokon keresztül módosítható. + Hogyan befolyásolja az akkumulátort Új tag szerepköre Kikapcsolva Érvénytelen hivatkozás! @@ -751,7 +751,7 @@ Moderálás bekapcsolva Japán és portugál kezelőfelület - Az üzenetek végleges törlése le van tiltva ebben a csoportban. + Az üzenetek végleges törlése le van tiltva. %s nevű hordozható eszközzel]]> hónap Üzenetvázlat @@ -793,7 +793,7 @@ Hordozható eszköz társítása Értesítési szolgáltatás Csak a csoporttulajdonosok engedélyezhetik a hangüzenetek küldését. - 2 rétegű végpontok közötti titkosítással küldött üzeneteket.]]> + A felhasználói profilok, névjegyek, csoportok és üzenetek csak az eszközön kerülnek tárolásra a kliensen belül. Érvénytelen átköltöztetési visszaigazolás Csak a csoporttulajdonosok módosíthatják a csoportbeállításokat. Nincsenek előzmények @@ -801,7 +801,7 @@ Megjelölés olvasottként ÉLŐ Megjelölés olvasatlanként - Több + Továbbiak Bejelentkezés hitelesítőadatokkal érvénytelen üzenet formátum Csatlakozás @@ -1163,7 +1163,7 @@ A hangüzenetek küldése le van tiltva. Ismerős nevének beállítása Csak Ön tud eltűnő üzeneteket küldeni. - Média megosztása… + Médiatartalom megosztása… Ön: %1$s Beállítások Színek visszaállítása @@ -1272,7 +1272,7 @@ Figyelmeztetés: néhány adat elveszhet! Koppintson ide az új csevegés indításához Várakozás a számítógépre… - A privát üzenetküldés\nkövetkező generációja + Az üzenetküldés jövője Hálózati beállítások megváltoztatása? Várakozás a hordozható eszköz társítására: Biztonságos kapcsolat hitelesítése @@ -1287,7 +1287,7 @@ Az új üzenetek rendszeresen letöltésre kerülnek az alkalmazás által – naponta néhány százalékot használ az akkumulátorból. Az alkalmazás nem használ push-értesítéseket – az eszközről származó adatok nem kerülnek elküldésre a kiszolgálóknak. Számítógép címének beillesztése kapcsolattartási cím-hivatkozáson keresztül - SimpleX-háttérszolgáltatást használja - az akkumulátornak csak néhány százalékát használja naponta.]]> + a SimpleX a háttérben fut a push értesítések használata helyett.]]> Az ismerősének online kell lennie ahhoz, hogy a kapcsolat létrejöjjön.\nVisszavonhatja ezt az ismerőskérelmet és eltávolíthatja az ismerőst (ezt később ismét megpróbálhatja egy új hivatkozással). A jelszó nem található a Keystore-ban, ezért kézzel szükséges megadni. Ez akkor történhetett meg, ha visszaállította az alkalmazás adatait egy biztonságimentési eszközzel. Ha nem így történt, akkor lépjen kapcsolatba a fejlesztőkkel. Az ismerősei továbbra is kapcsolódva maradnak. @@ -1306,7 +1306,7 @@ A profilja elküldésre kerül az ismerőse számára, akitől ezt a hivatkozást kapta. Az alkalmazás 1 perc után bezárható a háttérben. meghívást kapott a csoportba - engedélyezze a SimpleX háttérben történő futását a következő párbeszédpanelen. Ellenkező esetben az értesítések letiltásra kerülnek.]]> + Engedélyezze a következő párbeszédpanelen az azonnali értesítések fogadásához.]]> A kiszolgálónak engedélyre van szüksége a sorbaállítás létrehozásához, ellenőrizze jelszavát Kapcsolódni fog a csoport összes tagjához. Lehetséges, hogy a kiszolgáló címében szereplő tanúsítvány-ujjlenyomat helytelen @@ -1349,7 +1349,7 @@ Inkognitóprofilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva Átvitel-izoláció Akkor lesz kapcsolódva, ha a kapcsolatkérése elfogadásra kerül, várjon, vagy ellenőrizze később! - A hangüzenetek küldése le van tiltva ebben a csoportban. + A hangüzenetek küldése le van tiltva. Alkalmazás akkumulátor-használata / Korlátlan módot az alkalmazás beállításaiban.]]> Biztonságos kvantumrezisztens-protokollon keresztül. - 5 perc hosszúságú hangüzenetek.\n- egyéni üzenet-eltűnési időkorlát.\n- előzmények szerkesztése. @@ -1363,7 +1363,7 @@ A profilja az eszközén van tárolva és csak az ismerőseivel kerül megosztásra. A SimpleX-kiszolgálók nem láthatják a profilját. Ön megváltoztatta %s szerepkörét erre: %s Csoportmeghívó elutasítva - Az adatvédelem érdekében (a más csevegési platformokon megszokott felhasználó-azonosítók helyett) a SimpleX csak az üzenetek sorbaállításához használ azonosítókat, az összes ismerőséhez különbözőt. + Az Ön adatainak védelme érdekében a SimpleX külön üzenet-azonosítókat használ minden egyes kapcsolatához. (a megosztáshoz az ismerősével) Csoportmeghívó elküldve Átvitel-izoláció módjának frissítése? @@ -1450,7 +1450,7 @@ Az utolsó üzenet tervezetének megőrzése a mellékletekkel együtt. A mentett WebRTC ICE-kiszolgálók eltávolításra kerülnek. A kézbesítési jelentések engedélyezve vannak %d csoportban - A szerepkör meg fog változni erre: %s. A csoportban az összes tag értesítve lesz. + A szerepkör meg fog változni erre: %s. A csoport tagjai értesítést fognak kapni. Profil és kiszolgálókapcsolatok Egy üzenetküldő- és alkalmazásplatform, amely védi az adatait és biztonságát. A profil aktiválásához koppintson az ikonra. @@ -1685,23 +1685,23 @@ Wi-Fi továbbított A SimpleX-hivatkozások küldése le van tiltva - A csoport tagjai küldhetnek SimpleX-hivatkozásokat. + A tagok küldhetnek SimpleX-hivatkozásokat. tulajdonosok adminisztrátorok összes tag SimpleX-hivatkozások A hangüzenetek küldése le van tiltva - A SimpleX-hivatkozások küldése le van tiltva ebben a csoportban. + A SimpleX-hivatkozások küldése le van tiltva. A SimpleX-hivatkozások küldése le van tiltva A fájlok- és médiatartalmak nincsenek engedélyezve A SimpleX-hivatkozások küldése engedélyezve van. Számukra engedélyezve: mentett - mentve innen: %s + elmentve innen: %s Továbbítva innen: A címzett(ek) nem látja(k), hogy kitől származik ez az üzenet. Mentett - Mentve innen: + Elmentve innen: Letöltés Továbbítás Továbbított @@ -1790,7 +1790,7 @@ További kiemelés 2 Alkalmazás téma Perzsa kezelőfelület - Védje IP-címét az ismerősei által kiválasztott üzenet-közvetítő-kiszolgálókkal szemben.\nEngedélyezze a „Beállítások / Hálózat és kiszolgálók” menüben. + Védje IP-címét az ismerősei által kiválasztott üzenet-közvetítő-kiszolgálókkal szemben.\nEngedélyezze a *Hálózat és kiszolgálók* menüben. Ismeretlen kiszolgálókról származó fájlok megerősítése. Javított üzenetkézbesítés Alkalmazás témájának visszaállítása @@ -1938,7 +1938,7 @@ A(z) %1$s célkiszolgáló verziója nem kompatibilis a(z) %2$s továbbító kiszolgálóval. A(z) %1$s továbbító-kiszolgáló nem tudott csatlakozni a(z) %2$s célkiszolgálóhoz. Próbálja meg később. A(z) %1$s célkiszolgáló címe nem kompatibilis a(z) %2$s továbbító-kiszolgáló beállításaival. - Média elhomályosítása + Médiatartalom elhomályosítása Közepes Kikapcsolva Enyhe @@ -1966,7 +1966,7 @@ Beszélgetés megtartása Biztosan törli az ismerőst? kapcsolódás - Könnyen elérhető eszköztár + Könnyen elérhető alkalmazás-eszköztárak Törlés értesítés nélkül Beállítások keresés @@ -2108,7 +2108,7 @@ Vagy a privát megosztáshoz SimpleX-cím vagy egyszer használható meghívó-hivatkozás? Egyszer használható meghívó-hivatkozás létrehozása - Üzemeltetők kiválasztása + Kiszolgáló-üzemeltetők Hálózati üzemeltetők Amikor egynél több hálózati üzemeltető van engedélyezve, akkor az alkalmazás minden egyes beszélgetéshez a különböző üzemeltetők kiszolgálóit használja. Ha például a SimpleX Chat kiszolgálón keresztül fogadja az üzeneteket, az alkalmazás a Flux egyik kiszolgálóját használja a privát útválasztáshoz. @@ -2170,4 +2170,39 @@ Az Ön jelenlegi csevegőprofiljához tartozó új fájlok kiszolgálói Vagy archívumfájl importálása Távoli hordozható eszközök + Xiaomi eszközök: engedélyezze az automatikus indítást a rendszerbeállításokban, hogy az értesítések működjenek.]]> + A küldéshez másolhatja és csökkentheti az üzenet méretét. + Adja hozzá csapattagjait a beszélgetésekhez. + Üzleti cím + végpontok közötti titkosítással, a közvetlen üzenetek továbbá kvantumrezisztens titkosítással is rendelkeznek.]]> + Hogyan segíti az adatvédelmet + Nincs háttérszolgáltatás + Értesítések és akkumulátor + Az alkalmazás mindig fut a háttérben + Csevegés elhagyása? + Ön nem fog több üzenetet kapni ebből a csevegésből, de a csevegés előzményei megmaradnak. + Csevegés törlése + Meghívás a csevegésbe + Barátok hozzáadása + Csapattagok hozzáadása + A csevegés minden tag számára törlésre kerül - ezt a műveletet nem lehet visszavonni! + A csevegés törlésre kerül az Ön számára - ezt a műveletet nem lehet visszavonni! + Csevegés törlése? + Csevegés elhagyása + Csak a csevegés tulajdonosai módosíthatják a beállításokat. + Könnyen elérhető csevegési eszköztár + A tag el lesz távolítva a csevegésből - ezt a műveletet nem lehet visszavonni! + Csevegés + A szerepkör meg fog változni a következőre: %s. A csevegés tagjai értesítést fognak kapni. + Az Ön csevegési profilja el lesz küldve a csevegésben résztvevő tagok számára + A tagok közötti közvetlen üzenetek le vannak tiltva. + Üzleti csevegések + Az Ön ügyfeleinek adatvédelme. + %1$s.]]> + A csevegés már létezik! + Csökkentse az üzenet méretét, és küldje el újra. + Üzenetek ellenőrzése 10 percenként + Az üzenet túl nagy! + Csökkentse az üzenet méretét vagy távolítsa el a médiát, és küldje el újra. + A tagok közötti közvetlen üzenetek le vannak tiltva ebben a csevegésben. \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml index 1050f1d575..eeedcaa450 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml @@ -1294,4 +1294,57 @@ Hapus anggota? Hapus anggota Pesan tersimpan + Tak dapat memanggil anggota grup + %s.]]> + %s.]]> + Operator + Gunakan server + Gunakan %s + Tak dapat kirim pesan ke anggota grup + Pesan sambutan + Simpan pesan sambutan? + Perbaikan tidak didukung oleh anggota grup + Buat grup rahasia + Negosiasi ulang enkripsi + Masukkan nama grup: + Pratinjau + Kirim pesan untuk aktifkan panggilan. + Kontak dihapus. + Tak dapat memanggil kontak + Perbaiki + Sepenuhnya terdesentralisasi – hanya terlihat oleh anggota. + Perbaiki koneksi + Perbaiki koneksi? + Tinjau ketentuan + Server prasetel + Ketentuan diterima + Ketentuan akan otomatis diterima untuk operator yang diaktifkan pada: %s. + Anda perlu izinkan kontak Anda agar dapat memanggilnya. + Pesan terlalu besar + Masukkan pesan sambutan… + Simpan dan perbarui profil grup + Pesan sambutan terlalu panjang + Perbaikan tidak didukung oleh kontak + Obrolan + Terima kondisi + SERVER + Buat grup + Nama lengkap grup: + Simpan profil grup + Peramban + Server Anda + Gagal simpan profil grup + %s server + Operator jaringan + Ketentuan diterima pada: %s. + Ketentuan akan diterima pada: %s. + Koneksi + Rol + Ganti rol + Profil obrolan Anda akan dikirim ke anggota grup + Profil obrolan Anda akan dikirim ke anggota obrolan + Profil grup disimpan di perangkat anggota, bukan di server. + langsung + Kirim via + Terima via \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index 2f41824bd1..92c0105d09 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -211,8 +211,8 @@ A meno che il tuo contatto non abbia eliminato la connessione o che questo link non sia già stato usato, potrebbe essere un errore; per favore segnalalo. \nPer connetterti, chiedi al tuo contatto di creare un altro link di connessione e controlla di avere una connessione di rete stabile. Probabilmente l\'impronta del certificato nell\'indirizzo del server è sbagliata - servizio SimpleX in secondo piano; usa una piccola percentuale di batteria al giorno.]]> - consenti a SimpleX di funzionare in secondo piano nella prossima schermata. Altrimenti le notifiche saranno disattivate.]]> + SimpleX funziona in secondo piano invece di usare le notifiche push.]]> + Consentilo nella prossima schermata per ricevere le notifiche immediatamente.]]> Servizio SimpleX Chat Servizio in secondo piano sempre attivo. Le notifiche verranno mostrate appena i messaggi saranno disponibili. SimpleX Lock @@ -478,7 +478,7 @@ %do %d ora %d ore - I messaggi a tempo sono vietati in questo gruppo. + I messaggi a tempo sono vietati. %dm %d min %d mese @@ -490,10 +490,10 @@ %d settimana %d settimane Link del gruppo - I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore) - I membri del gruppo possono inviare messaggi diretti. - I membri del gruppo possono inviare messaggi a tempo. - I membri del gruppo possono inviare messaggi vocali. + I membri possono eliminare irreversibilmente i messaggi inviati. (24 ore) + I membri possono inviare messaggi diretti. + I membri possono inviare messaggi a tempo. + I membri possono inviare messaggi vocali. Confronta i codici di sicurezza con i tuoi contatti. Messaggi a tempo Nascondi la schermata dell\'app nelle app recenti. @@ -648,9 +648,9 @@ Chiamata in arrivo Videochiamata in arrivo Istantaneo - Può essere cambiato in seguito via impostazioni. + Come influisce sulla batteria Crea una connessione privata - crittografia end-to-end a 2 livelli.]]> + Solo i dispositivi client memorizzano i profili utente, i contatti, i gruppi e i messaggi. Chiunque può installare i server. Incolla il link che hai ricevuto Sei tu a decidere chi può connettersi. @@ -660,9 +660,8 @@ repository GitHub.]]> Rifiuta Nessun identificatore utente. - La nuova generazione -\ndi messaggistica privata - Per proteggere la privacy, invece degli ID utente usati da tutte le altre piattaforme, SimpleX dispone di identificatori per le code dei messaggi, separati per ciascuno dei tuoi contatti. + Il futuro dei messaggi + Per proteggere la tua privacy, SimpleX usa ID separati per ciascuno dei tuoi contatti. Usa la chat videochiamata videochiamata (non crittografata e2e) @@ -843,7 +842,7 @@ Le tue preferenze Configurazione del server migliorata Eliminazione irreversibile del messaggio - L\'eliminazione irreversibile dei messaggi è vietata in questo gruppo. + L\'eliminazione irreversibile dei messaggi è vietata. Max 40 secondi, ricevuto istantaneamente. Novità nella %s Solo tu puoi inviare messaggi vocali. @@ -856,7 +855,7 @@ La sicurezza di SimpleX Chat è stata verificata da Trail of Bits. Messaggi vocali I messaggi vocali sono vietati in questa chat. - I messaggi vocali sono vietati in questo gruppo. + I messaggi vocali sono vietati. Novità Con messaggio di benvenuto facoltativo. I tuoi contatti possono consentire l\'eliminazione completa dei messaggi. @@ -1171,7 +1170,7 @@ Cambia codice di autodistruzione Reazioni ai messaggi Le reazioni ai messaggi sono vietate in questa chat. - Le reazioni ai messaggi sono vietate in questo gruppo. + Le reazioni ai messaggi sono vietate. Solo tu puoi aggiungere reazioni ai messaggi. Proibisci le reazioni ai messaggi. Proibisci le reazioni ai messaggi. @@ -1180,7 +1179,7 @@ Solo il tuo contatto può aggiungere reazioni ai messaggi. Consenti ai tuoi contatti di aggiungere reazioni ai messaggi. Consenti reazioni ai messaggi solo se il tuo contatto le consente. - I membri del gruppo possono aggiungere reazioni ai messaggi. + I membri possono aggiungere reazioni ai messaggi. 30 secondi Invia Invia messaggio a tempo @@ -1244,10 +1243,10 @@ Errore nell\'interruzione del cambio di indirizzo Solo i proprietari del gruppo possono attivare file e contenuti multimediali. File e multimediali - I membri del gruppo possono inviare file e contenuti multimediali. + I membri possono inviare file e contenuti multimediali. Proibisci l\'invio di file e contenuti multimediali. Il cambio di indirizzo verrà interrotto. Verrà usato il vecchio indirizzo di ricezione. - File e contenuti multimediali sono vietati in questo gruppo. + File e contenuti multimediali sono vietati. File e contenuti multimediali vietati! Off Nessuna chat filtrata @@ -1723,11 +1722,11 @@ Consenti di inviare link di SimpleX. Vieta l\'invio di link di SimpleX Attivo per - I membri del gruppo possono inviare link di Simplex. + I membri possono inviare link di Simplex. proprietari amministratori tutti i membri - I link di SimpleX sono vietati in questo gruppo. + I link di SimpleX sono vietati. salvato Salvato da Inoltra messaggio… @@ -1999,7 +1998,7 @@ Nessun contatto filtrato Incolla link I tuoi contatti - Barra degli strumenti di chat accessibile + Barre degli strumenti dell\'app accessibili Invita Consentire le chiamate? Chiamate proibite! @@ -2135,7 +2134,7 @@ Operatori di rete Quando più di un operatore di rete è attivato, l\'app userà i server di diversi operatori per ogni conversazione. Puoi configurare gli operatori nelle impostazioni di rete e server. - Scegli gli operatori + Operatori del server Seleziona gli operatori di rete da usare. Continua Aggiorna @@ -2213,4 +2212,39 @@ Condividi indirizzo SimpleX sui social media. O importa file archivio Telefoni remoti + I messaggi diretti tra i membri sono vietati in questa chat. + Dispositivi Xiaomi: attiva l\'avvio automatico nelle impostazioni di sistema per fare funzionare le notifiche.]]> + Aggiungi i membri del tuo team alle conversazioni. + Indirizzo di lavoro + cifrati end-to-end, con sicurezza quantistica nei messaggi diretti.]]> + Controlla i messaggi ogni 10 minuti + Come aiuta la privacy + Invita in chat + Aggiungi membri del team + Chat + I messaggi diretti tra i membri sono vietati. + La chat esiste già! + %1$s.]]> + Uscire dalla chat? + La chat verrà eliminata solo per te, non è reversibile! + Esci dalla chat + Chat di lavoro + La chat verrà eliminata per tutti i membri, non è reversibile! + Aggiungi amici + L\'app funziona sempre in secondo piano + Elimina chat + Eliminare la chat? + Il messaggio è troppo grande! + Riduci la dimensione del messaggio e invialo di nuovo. + Riduci la dimensione del messaggio o rimuovi i media e invialo di nuovo. + Nessun servizio in secondo piano + Il membro verrà rimosso dalla chat, non è reversibile! + Privacy per i tuoi clienti. + Barra degli strumenti di chat accessibile + Solo i proprietari della chat possono modificarne le preferenze. + Notifiche e batteria + Puoi copiare e ridurre la dimensione del messaggio per inviarlo. + Il ruolo verrà cambiato in %s. Verrà notificato a tutti nella chat. + Il tuo profilo di chat verrà inviato ai membri della chat + Non riceverai più messaggi da questa chat. La cronologia della chat verrà conservata. \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index 26ec40da60..1a5eaa403d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -19,7 +19,7 @@ Toegang tot de servers via SOCKS proxy op poort %d\? De proxy moet worden gestart voordat u deze optie inschakelt. Kan geen contacten uitnodigen! Sta het verzenden van directe berichten naar leden toe. - Sta toe om verzonden berichten onomkeerbaar te verwijderen. (24 uur) + Sta toe om verzonden berichten definitief te verwijderen. (24 uur) Sta toe om spraak berichten te verzenden. Chat is actief Wissen @@ -57,7 +57,7 @@ Contact verzoeken automatisch accepteren vetgedrukt Bijvoegen - Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur) + Sta het definitief verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur) Sta toe om verdwijnende berichten te verzenden. Sta toe dat uw contacten spraak berichten verzenden. Al uw contacten blijven verbonden. @@ -74,7 +74,7 @@ Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd. Sta verdwijnende berichten alleen toe als uw contact dit toestaat. Sta spraak berichten alleen toe als uw contact ze toestaat. - Laat uw contacten verzonden berichten onomkeerbaar verwijderen. (24 uur) + Laat uw contacten verzonden berichten definitief verwijderen. (24 uur) Sta toe dat uw contacten verdwijnende berichten verzenden. altijd Geluid uit @@ -95,7 +95,7 @@ Batterijoptimalisatie is actief, waardoor achtergrondservice en periodieke verzoeken om nieuwe berichten worden uitgeschakeld. Je kunt ze weer inschakelen via instellingen. Het beste voor de batterij. U ontvangt alleen meldingen wanneer de app wordt uitgevoerd (GEEN achtergrondservice).]]> Het kan worden uitgeschakeld via instellingen, meldingen worden nog steeds weergegeven terwijl de app actief is.]]> - Zowel u als uw contact kunnen verzonden berichten onomkeerbaar verwijderen. (24 uur) + Zowel u als uw contact kunnen verzonden berichten definitief verwijderen. (24 uur) Zowel jij als je contact kunnen verdwijnende berichten sturen. Zowel jij als je contact kunnen spraak berichten verzenden. Let op: u kunt het wachtwoord NIET herstellen of wijzigen als u het kwijt raakt.]]> @@ -254,12 +254,12 @@ Apparaatverificatie is uitgeschakeld. SimpleX Vergrendelen uitschakelen. Vul uw naam in: Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Vergrendelen inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld. - Directe berichten tussen leden zijn verboden in deze groep. + Directe berichten tussen leden zijn niet toegestaan in deze groep. %d bestand(en) met een totale grootte van %s %d uur Uitzetten Verdwijnende berichten - Verdwijnende berichten zijn verboden in dit gesprek. + Verdwijnende berichten zijn niet toegestaan in dit gesprek. SimpleX Vergrendelen uitschakelen Verdwijnende berichten Verbinding verbreken @@ -272,7 +272,7 @@ %ds Verwijder contact Server verwijderen - Verdwijnende berichten zijn verboden in deze groep. + Verdwijnende berichten zijn niet toegestaan. %d sec %dm %dmth @@ -338,9 +338,9 @@ ingeschakeld ingeschakeld voor contact voor u ingeschakeld - Groepsleden kunnen verzonden berichten onomkeerbaar verwijderen. (24 uur) - Groepsleden kunnen directe berichten sturen - Groepsleden kunnen spraak berichten verzenden. + Leden kunnen verzonden berichten definitief verwijderen. (24 uur) + Leden kunnen directe berichten sturen. + Leden kunnen spraak berichten verzenden. Per chatprofiel (standaard) of per verbinding (BETA). Verschillende namen, avatars en transportisolatie. Franse interface @@ -373,7 +373,7 @@ Video Fout bij opslaan van ICE servers geëindigd - Groepsleden kunnen verdwijnende berichten sturen. + Leden kunnen verdwijnende berichten sturen. %d week %dw %d weken @@ -396,7 +396,7 @@ Afbeelding verzonden Live bericht! Als je een uitnodiging link voor SimpleX Chat hebt ontvangen, kun je deze in je browser openen: - Dit kan later worden gewijzigd via instellingen. + Hoe dit de batterij beïnvloedt Deelnemen aan groep\? Nodig leden uit Geen contacten geselecteerd @@ -439,7 +439,7 @@ Groep verlaten Lokale naam Alleen lokale profielgegevens - Het onomkeerbaar verwijderen van berichten is verboden in deze groep. + Het definitief verwijderen van berichten is niet toegestaan. App scherm verbergen in de recente apps. Incognito modus Berichten @@ -458,7 +458,7 @@ Meer verbeteringen volgen snel! Nodig leden uit Verberg contact en bericht - op de achtergrond uitvoeren. Anders worden de meldingen uitgeschakeld.]]> + Sta dit toe in het volgende dialoogvenster om direct meldingen te ontvangen.]]> Als u ervoor kiest om te weigeren, wordt de afzender NIET op de hoogte gesteld. Onmiddellijk heeft %1$s uitgenodigd @@ -508,7 +508,7 @@ Nee Immuun voor spam Maak een privéverbinding - Het onomkeerbaar verwijderen van berichten is verboden in dit gesprek. + Het definitief verwijderen van berichten is niet toegestaan in dit gesprek. Nieuw in %s Max 40 seconden, direct ontvangen. Verbeterde serverconfiguratie @@ -552,7 +552,7 @@ aan Alleen jij kunt verdwijnende berichten verzenden. Alleen uw contact kan verdwijnende berichten verzenden. - Alleen u kunt berichten onomkeerbaar verwijderen (uw contact kan ze markeren voor verwijdering). (24 uur) + Alleen u kunt berichten definitief verwijderen (uw contact kan ze markeren voor verwijdering). (24 uur) voorgesteld %s: %2s Oud database archief Voer het juiste huidige wachtwoord in. @@ -581,7 +581,7 @@ Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering). (24 uur) Alleen jij kunt spraak berichten verzenden. Alleen uw contact kan spraak berichten verzenden. - Verbied het onomkeerbaar verwijderen van berichten. + Verbied het definitief verwijderen van berichten. voorgesteld %s Sla het wachtwoord veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de chats. Bewaar het wachtwoord veilig, u kunt deze NIET wijzigen als u deze kwijtraakt. @@ -590,7 +590,7 @@ Oproep in behandeling Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven. Werk de app bij en neem contact op met de ontwikkelaars. - 2-laags end-to-end codering.]]> + Alleen clientapparaten slaan gebruikersprofielen, contacten, groepen en berichten op. De afzender heeft mogelijk het verbindingsverzoek verwijderd. Schakel SimpleX Vergrendelen in om uw informatie te beschermen. \nU wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld. @@ -611,7 +611,7 @@ Uw profiel, contacten en afgeleverde berichten worden op uw apparaat opgeslagen. beginnen… Video aan - Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. + Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan definitief verloren. Deze instelling is van toepassing op berichten in uw huidige chatprofiel bijgewerkt groep profiel verwijderd @@ -710,10 +710,9 @@ U kunt markdown gebruiken voor opmaak in berichten: geweigerde oproep geheim - De volgende generatie -\nprivéberichten + De toekomst van berichtenuitwisseling wachten op antwoord… - Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers-ID\'s die door alle andere platforms worden gebruikt, ID\'s voor berichten wachtrijen, afzonderlijk voor elk van uw contacten. + Om uw privacy te beschermen, gebruikt SimpleX voor elk van uw contacten afzonderlijke ID\'s. Gebruik chat Wanneer de app actief is video gesprek (niet e2e versleuteld) @@ -764,7 +763,7 @@ Volledig gedecentraliseerd – alleen zichtbaar voor leden. Timeout van TCP-verbinding Spraak berichten - Spraak berichten zijn verboden in dit gesprek. + Spraak berichten zijn niet toegestaan in dit gesprek. Verbied het verzenden van verdwijnende berichten. Verminderd batterijgebruik Om de tijdzone te beschermen, gebruiken afbeeldings-/spraakbestanden UTC. @@ -804,7 +803,7 @@ Kleuren resetten Systeem ja - gekregen, verboden + gekregen, niet toegestaan Jouw voorkeuren Stel 1 dag in Wat is er nieuw @@ -824,7 +823,7 @@ Spraakbericht… Spraakbericht (%1$s) Contactnaam instellen… - Spraak berichten verboden! + Spraak berichten niet toegestaan! Resetten Verstuur Stuur een live bericht, het wordt bijgewerkt voor de ontvanger(s) terwijl u het typt @@ -886,21 +885,20 @@ Deze string is geen verbinding link! Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren. Het ontvangstadres wordt gewijzigd naar een andere server. Adres wijziging wordt voltooid nadat de afzender online is. - SimpleX achtergrond service - deze gebruikt een paar procent van de batterij per dag.]]> + draait SimpleX op de achtergrond in plaats van pushmeldingen te gebruiken.]]> Jij staat toe Je bent uitgenodigd voor de groep verbinding maken met SimpleX Chat ontwikkelaars om vragen te stellen en updates te ontvangen.]]> Tenzij uw contact de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft. \nOm verbinding te maken, vraagt u uw contact om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft. SimpleX Chat servers gebruiken\? - Spraak berichten zijn verboden in deze groep. + Spraak berichten zijn niet toegestaan. Welkom %1$s! U kunt de chat starten via app Instellingen / Database of door de app opnieuw op te starten. je hebt het adres gewijzigd voor %s je hebt %1$s verwijderd Je contact heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%1$s). - Uw huidige chatdatabase wordt VERWIJDERD en VERVANGEN door de geïmporteerde. -\nDeze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. + Uw huidige chatdatabase wordt VERWIJDERD en VERVANGEN door de geïmporteerde. \nDeze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan definitief verloren. Je probeert een contact met wie je een incognito profiel hebt gedeeld uit te nodigen voor de groep waarin je je hoofdprofiel gebruikt Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten. SimpleX servers kunnen uw profiel niet zien. U moet zich authenticeren wanneer u de app na 30 seconden op de achtergrond start of hervat. @@ -1090,7 +1088,7 @@ " \nBeschikbaar in v5.1" Audio/video gesprekken verbieden. - Audio/video gesprekken zijn verboden. + Audio/video gesprekken zijn niet toegestaan. Snel en niet wachten tot de afzender online is! App toegangscode Stel het in in plaats van systeemverificatie. @@ -1165,19 +1163,19 @@ Zelfvernietigings wachtwoord ingeschakeld! De app-toegangscode wordt vervangen door een zelfvernietigings wachtwoord. Als u uw zelfvernietigings wachtwoord invoert tijdens het openen van de app: - Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens onomkeerbaar verwijderd! + Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens definitief verwijderd! Toegangscode instellen Bericht reacties verbieden. Alleen jij kunt bericht reacties toevoegen. - Reacties op berichten zijn verboden in deze groep. + Reacties op berichten zijn niet toegestaan. Berichten reacties verbieden. Sta bericht reacties alleen toe als uw contact dit toestaat. Sta uw contactpersonen toe om bericht reacties toe te voegen. Sta bericht reacties toe. - Groepsleden kunnen bericht reacties toevoegen. + Leden kunnen reacties op berichten toevoegen. Zowel u als uw contact kunnen bericht reacties toevoegen. Reacties op berichten - Reacties op berichten zijn verboden in deze chat. + Reacties op berichten zijn niet toegestaan in deze chat. Alleen uw contact kan bericht reacties toevoegen. dagen uren @@ -1241,14 +1239,14 @@ Afbreken Geen gefilterde chats Alleen groep eigenaren kunnen bestanden en media inschakelen. - Bestanden en media zijn verboden in deze groep. + Bestanden en media zijn niet toegestaan. Favoriet - Bestanden en media verboden! + Bestanden en media niet toegestaan! Niet favoriet Bestanden en media Verbied het verzenden van bestanden en media. Sta toe om bestanden en media te verzenden. - Groepsleden kunnen bestanden en media verzenden. + Leden kunnen bestanden en media verzenden. Zoeken Uit Protocol timeout per KB @@ -1722,10 +1720,10 @@ beheerders alle leden eigenaren - SimpleX-links zijn in deze groep verboden. + SimpleX-links zijn niet toegestaan. Ingeschakeld voor Sta het verzenden van SimpleX-links toe. - Groepsleden kunnen SimpleX-links verzenden. + Leden kunnen SimpleX-links verzenden. opgeslagen opgeslagen van %s Doorsturen @@ -1988,7 +1986,7 @@ Oproepen toestaan? bellen Kan geen groepslid bellen - Bellen verboden! + Bellen niet toegestaan! Contact verwijderen bevestigen? Gesprek verwijderd! Verwijderen zonder melding @@ -2009,7 +2007,7 @@ open Plak de link Uitnodiging - Toegankelijke chatwerkbalk + Bereikbare app-toolbars Vraag uw contactpersoon om oproepen in te schakelen. Geen gefilterde contacten Selecteer @@ -2144,7 +2142,7 @@ Of om privé te delen Adres instellingen Eenmalige link maken - Operators kiezen + Serverbeheerders Voor ingeschakelde operators worden de voorwaarden na 30 dagen geaccepteerd. Netwerkbeheerders Later beoordelen @@ -2209,4 +2207,40 @@ Om te verzenden U kunt servers configureren via instellingen. Of importeer archiefbestand + Directe berichten tussen leden zijn in deze chat niet toegestaan. + Externe mobiele telefoons + Xiaomi-apparaten: schakel Automatisch starten in de systeeminstellingen in om meldingen te laten werken.]]> + Bericht is te groot! + Verklein het bericht en verstuur het opnieuw. + U kunt het bericht kopiëren en verkleinen om het te verzenden. + Voeg uw teamleden toe aan de gesprekken. + Zakelijk adres + end-to-end-versleuteld verzonden, met post-kwantumbeveiliging in directe berichten.]]> + App draait altijd op de achtergrond + Controleer berichten elke 10 minuten + Meldingen en batterij + Hoe het de privacy helpt + U ontvangt geen berichten meer van deze chat. De chatgeschiedenis blijft bewaard. + Chat verlaten? + Vrienden toevoegen + Teamleden toevoegen + Uitnodigen voor een chat + De chat wordt voor je verwijderd - dit kan niet ongedaan worden gemaakt! + Chat + Directe berichten tussen leden zijn niet toegestaan. + Chat bestaat al! + Chat verwijderen + Chat verwijderen? + Chat verlaten + Lid wordt verwijderd uit de chat - dit kan niet ongedaan worden gemaakt! + De rol wordt gewijzigd naar %s. Iedereen in de chat wordt op de hoogte gebracht. + Uw chatprofiel wordt naar chatleden verzonden + Privacy voor uw klanten. + %1$s.]]> + De chat wordt voor alle leden verwijderd - dit kan niet ongedaan worden gemaakt! + Bereikbare chat-toolbar + Zakelijke chats + Geen achtergrondservice + Alleen chateigenaren kunnen voorkeuren wijzigen. + Verklein de berichtgrootte of verwijder de media en verzend het bericht opnieuw. \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml index 7b46d10921..56c80f8c89 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -420,8 +420,7 @@ uruchamianie… strajk Brak identyfikatorów użytkownika. - Następna generacja -\nprywatnych wiadomości + Następna generacja \nprywatnych wiadomości oczekiwanie na odpowiedź… oczekiwanie na potwierdzenie… Możesz używać markdown do formatowania wiadomości: diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml index 034e5d19db..27cc039c34 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -849,8 +849,7 @@ Para começar um novo bate-papo Ligar Bem-vindo(a)! - A próxima geração -\nde mensageiros privados + A próxima geração \nde mensageiros privados PROXY SOCKS A tentativa de alterar a senha do banco de dados não foi concluída. Pare o bate-papo para exportar, importar ou excluir o banco de dados do chat. Você não poderá receber e enviar mensagens enquanto o chat estiver interrompido. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index bcd0848e8d..00df4f75cb 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -88,9 +88,9 @@ Мгновенные уведомления Мгновенные уведомления! Мгновенные уведомления выключены! - фоновый сервис SimpleX, который потребляет несколько процентов батареи в день.]]> + SimpleX выполняется в фоне вместо уведомлений через сервер.]]> Он может быть выключен через Настройки – Вы продолжите получать уведомления о сообщениях пока приложение запущено.]]> - разрешите SimpleX выполняться в фоне в следующем диалоге. Иначе уведомления будут выключены.]]> + Разрешите это в следующем окне чтобы получать нотификации мгновенно.]]> Оптимизация батареи включена, поэтому сервис уведомлений выключен. Вы можете снова включить его через Настройки. Периодические уведомления Периодические уведомления выключены! @@ -463,7 +463,7 @@ соединено завершен - Новое поколение\nприватных сообщений + Будущее коммуникаций Более конфиденциальный Без идентификаторов пользователей. Защищен от спама @@ -475,8 +475,8 @@ Как это работает Как SimpleX работает - Чтобы защитить Вашу конфиденциальность, вместо ID пользователей, которые есть в других платформах, SimpleX использует ID для очередей сообщений, разные для каждого контакта. - с двухуровневым end-to-end шифрованием.]]> + Чтобы защитить Вашу конфиденциальность, SimpleX использует разные ID для всех ваших контактов. + Только пользовательские устройства хранят контакты, группы и сообщения. GitHub репозитория.]]> Использовать чат @@ -878,12 +878,12 @@ Запретить необратимое удаление сообщений. Разрешить отправлять голосовые сообщения. Запретить отправлять голосовые сообщений. - Члены группы могут посылать прямые сообщения. + Члены могут посылать прямые сообщения. Прямые сообщения между членами группы запрещены. - Члены группы могут необратимо удалять отправленные сообщения. (24 часа) - Необратимое удаление сообщений запрещено в этой группе. - Члены группы могут отправлять голосовые сообщения. - Голосовые сообщения запрещены в этой группе. + Члены могут необратимо удалять отправленные сообщения. (24 часа) + Необратимое удаление сообщений запрещено. + Члены могут отправлять голосовые сообщения. + Голосовые сообщения запрещены. Минимальный расход батареи. Вы получите уведомления только когда приложение запущено, без фонового сервиса.]]> Уведомления Когда приложение запущено @@ -891,7 +891,7 @@ Мгновенно Больше расход батареи! Приложение постоянно запущено в фоне - уведомления будут показаны сразу же.]]> Меньше расход батареи. Приложение проверяет сообщения каждые 10 минут. Вы можете пропустить звонки и срочные сообщения.]]> - Можно изменить позже в настройках. + Как это влияет на потребление энергии LIVE Отправить живое сообщение Живое сообщение! @@ -927,7 +927,7 @@ Отправить живое сообщение — оно будет обновляться для получателей по мере того, как Вы его вводите Создать ссылку группы Запретить отправлять исчезающие сообщения. - Исчезающие сообщения запрещены в этой группе. + Исчезающие сообщения запрещены. %dнед %dд %d нед. @@ -940,7 +940,7 @@ Сбросить подтверждение Разрешить исчезающие сообщения, только если Ваш контакт разрешает их Вам. Запретить посылать исчезающие сообщения. - Члены группы могут посылать исчезающие сообщения. + Члены могут посылать исчезающие сообщения. Что нового Новое в %s Аудит безопасности @@ -1193,7 +1193,7 @@ Установить код доступа История Информация - Открыть профили чата + Изменить профили чата Полученное сообщение Отправленное сообщение Исчезающее сообщение @@ -1227,9 +1227,9 @@ Разрешить реакции на сообщения. Разрешить реакции на сообщения, только если ваш контакт разрешает их. Разрешить контактам добавлять реакции на сообщения. - Члены группы могут добавлять реакции на сообщения. + Члены могут добавлять реакции на сообщения. Реакции на сообщения в этом чате запрещены. - Реакции на сообщения запрещены в этой группе. + Реакции на сообщения запрещены. Только Ваш контакт может добавлять реакции на сообщения. Запретить реакции на сообщения. Запретить реакции на сообщения. @@ -1348,8 +1348,8 @@ Нотификации перестанут работать, пока вы не перезапустите приложение Таймаут протокола на KB Разрешить посылать файлы и медиа. - Члены группы могут слать файлы и медиа. - Файлы и медиа запрещены в этой группе. + Члены могут слать файлы и медиа. + Файлы и медиа запрещены. Файлы и медиа запрещены! Только владельцы группы могут разрешить файлы и медиа. Файлы и медиа @@ -1818,7 +1818,7 @@ Ссылки SimpleX Разрешить отправлять ссылки SimpleX. Запретить отправку ссылок SimpleX - Члены группы могут отправлять ссылки SimpleX + Члены могут отправлять ссылки SimpleX админы все члены владельцы @@ -1828,7 +1828,7 @@ Включено для Переслать Переслать и сохранить сообщение - Ссылки SimpleX запрещены в этой группе. + Ссылки SimpleX запрещены. Переслать сообщение… Литовский интерфейс Источник сообщения остаётся конфиденциальным. @@ -2021,7 +2021,7 @@ Слабое Среднее Выключено - Доступная панель чата + Доступная панель приложения Текущий профиль Нет информации, попробуйте перезагрузить Информация о серверах @@ -2199,4 +2199,134 @@ Ваши учетные данные могут быть отправлены в незашифрованном виде. Удалить архив? Загруженный архив базы данных будет навсегда удален с серверов. + Принятые условия + Принять условия + Нет серверов сообщений. + Нет серверов для приема сообщений. + Ошибки в настройках серверов. + Для профиля %s: + Нет серверов файлов и медиа. + Нет серверов для приема файлов. + Нет серверов для отправки файлов. + Недоставленные сообщения + Нажмите Создать адрес SimpleX в меню, чтобы создать его позже. + Адрес или одноразовая ссылка? + Безопасность соединения + Операторы серверов + Ваши серверы + Посмотреть условия + Посмотреть условия + %s.]]> + Условия будут автоматически приняты для включенных операторов: %s + Условия приняты: %s. + Вебсайт + %s.]]> + %s.]]> + %s, примите условия использования.]]> + Для оправки + Дополнительные серверы сообщений + Использовать для файлов + Открыть условия + Ошибка добавления сервера + Сервер оператора + Сервер добавлен к оператору %s. + Тулбары приложения + Прозрачность + Децентрализация сети + Второй оператор серверов в приложении! + Включить Flux + для лучшей конфиденциальности метаданных. + Улучшенная навигация в разговоре + Посмотреть измененные условия + Устройства Xiaomi: пожалуйста, включите опцию Autostart в системных настройках для работы нотификаций.]]> + Нет сообщения + Это сообщение было удалено или еще не получено. + Сообщение слишком большое! + Пожалуйста, уменьшите размер сообщения и отправьте снова. + Пожалуйста, уменьшите размер сообщения или уберите медиа и отправьте снова. + Чтобы отправить сообщение, скопируйте и уменьшите его размер. + Поделитесь одноразовой ссылкой с другом + Поделитесь адресом + Поделитесь SimpleX адресом в социальных сетях. + Адрес SimpleX и одноразовые ссылки безопасно отправлять через любой мессенджер. + Вы можете установить имя соединения, чтобы запомнить кому Вы отправили ссылку. + Новый сервер + Создать одноразовую ссылку + Для социальных сетей + Или поделиться конфиденциально + Адрес SimpleX или одноразовая ссылка? + Настройки адреса + Добавьте сотрудников в разговор. + Бизнес адрес + end-to-end шифрованием, с пост-квантовой безопасностью в прямых разговорах.]]> + Приложение всегда выполняется в фоне + Проверять сообщения каждые 10 минут + Без фонового сервиса + Нотификации и батарейка + Как это улучшает конфиденциальность + Операторы сети + Выберите операторов сети. + Вы можете настроить операторов в настройках Сеть и серверы. + Продолжить + Посмотреть позже + Обновить + Связанные мобильные устройства + Покинуть разговор? + Вы прекратите получать сообщения в этом разговоре. История будет сохранена. + Добавить друзей + Добавить сотрудников + Удалить разговор + Удалить разговор? + Пригласить в разговор + Разговор будет удален для всех участников - это действие нельзя отменить! + Оператор + %s серверы + %s.]]> + Условия будут приняты: %s + Оператор сети + Использовать %s + Использовать серверы + %s.]]> + %s.]]> + Или импортировать файл архива + Доступная панель чата + Разговор будет удален для Вас - это действие нельзя отменить! + Покинуть разговор + Только владельцы разговора могут поменять предпочтения. + Текст условий использования не может быть показан, вы можете посмотреть их через ссылку: + Разговор + Член будет удален из разговора - это действие нельзя отменить! + Серверы по умолчанию + Роль будет изменена на %s. Все участники разговора получат уведомление. + Ваш профиль будет отправлен участникам разговора. + %s.]]> + %s.]]> + Условия использования + Дополнительные серверы файлов и медиа + Ошибка сохранения сервера + Для доставки сообщений + Открыть изменения + Оператор серверов изменен. + Протокол сервера изменен. + Серверы для новых файлов Вашего текущего профиля + Для получения + Использовать для сообщений + Размыть + Прямые сообщения между членами запрещены. + Бизнес разговоры + - Открывает разговор на первом непрочитанном сообщении.\n- Перейти к цитируемому сообщению. + Конфиденциальность для ваших покупателей. + %1$s.]]> + Разговор уже существует! + только с одним контактом - поделитесь при встрече или через любой мессенджер.]]> + Нет серверов для доставки сообщений. + Вы можете сконфигурировать серверы через настройки. + Когда больше чем один оператор сети включен, приложение использует серверы разных операторов в каждом разговоре. + Ошибка сохранения серверов + Условия будут приняты для включенных операторов через 30 дней. + Ошибка приема условий + Соединение достигло предела недоставленных сообщений. Возможно, Ваш контакт не в сети. + Чтобы защитить Вашу ссылку от замены, Вы можете сравнить код безопасности. + Например, если Ваш контакт получает сообщения через сервер SimpleX Chat, Ваше приложение доставит их через сервер Flux. + Прямые сообщения между членами запрещены в этом разговоре. \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml index 73daa373c1..0afb405097 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -1162,8 +1162,7 @@ кольоровий дзвінок завершено %1$s помилка дзвінка - Наступне покоління -\nприватних повідомлень + Наступне покоління \nприватних повідомлень Кожен може хостити сервери. Інструменти розробника Експериментальні функції diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index 9df7b74c33..41e9793ba1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -3,7 +3,7 @@ a + b 1天 关于 SimpleX - 所有群组成员将保持连接。 + 所有群成员将保持连接。 关于 SimpleX Chat 以上,然后: 接受 @@ -22,7 +22,7 @@ 高级网络设置 接受连接请求? 接受隐身聊天 - 管理员可以创建链接以加入群组。 + 管理员可以创建链接以加入群。 添加预设服务器 通过链接连接 已建立连接 @@ -39,7 +39,7 @@ 消息和文件 添加个人资料 所有聊天记录和消息将被删除——这一行为无法撤销! - 所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。 + 所有聊天记录和消息将被删除——这一行为无法撤销!只有你的消息会被删除。 允许发送语音消息。 允许语音消息? 删除 @@ -52,8 +52,8 @@ 为所有人删除 为我删除 为所有聊天资料删除文件 - 删除群组 - 删除群组? + 删除群 + 删除群? 删除链接 删除链接? 连接 @@ -63,17 +63,17 @@ 连接 通过一次性链接进行连接? 通过联系人地址进行连接? - 加入群组? - 通过群组链接/二维码连接 + 加入群? + 通过群链接/二维码连接 总是通过中继连接 - 允许您的联系人不不可逆地删除已发送消息。(24小时) + 允许你的联系人不不可逆地删除已发送消息。(24小时) 联系人允许 允许语音消息,前提是你的联系人允许这样的消息。 - 您: %1$s - 允许您的联系人发送语音消息。 + 你: %1$s + 允许你的联系人发送语音消息。 始终 始终开启 - 允许您的联系人发送限时消息。 + 允许你的联系人发送限时消息。 应用程序构建:%s 所有联系人会保持连接。 允许 @@ -83,14 +83,14 @@ 删除聊天资料? 删除联系人 删除联系人? - 已删除群组 + 已删除群 删除图片 允许限时消息,前提是你的联系人允许这样的消息。 允许不可逆的消息删除,前提是你的联系人允许这样做。(24小时) 允许不可逆地删除已发送消息。(24小时) 为此删除聊天资料 删除数据库 - 在您重启应用程序或者更换密码后安卓密钥库系统用来安全地保存密码——来确保收到通知。 + 在你重启应用程序或者更换密码后安卓密钥库系统用来安全地保存密码——来确保收到通知。 安卓密钥库系统用来安全地保存密码——来确保通知服务运作。 外观 应用程序版本 @@ -107,23 +107,23 @@ 消息散列值错误 错误消息 ID 语音和视频通话 - 启用电池优化,关闭了后台服务和对新消息的定期请求。您可以在设置里重新启用它们。 + 启用电池优化,关闭了后台服务和对新消息的定期请求。你可以在设置里重新启用它们。 后台服务始终运行——一旦有消息,就会显示通知。 关闭音频 开启音频 已要求接收图片 - ,用于您在应用程序中的每个聊天资料 。]]> - 每个联系人和群成员。\n请注意:如果您有很多连接,您的电池和流量消耗可能会大大增加,并且某些连接可能会失败。]]> + ,用于你在应用程序中的每个聊天资料 。]]> + 每个联系人和群成员。\n请注意:如果你有很多连接,你的电池和流量消耗可能会大大增加,并且某些连接可能会失败。]]> 返回 - 最长续航 。您只会在应用程序运行时收到通知(无后台服务)。]]> - 较长续航 。应用每 10 分钟检查一次消息。您可能会错过来电或者紧急信息。]]> + 最长续航 。你只会在应用程序运行时收到通知(无后台服务)。]]> + 较长续航 。应用每 10 分钟检查一次消息。你可能会错过来电或者紧急信息。]]> 加粗 - 您和您的联系人都可以不可逆地删除已发送的消息。(24小时) - 您和您的联系人都可以发送限时消息。 - 您和您的联系人都可以发送语音消息。 + 你和你的联系人都可以不可逆地删除已发送的消息。(24小时) + 你和你的联系人都可以发送限时消息。 + 你和你的联系人都可以发送语音消息。 可以在设置里禁用它 - 应用程序运行时仍会显示通知。]]> 使用更多电量 !应用始终在后台运行——一即刻显示通知。]]> - 请注意:如果您丢失密码,您将无法恢复或者更改密码。]]> + 请注意:如果你丢失密码,你将无法恢复或者更改密码。]]> 通话已结束! 无法邀请联系人! 无法邀请联系人! @@ -133,7 +133,7 @@ 通话结束 更改数据库密码? 通话错误 - 为您更改地址 + 为你更改地址 通话中 通话进行中 呼叫中…… @@ -147,14 +147,14 @@ 无法接收文件 无法初始化数据库 将 %s 的角色更改为 %s - 将您的角色更改为 %s + 将你的角色更改为 %s 改变角色 - 更改群组角色? + 更改群角色? 取消链接预览 正在为 %s 更改地址…… 更改地址中…… 更改地址中…… - 创建您的资料 + 创建你的资料 聊天数据库已删除 聊天数据库已导入 钥匙串错误 @@ -164,47 +164,47 @@ 聊天运行中 聊天已停止 联系人偏好设置 - 您的偏好设置 - 群组偏好设置 - 只有群主可以改变群组偏好设置。 + 你的偏好设置 + 群偏好设置 + 只有群主可以改变群偏好设置。 保存偏好设置? - 设置群组偏好设置 + 设置群偏好设置 重新定义隐私 改进的隐私和安全 隐身聊天 - 加入群组中 + 加入群中 加入隐身聊天 隐身模式 点击开始一个新聊天 - 您的随机资料 + 你的随机资料 通过联系地址链接隐身 - 通过群组链接隐身 - 您分享了一次性链接隐身聊天 + 通过群链接隐身 + 你分享了一次性链接隐身聊天 点击以加入隐身聊天 - 您的聊天资料将被发送给群组成员 - 您正在尝试邀请与您共享隐身个人资料的联系人加入您使用主要个人资料的群组 - 隐身模式通过为每个联系人使用新的随机配置文件来保护您的隐私。 - 您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人 + 你的聊天资料将被发送给群成员 + 你正在尝试邀请与你共享隐身个人资料的联系人加入你使用主要个人资料的群 + 隐身模式通过为每个联系人使用新的随机配置文件来保护你的隐私。 + 你正在为该群使用隐身个人资料——为防止共享你的主要个人资料,不允许邀请联系人 通过一次性链接隐身 只有群主可以启用语音信息。 - 您的隐私设置 + 你的隐私设置 隐私和安全 保存服务器 它允许在一个聊天资料中有多个匿名连接,而它们之间没有任何共享数据。 - 当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。 + 当你与某人共享隐身聊天资料时,该资料将用于他们邀请你加入的群。 改进的服务器配置 电邮 编辑图片 - 编辑群组资料 + 编辑群资料 加密数据库错误 导出聊天数据库错误 导入聊天数据库错误 - 加入群组错误 + 加入群错误 删除用户资料错误 数据库密码不同于保存在密钥库中的密码。 数据库加密密码将被更新并存储在密钥库中。 数据库将被加密,密码存储在密钥库中。 - 在密匙库中没有找到密码,请手动输入。如果您使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。 + 在密匙库中没有找到密码,请手动输入。如果你使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。 从密钥库中删除密码? 在密钥库中保存密码 SimpleX Chat 服务 @@ -232,7 +232,7 @@ 关闭按键 配置 ICE 服务器 确认 - 确认您的证书 + 确认你的证书 已连接 已连接 连接 @@ -241,14 +241,14 @@ 连接中 每10分钟检查一次新消息,最长检查1分钟 已连接 - 与您的联系人比较安全码。 + 与你的联系人比较安全码。 语音通话来电 更改设置错误 - 群组邀请不再有效,已被发件人删除。 + 群邀请不再有效,已被发件人删除。 重复的显示名! 创建资料错误! 接受联系人请求错误 - 删除群组错误 + 删除群错误 删除待定的联系人连接错误 接收文件错误 切换资料错误! @@ -259,7 +259,7 @@ 对于每个人 解码错误 图片保存到相册 - 图片将在您的联系人在线时收到,请稍等或稍后查看! + 图片将在你的联系人在线时收到,请稍等或稍后查看! 保存文件错误 文件 未找到文件 @@ -296,17 +296,17 @@ 加密 加密数据库 输入正确密码。 - 不活跃群组 + 不活跃群 创建者 连接中(已接受) 连接中(已宣布) 扩展角色选择 - 群组链接 - 删除群组链接错误 + 群链接 + 删除群链接错误 数据库 ID 删除成员错误 更改角色错误 - 群组 + 限时消息 %d 天 连接中…… @@ -315,7 +315,7 @@ 联系人姓名 连接中(介绍邀请) 连接中…… - 联系人可以将信息标记为删除;您将可以查看这些信息。 + 联系人可以将信息标记为删除;你将可以查看这些信息。 贡献 已检查联系人 联系人已隐藏: @@ -323,12 +323,12 @@ 上下文图标 已复制到剪贴板 连接中…… - 创建群组链接 - 创建私密群组 + 创建群链接 + 创建私密群 创建链接 创建一次性邀请链接 创建队列 - 创建私密群组 + 创建私密群 不同的名字、头像和传输隔离。 法语界面 如何使用它 @@ -352,17 +352,17 @@ 全名: 输入你的名字: 已结束 - 群组已删除 - 将为所有成员删除群组——此操作无法撤消! + 群已删除 + 将为所有成员删除群——此操作无法撤消! 直接 私信 已启用 - 群组成员可以发送语音消息。 - 群组链接 + 成员可以发送语音消息。 + 群链接 启动聊天错误 数据库已加密! 加密数据库? - 数据库使用随机密码进行加密,您可以更改它。 + 数据库使用随机密码进行加密,你可以更改它。 打开聊天需要数据库密码。 停止聊天错误 导入聊天数据库? @@ -371,16 +371,16 @@ 输入密码…… 数据库加密密码将被更新。 数据库错误 - 群组资料已更新 - 群组全名: + 群资料已更新 + 群全名: 深色 已为联系人启用 - 为您启用 - 群组成员可以发送限时消息。 + 为你启用 + 成员可以发送限时消息。 创建个人资料 工作原理 - 未找到群组! - 创建群组链接错误 + 未找到群! + 创建群链接错误 连接中(已介绍) 数据库使用随机密码进行加密。请在导出前更改它。 数据库密码和导出 @@ -397,25 +397,25 @@ 删除联系人错误 更新网络配置错误 删除联系人请求错误 - 保存群组资料错误 + 保存群资料错误 保存 SMP 服务器错误 保存 ICE 服务器错误 发送消息错误 完整链接 - 输入群组名: - 群组邀请已过期 - 将为您删除群组——此操作无法撤消! - 群组资料存储在成员的设备上,而不是服务器上。 - 如果您选择拒绝发件人,将不会收到通知。 - 如何使用您的服务器 - 如果您确认,消息服务器将能够看到您的 IP 地址和您的提供商——以及您正在连接的服务器。 + 输入群名: + 群邀请已过期 + 将为你删除群——此操作无法撤消! + 群资料存储在成员的设备上,而不是服务器上。 + 如果你选择拒绝发件人,将不会收到通知。 + 如何使用你的服务器 + 如果你确认,消息服务器将能够看到你的 IP 地址和你的提供商——以及你正在连接的服务器。 图片 图片已发送 设备验证被禁用。关闭 SimpleX 锁定。 - 没有启用设备验证。一旦启用设备验证,您可以通过设置打开 SimpleX 锁定。 + 没有启用设备验证。一旦启用设备验证,你可以通过设置打开 SimpleX 锁定。 禁用 SimpleX 锁定 目前支持的最大文件尺寸是 %1$s。 - 文件将在您的联系人在线时收到,请稍等或稍后再查看! + 文件将在你的联系人在线时收到,请稍等或稍后再查看! 从图库 照片 视频 @@ -424,9 +424,9 @@ 启用自动删除消息? 用于控制台 此群中禁止成员之间私信。 - 该组禁止限时消息。 - 群组成员可以不可逆地删除已发送的消息。(24小时) - 群组成员可以私信。 + 限时消息被禁止。 + 成员可以不可逆地删除已发送的消息。(24小时) + 成员可以发送私信。 限时消息 在最近的应用程序中隐藏应用程序屏幕。 离开 @@ -434,13 +434,10 @@ 实时消息! 链接预览图片 无效的二维码 - 以后可以通过设置进行更改。 - 它可能在以下情况发生: -\n1. 消息在发送客户端 2 天后或在服务器上 30 天后过期。 -\n2. 消息解密失败,因为您或您的联系人使用了旧的数据库备份。 -\n3.连接被破坏。 - 离开群组? - 通过您的群组链接邀请 + 它如何影响电量 + 它可能在以下情况发生: \n1. 消息在发送客户端 2 天后或在服务器上 30 天后过期。 \n2. 消息解密失败,因为你或你的联系人使用了旧的数据库备份。 \n3.连接被破坏。 + 离开群? + 通过你的群链接邀请 本地名称 无效的消息格式 无效数据 @@ -449,9 +446,9 @@ 无效的连接链接 斜体 已邀请 - 邀请加入群组 + 邀请加入群 加入 - 加入群组? + 加入群? 邀请成员 已离开 浅色 @@ -462,25 +459,24 @@ 无效聊天 无效的服务器地址! 邀请成员 - 离开群组 + 离开群 仅本地配置文件数据 即时通知 即时通知! - 使用您的凭据登录 + 使用你的凭据登录 大文件! 链接无效! 已离开 - 此群组中禁止不可逆消息移除。 + 不可逆消息删除被禁止。 不可逆消息移除 实时消息 消息正文 等待确认中…… 即时 - 只有您的联系人才可以发送限时消息。 + 只有你的联系人才可以发送限时消息。 显示联系人和消息 只显示联系人 - 为保护您的信息,请打开 SimpleX 锁定。 -\n在启用此功能之前,系统将提示您完成身份验证。 + 为保护你的信息,请打开 SimpleX 锁定。 \n在启用此功能之前,系统将提示你完成身份验证。 聊天 分享文件…… 分享媒体…… @@ -488,16 +484,16 @@ 设置联系人姓名…… 已收到回复…… 已受到确认…… - 双层端到端加密 发送的消息。]]> + 仅客户端设备存储用户个人资料、联系人、群和消息。 视频通话(非端到端加密) 定期 私密通知 应用程序运行时 无端到端加密 显示 - 您只能在一台设备上使用最新版本的聊天数据库,否则您可能会停止接收来自某些联系人的消息。 + 你只能在一台设备上使用最新版本的聊天数据库,否则你可能会停止接收来自某些联系人的消息。 新密码…… - 该角色将更改为 %s。群组中每个人都会收到通知。 + 该角色将更改为 %s。群中每个人都会收到通知。 SimpleX 锁定 定期通知 定期启动 @@ -507,8 +503,8 @@ 启动中…… 禁止发送限时消息。 - 只有您可以发送限时消息。 - 只有您的联系人能不可逆地删除消息(您可以将它们标记为删除)。(24小时) + 只有你可以发送限时消息。 + 只有你的联系人能不可逆地删除消息(你可以将它们标记为删除)。(24小时) 禁止发送限时消息。 通知只会在应用程序停止之前发送! @@ -520,18 +516,18 @@ 通知 正在接收消息…… 要接收通知,请输入数据库密码 - SimpleX 后台服务 ——它每天使用百分之几的电池。]]> - 您的设置 - 允许 SimpleX 在后台运行。 否则,通知将被禁用。]]> + SimpleX 在后台运行而不是使用推送通知。]]> + 你的设置 + 允许它 来立即接收通知。]]> 通知预览 需要密码 定期通知被禁用! 在应用程序打开时运行 显示预览 - 该应用程序会定期获取新消息——它每天会消耗百分之几的电量。该应用程序不使用推送通知——您设备中的数据不会发送到服务器。 - 您的联系人可以允许完全删除消息。 + 该应用程序会定期获取新消息——它每天会消耗百分之几的电量。该应用程序不使用推送通知——你设备中的数据不会发送到服务器。 + 你的联系人可以允许完全删除消息。 已发送的消息将在设定的时间后被删除。 - 您的聊天数据库 + 你的聊天数据库 密码错误! 保存 打开 @@ -540,50 +536,48 @@ 打开聊天 更改数据库密码的尝试未完成。 移除 - + 保存 - + 移除 - 您必须在每次应用程序启动时输入密码——它不存储在设备上。 + 你必须在每次应用程序启动时输入密码——它不存储在设备上。 设置密码来导出 请输入正确的当前密码。 更新数据库密码 - 您的聊天数据库未加密——设置密码来保护它。 - 请安全地保存密码,如果您丢失了密码,您将无法访问聊天。 - 请安全地保存密码,如果您丢失了密码,您将无法更改它。 + 你的聊天数据库未加密——设置密码来保护它。 + 请安全地保存密码,如果你丢失了密码,你将无法访问聊天。 + 请安全地保存密码,如果你丢失了密码,你将无法更改它。 数据库密码错误 保存 更新 打开 SimpleX Chat 来接听电话 视频通话 - %1$s 想通过以下方式与您联系 + %1$s 想通过以下账户与你连接 拒接来电 点对点 错误:%s - 扫描视频通话中的二维码,或者您的联系人可以分享邀请链接。]]> - 您的通话 + 扫描视频通话中的二维码,或者你的联系人可以分享邀请链接。]]> + 你的通话 通过中继 未接来电 拒接来电 语音消息 语音消息 SimpleX Chat 通话 - 在视频通话中出示二维码,或分享链接。]]> - 您的聊天资料 + 在视频通话中出示二维码,或分享链接。]]> + 你的聊天资料 未接来电 待定来电 - 除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。 -\n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。 - 您已经连接到 %1$s。 - 您的聊天资料将被发送 -\n给您的联系人 + 除非你的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。 \n如果要连接,请让你的联系人创建另一个连接链接,并检查你的网络连接是否稳定。 + 你已经连接到 %1$s。 + 你的聊天资料将被发送 \n给你的联系人 资料和服务器连接 更新网络设置? - 只有您可以不可逆地删除消息(您的联系人可以将它们标记为删除)。(24小时) + 只有你可以不可逆地删除消息(你的联系人可以将它们标记为删除)。(24小时) 重新启动应用程序以创建新的聊天资料。 服务器需要授权才能创建队列,检查密码 测试在步骤 %s 失败。 - 您已经有一个显示名相同的聊天资料。请选择另一个名字。 + 你已经有一个显示名相同的聊天资料。请选择另一个名字。 已发送 静音 资料图片 @@ -591,33 +585,32 @@ 设置 未知错误 未知数据库错误:%s - 已更新的群组资料 + 已更新的群资料 已删除 %1$s - 您删除了 %1$s - 您的个人资料将发送给您收到此链接的联系人。 + 你删除了 %1$s + 你的个人资料将发送给你收到此链接的联系人。 正在尝试连接到用于从该联系人接收消息的服务器(错误:%1$s)。 - 您已连接到用于接收该联系人消息的服务器。 - 您分享了一次性链接 - 很可能此联系人已经删除了与您的联系。 + 你已连接到用于接收该联系人消息的服务器。 + 你分享了一次性链接 + 很可能此联系人已经删除了与你的联系。 资料图片占位符 - 您当前聊天资料的新连接服务器 - 您当前的资料 - 您的资料存储在您的设备上并且仅与您的联系人共享。SimpleX 服务器无法看见您的资料。 - 您的资料、联系人和发送的消息存储在您的设备上。 - 该资料仅与您的联系人共享。 + 你当前聊天资料的新连接服务器 + 你当前的资料 + 你的资料存储在你的设备上并且仅与你的联系人共享。SimpleX 服务器无法看见你的资料。 + 你的资料、联系人和发送的消息存储在你的设备上。 + 该资料仅与你的联系人共享。 开启 - 此操作无法撤消——您的个人资料、联系人、消息和文件将不可逆地丢失。 - 此设置适用于您当前聊天资料中的消息 + 此操作无法撤消——你的个人资料、联系人、消息和文件将不可逆地丢失。 + 此设置适用于你当前聊天资料中的消息 恢复数据库错误 恢复 - 您发送了群组邀请 - 您拒绝了群组邀请 - 您当前的聊天数据库将被删除并替换为导入的数据库。 -\n此操作无法撤消——您的个人资料、联系人、消息和文件将不可逆地丢失。 + 你发送了群邀请 + 你拒绝了群邀请 + 你当前的聊天数据库将被删除并替换为导入的数据库。 \n此操作无法撤消——你的个人资料、联系人、消息和文件将不可逆地丢失。 已邀请 %1$s - 保存群组资料 + 保存群资料 服务器地址中的证书指纹可能不正确 - 请使用 %1$s 检查您的网络连接,然后重试。 + 请使用 %1$s 检查你的网络连接,然后重试。 多个聊天资料 数据库不能正常工作。点击了解更多 消息传递错误 @@ -632,22 +625,22 @@ 标记为已验证 建立私密连接 以 %s 身份加入 - 如果您收到 SimpleX Chat 邀请链接,您可以在浏览器中打开它: + 如果你收到 SimpleX Chat 邀请链接,你可以在浏览器中打开它: 标记为已读 标记为未读 在消息中使用 Markdown 文件:%s - 成员将被移出群组——此操作无法撤消! + 成员将被移出群——此操作无法撤消! 消息草稿 k 标记为已删除 %d 星期 - 您将停止接收来自该群组的消息。聊天记录将被保留。 + 你将停止接收来自该群的消息。聊天记录将被保留。 成员 成员 %d 星期 %d 分钟 - %d 月 + %d 个月 网络和服务器 高级设置 已被管理员移除 @@ -659,8 +652,7 @@ 未选择联系人 一次性邀请链接 关闭 - 连接需要 Onion 主机。 -\n请注意:如果没有 .onion 地址,您将无法连接到服务器。 + 连接需要 Onion 主机。 \n请注意:如果没有 .onion 地址,你将无法连接到服务器。 从不 已提供 %s 已提供 %s:%2s @@ -668,8 +660,8 @@ 一次性邀请链接 好的 没有细节 - (仅由群组成员存储) - 只有您可以发送语音消息。 + (仅由群成员存储) + 只有你可以发送语音消息。 消息将被删除——此操作无法撤消! 一次只能发送10张图片 更多 @@ -693,7 +685,7 @@ 保存并通知联系人 保存并通知联系人 拒绝 - 为了保护隐私,而不是所有其他平台使用的用户 ID,SimpleX 具有消息队列的标识符,每个联系人都是分开的。 + 为了保护隐私,SimpleX 对你的每一个联系人使用不同的 ID。 TCP 连接超时 收到,禁止 设定1天 @@ -706,14 +698,14 @@ PING 次数 禁止发送语音消息。 PING 间隔 - 请检查您使用的链接是否正确,或者让您的联系人给您发送另一个链接。 + 请检查你使用的链接是否正确,或者让你的联系人给你发送另一个链接。 协议超时 拒绝 回复 重置为默认 运行聊天程序 扫码 - 从您联系人的应用程序中扫描安全码。 + 从你联系人的应用程序中扫描安全码。 安全码 秘密 安全评估 @@ -731,7 +723,7 @@ 接收地址将变更到不同的服务器。地址更改将在发件人上线后完成。 此链接不是有效的连接链接! 开始新的聊天 - 要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。 + 要与你的联系人验证端到端加密,请比较(或扫描)你设备上的代码。 取消静音 更新传输隔离模式? (从剪贴板扫描或粘贴) @@ -743,31 +735,31 @@ 太多图片! 待办的 更改接收地址? - 请让您的联系人启用发送语音消息。 + 请让你的联系人启用发送语音消息。 录制语音消息 发消息 重置 发送 - 发送实时消息——它会在您键入时为收件人更新 + 发送实时消息——它会在你键入时为收件人更新 开始新聊天 - (与您的联系人分享) + (与你的联系人分享) 通过链接连接 设置联系人姓名 - 您接受的连接将被取消! - 您与之共享此链接的联系人将无法连接! + 你接受的连接将被取消! + 你与之共享此链接的联系人将无法连接! 显示二维码 发送问题和想法 - 保护您的隐私和安全的消息传递和应用程序平台。 + 保护你的隐私和安全的消息传递和应用程序平台。 删去 你决定谁可以连接。 下一代私密通讯软件 - 粘贴您收到的链接 + 粘贴你收到的链接 已跳过消息 支持 SIMPLEX CHAT 发送链接预览 SOCKS 代理 停止聊天程序? - 停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,您将无法收发消息。 + 停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,你将无法收发消息。 恢复数据库备份 恢复数据库备份? 删除成员 @@ -792,7 +784,7 @@ 测试服务器 SimpleX 联系地址 SimpleX 一次性邀请 - SimpleX 群组链接 + SimpleX 群链接 SimpleX 链接 发送人可能已删除连接请求。 预设服务器 @@ -803,13 +795,13 @@ 跳过邀请成员 转变 禁止发送语音消息。 - 只有您的联系人可以发送语音消息。 + 只有你的联系人可以发送语音消息。 禁止向成员发送私信。 保护应用程序屏幕 主题 停止聊天以启用数据库操作。 %s 秒 - 该群组已不存在。 + 该群已不存在。 点击加入 停止 重新启动应用程序以使用导入的聊天数据库。 @@ -826,108 +818,107 @@ 停止聊天程序 权限被拒绝! 点击按钮 - 感谢您安装 SimpleX Chat! + 感谢你安装 SimpleX Chat! 相机 预设服务器地址 扫描服务器二维码 服务器测试失败! 一些服务器未通过测试: 在 GitHub 上加星 - 保存并通知群组成员 + 保存并通知群成员 扬声器关闭 扬声器开启 - 已将您移除 + 已将你移除 更新设置会将客户端重新连接到所有服务器。 系统 - 对方会在您键入时看到更新。 + 对方会在你键入时看到更新。 查看安全码 语音消息 (%1$s) 等待图像中 欢迎! 欢迎 %1$s! - 当您的联系人设备在线时,您将可以连接,请稍等或稍后查看! + 当你的联系人设备在线时,你将可以连接,请稍等或稍后查看! 评价此应用程序 使用 SOCKS 代理? %d 个文件,总大小为 %s - 您已加入此群组 - 您被邀请加入群组 + 你已加入此群 + 你被邀请加入群 默认(%s) 此聊天中禁止语音消息。 - 语音信息在该群组中被禁用。 + 语音信息被禁止。 验证安全码 使用 SimpleX Chat 服务器。 通过 %1$s - 邀请至群组 %1$s + 邀请至群 %1$s SimpleX 地址 SimpleX 团队 - %1$s 成员 + %1$s 名成员 - 您将在组主设备上线时连接到该群组,请稍等或稍后再检查! - 当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。 - 连接到 SimpleX Chat 开发者提出任何问题并接收更新 。]]> - 您已接受连接 - 您的 SMP 服务器 - %1$d 已跳过消息 + 你将在组主设备上线时连接到该群,请稍等或稍后再检查! + 当你启动应用或在应用程序驻留后台超过30 秒后,你将需要进行身份验证。 + 连接到 SimpleX Chat 开发者提出任何问题并接收更新 。]]> + 你已接受连接 + 你的 SMP 服务器 + %1$d 条已跳过消息 %ds 更新内容 - 您被邀请加入群组 - 您没有聊天记录 + 你被邀请加入群 + 你没有聊天记录 等待图像中 语音消息 语音消息禁止发送! - 您需要允许您的联系人发送语音消息才能发送它们。 + 你需要允许你的联系人发送语音消息才能发送它们。 扫描二维码 - 您邀请了您的联系人 - 想要与您连接! - 您的联系人需要在线才能完成连接。 -\n您可以取消此连接并删除联系人(稍后尝试使用新链接)。 + 你邀请了一名联系人 + 想要与你连接! + 你的联系人需要在线才能完成连接。 \n你可以取消此连接并删除联系人(稍后尝试使用新链接)。 SimpleX 标志 - 您的 SimpleX 地址 + 你的 SimpleX 地址 为终端安装 SimpleX Chat 使用 SimpleX Chat 服务器? - 我们不会在服务器上存储您的任何联系人或消息(一旦发送)。 + 我们不会在服务器上存储你的任何联系人或消息(一旦发送)。 WebRTC ICE 服务器 - 中继服务器保护您的 IP 地址,但它可以观察通话的持续时间。 - 中继服务器仅在必要时使用。其他人可能会观察到您的IP地址。 - 您的 ICE 服务器 + 中继服务器保护你的 IP 地址,但它可以观察通话的持续时间。 + 中继服务器仅在必要时使用。其他人可能会观察到你的IP地址。 + 你的 ICE 服务器 视频关闭 - 您可以通过应用设置/数据库或重启应用开始聊天。 - 您将 %s 的角色更改为 %s - 您将自己的角色更改为 %s - 您已更改地址 - 您可以共享链接或二维码——任何人都可以加入该群组。如果您稍后将其删除,您不会失去该组的成员。 + 你可以通过应用设置/数据库或重启应用开始聊天。 + 你将 %s 的角色更改为 %s + 你将自己的角色更改为 %s + 你已更改地址 + 你可以共享链接或二维码——任何人都可以加入该群。如果你稍后将其删除,你不会失去该组的成员。 间接(%1$s) - 在移动应用程序中打开按钮。]]> + 在移动应用程序中打开按钮。]]> SimpleX 你将连接到所有群成员。 - 通过群组链接 + 通过群链接 通过一次性链接 通过联系地址链接 通过浏览器 - 您的服务器 + 你的服务器 当可用时 使用 .onion 主机 - 您的 ICE 服务器 + 你的 ICE 服务器 simplexmq: v%s (%2s) - 您的聊天由您掌控! - 您可以使用 markdown 来编排消息格式: + 你的聊天由你掌控! + 你可以使用 markdown 来编排消息格式: %dh %d 天 %dw - 您被邀请加入群组。 加入以与群组成员联系。 - 你加入了这个群组。连接到邀请组成员。 - 您更改了 %s 的地址 - 您已离开 - %d 已选择联系人 - 您允许 + 你被邀请加入群。 加入以与群成员联系。 + 你加入了这个群。连接到邀请组成员。 + 你更改了 %s 的地址 + 你已离开 + 已选择 %d 名联系人 + 你允许 带有可选的欢迎消息。 %dm %dmth 等待文件中 - 您的联系人发送的文件大于当前支持的最大大小 (%1$s). - 当您的连接请求被接受后,您将可以连接,请稍等或稍后检查! + 你的联系人发送的文件大于当前支持的最大大小 (%1$s). + 当你的连接请求被接受后,你将可以连接,请稍等或稍后检查! 使用服务器 - 您的服务器地址 + 你的服务器地址 视频开启 最多 40 秒,立即收到。 验证连接安全 @@ -937,11 +928,11 @@ 该消息将对所有成员标记为已被管理员移除。 删除成员消息? 观察员 - 您是观察者 - 更新群组链接错误 - 您无法发送消息! + 你是观察者 + 更新群链接错误 + 你无法发送消息! 初始角色 - 请联系群组管理员。 + 请联系群管理员。 系统 用于显示的密码 保存个人资料密码 @@ -959,18 +950,18 @@ 现在管理员可以: \n- 删除成员的消息。 \n- 禁用成员(观察员角色) - 使用密码保护您的聊天资料! + 使用密码保护你的聊天资料! 确认密码 更新用户隐私错误 保存用户密码错误 在搜索中输入密码 - 群组欢迎消息 - 群组管理员移除 + 群欢迎消息 + 群管理员移除 隐藏的个人资料密码 隐藏的聊天资料 隐藏个人资料 保存服务器? - 要显示您的隐藏的个人资料,请在您的聊天个人资料页面的搜索字段中输入完整密码。 + 要显示你的隐藏的个人资料,请在你的聊天个人资料页面的搜索字段中输入完整密码。 保存欢迎信息? 点击以激活个人资料。 取消隐藏 @@ -979,8 +970,8 @@ 感谢用户——通过 Weblate 做出贡献! 解除静音 欢迎消息 - 当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。 - 您可以隐藏或静音用户配置文件——长按以显示菜单。 + 当静音配置文件处于活动状态时,你仍会收到来自静音配置文件的电话和通知。 + 你可以隐藏或静音用户配置文件——长按以显示菜单。 欢迎消息 确认数据库升级 实验性 @@ -991,13 +982,13 @@ 数据库版本比应用程序更新,但无法降级迁移:%s 降级并打开聊天 隐藏: - 文件将在您的联系人完成上传后收到。 + 文件将在你的联系人完成上传后收到。 数据库版本不兼容 迁移:%s - 图片将在您的联系人完成上传后收到。 + 图片将在你的联系人完成上传后收到。 显示开发者选项 升级并打开聊天 - 警告:您可能会丢失部分数据! + 警告:你可能会丢失部分数据! 迁移确认无效 显示: 删除个人资料 @@ -1009,15 +1000,15 @@ 过多视频! 视频 等待视频中 - 视频将在您的联系人在线时收到,请稍等或稍后查看! + 视频将在你的联系人在线时收到,请稍等或稍后查看! 等待视频中 视频已发送 要求接收视频 - 视频将在您的联系人完成上传后收到。 + 视频将在你的联系人完成上传后收到。 服务器需要授权来上传,检查密码 上传文件 XFTP 服务器 - 您的 XFTP 服务器 + 你的 XFTP 服务器 Use .onion hosts 设置为否。]]> 使用 SOCKS 代理 端口 @@ -1040,7 +1031,7 @@ 没有应用程序密码 密码输入 请牢记或妥善保管——丢失的密码将无法恢复! - 您可以通过设置开启 SimpleX 锁定。 + 你可以通过设置开启 SimpleX 锁定。 身份验证 身份验证失败 更改密码 @@ -1058,15 +1049,15 @@ 密码已设置! 系统 未启用 SimpleX 锁定! - 您的身份无法验证,请再试一次。 + 你的身份无法验证,请再试一次。 身份验证已取消 当前密码 立即 错误消息散列 错误消息 ID - %1$d 消息解密失败。 - %1$d 已跳过消息。 - 当您或您的连接使用旧数据库备份时,可能会发生这种情况。 + %1$d 条消息解密失败。 + 跳过了 %1$d 条消息。 + 当你或你的连接使用旧数据库备份时,可能会发生这种情况。 解密错误 请向开发者报告。 上一条消息的散列不同。 @@ -1092,30 +1083,30 @@ 最大 1gb 的视频和文件 快速且无需等待发件人在线! 禁止音频/视频通话。 - 您和您的联系人都可以进行呼叫。 - 只有您可以进行呼叫。 - 只有您的联系人可以进行呼叫。 + 你和你的联系人都可以进行呼叫。 + 只有你可以进行呼叫。 + 只有你的联系人可以进行呼叫。 允许联系人呼叫你。 允许通话,前提是你的联系人允许它们。 禁止音频/视频通话。 1分钟 一次性链接 - 您和您的联系人都可以添加消息回应。 + 你和你的联系人都可以添加消息回应。 允许消息回应。 允许消息回应,前提是你的联系人允许它们。 应用程序密码被替换为自毁密码。 更改自毁模式 关于 SimpleX 地址 继续 - 您的所有联系人将保持连接。个人资料更新将发送给您的联系人。 + 你的所有联系人将保持连接。个人资料更新将发送给你的联系人。 自动接受 额外的次要 背景 5分钟 30秒 地址 - 将地址添加到您的个人资料,以便您的联系人可以与其他人共享。个人资料更新将发送给您的联系人。 - 允许您的联系人添加消息回应。 + 将地址添加到你的个人资料,以便你的联系人可以与其他人共享。个人资料更新将发送给你的联系人。 + 允许你的联系人添加消息回应。 额外的强调色 已删除所有应用程序数据。 已创建一个包含所提供名字的空白聊天资料,应用程序照常打开。 @@ -1131,7 +1122,7 @@ 消失于 设置地址错误 自定义主题 - 创建一个地址,让人们与您联系。 + 创建一个地址,让人们与你联系。 创建 SimpleX 地址 输入欢迎消息……(可选) 不创建地址 @@ -1149,9 +1140,9 @@ 已删除于:%s 消失于:%s 禁止消息回应。 - 只有您可以添加消息回应。 - 群组成员可以添加信息回应。 - 该群组禁用了消息回应。 + 只有你可以添加消息回应。 + 成员可以添加信息回应。 + 消息回应被禁止。 自毁密码已更改! 自毁密码已启用! 设置密码 @@ -1159,7 +1150,7 @@ 已发信息 历史记录 发送 - 如果您在打开应用时输入该密码,所有应用程序数据将被不可逆地删除! + 如果你在打开应用时输入该密码,所有应用程序数据将被不可逆地删除! 新的显示名: 已被管理员移除于 已发送于 @@ -1169,18 +1160,18 @@ %s (当前) 发送于 %s 收到的信息 - 只有您的联系人可以添加消息回应。 + 只有你的联系人可以添加消息回应。 打开数据库中…… 更改聊天资料 - 您的联系人可以扫描二维码或使用应用程序中的链接来建立连接。 - 您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。 - 如果您不能亲自见面,可以在视频通话中展示二维码,或分享链接。 + 你的联系人可以扫描二维码或使用应用程序中的链接来建立连接。 + 你可以将你的地址作为链接或二维码共享——任何人都可以连接到你。 + 如果你不能亲自见面,可以在视频通话中展示二维码,或分享链接。 了解更多 - 当人们请求连接时,您可以接受或拒绝它。 - 如果您以后删除您的地址,您不会丢失您的联系人。 + 当人们请求连接时,你可以接受或拒绝它。 + 如果你以后删除你的地址,你不会丢失你的联系人。 用户指南中阅读更多。]]> 界面颜色 - 与您的联系人保持连接。 + 与你的联系人保持连接。 与联系人分享 邀请朋友 保存自动接受设置 @@ -1189,9 +1180,9 @@ 你好! \n用 SimpleX Chat 与我联系:%s 让我们一起在 SimpleX Chat 里聊天 - 您可以以后创建它 + 你可以以后创建它 分享地址 - 您可以与您的联系人分享该地址,让他们与 %s 联系。 + 你可以与你的联系人分享该地址,让他们与 %s 联系。 预览 导入主题 SimpleX @@ -1216,8 +1207,8 @@ 已发信息 消息回应 该聊天禁用了消息回应。 - 如果您在打开应用程序时输入自毁密码: - 个人资料更新将被发送给您的联系人。 + 如果你在打开应用程序时输入自毁密码: + 个人资料更新将被发送给你的联系人。 记录更新于 禁止消息回应。 已收到于 @@ -1232,7 +1223,7 @@ 导入过程中发生了一些非致命错误: 应用程序 重启 - 通知将停止工作直到您重启应用程序 + 通知将停止工作直到你重启应用程序 关闭? 关闭 中止地址更改错误 @@ -1243,8 +1234,8 @@ 允许发送文件和媒体。 文件和媒体 只有组主可以启用文件和媒体。 - 此群组中禁止文件和媒体。 - 群组成员可以发送文件和媒体。 + 文件和媒体被禁止。 + 成员可以发送文件和媒体。 禁止发送文件和媒体。 禁止文件和媒体! 无过滤聊天 @@ -1261,9 +1252,7 @@ 选择一个文件 联系人 协调加密中… - - 更稳定的消息送达. -\n- 更好的群组. -\n- 还有更多! + - 更稳定的消息传送. \n- 更好的群. \n- 还有更多! 一个新的随机个人档案将被分享。 与 %s 协调加密中… 该功能还没支持。请尝试下一个版本。 @@ -1274,10 +1263,10 @@ %s: %s 敬请期待! 数据库将被加密,密码将存储在设置中。 - 您可以稍后在“设置”中启用它 - 对所有群组关闭 + 你可以稍后在“设置”中启用它 + 对所有群关闭 无送货信息 - 您的个人资料 %1$s 将被共享。 + 你的个人资料 %1$s 将被共享。 将为所有联系人启用送达回执功能。 打开应用程序设置 为所有组启用 @@ -1294,13 +1283,12 @@ %s 在 %s 禁用回执? 重新协商加密? - 可以在联系人和群组设置中覆盖它们。 + 可以在联系人和群设置中覆盖它们。 对所有联系人关闭 - 随机密码以明文形式存储在设置中。 -\n您可以稍后更改。 + 随机密码以明文形式存储在设置中。 \n你可以稍后更改。 已禁用 %d 组的送达回执功能 需要为 %s 重新协商加密 - SimpleX 无法在后台运行。只有在应用程序运行时,您才会收到通知。 + SimpleX 无法在后台运行。只有在应用程序运行时,你才会收到通知。 启用(保留覆盖) 即将更新数据库加密密码并将其存储在设置中。 使用当前配置文件 @@ -1312,16 +1300,16 @@ 即使在对话中禁用。 使用随机密码 无后台通话 - 您可以稍后通过应用程序隐私和安全设置启用它们。 + 你可以稍后通过应用程序隐私和安全设置启用它们。 在设置中保存密码 启用 - 该群组成员超过 %1$d ,未发送送达回执。 + 该群成员超过 %1$d ,未发送送达回执。 修复连接? 我们错过的第二个"√"!✅ 设定数据库密码 - 为群组禁用回执吗? + 为群禁用回执吗? %s、%s 和 %s 已连接 - 修复群组成员不支持的问题 + 修复群成员不支持的问题 已为 %d 组启用送达回执功能 重新协商 禁用(保留覆盖) @@ -1336,18 +1324,18 @@ 修复连接 %s 和 %s 已连接 关闭 - 小群组(最多 20 人) + 小群(最多 20 人) 显示最近的消息 将送达回执发送给 启用已读回执时出错! 更改密码或重启应用后,密码将以明文形式保存在设置中。 - 粘贴您收到的链接以与您的联系人联系… + 粘贴你收到的链接以与你的联系人联系… 送达回执 没有选择聊天 可以加密 重新协商加密 禁用(保留组覆盖) - 为群组启用回执吗? + 为群启用回执吗? 修复联系人不支持的问题 对 %s 加密正常 修复还原备份后的加密问题。 @@ -1358,7 +1346,7 @@ 连接请求将发送给该组成员。 密码以明文形式存储在设置中。 同步连接时出错 - 这些设置适用于您当前的配置文件 + 这些设置适用于你当前的配置文件 允许为 %s 重新协商加密 为所有人启用 需要重新协商加密 @@ -1369,14 +1357,12 @@ 全新桌面应用! 6种全新的界面语言 应用程序为新的本地文件(视频除外)加密。 - 发现和加入群组 + 发现和加入群 简化的隐身模式 阿拉伯语、保加利亚语、芬兰语、希伯莱语、泰国语和乌克兰语——得益于用户和Weblate。 在桌面应用里创建新的账号。💻 在连接时切换隐身模式。 - - 连接到目录服务(BETA)! -\n- 发送回执(至多20名成员)。 -\n- 更快,更稳定。 + - 连接到目录服务(BETA)! \n- 发送回执(至多20名成员)。 \n- 更快、更稳定。 打开 创建成员联系人时出错 发送私信来连接 @@ -1394,14 +1380,14 @@ 加入你的群吗? %1$s 群。]]> 这是你自己的一次性链接! - %d 条消息被标记为删除 + %d 条消息被标记为已删除 群已存在! 已经在连接了! 无法解码该视频。请尝试不同视频或联络开发者。 %s 已连接 及其他 %d 个事件 通过链接进行连接吗? - 已经加入了该群组! + 已经加入了该群! %s、 %s 和 %d 名成员 解封成员 连接到你自己? @@ -1480,13 +1466,13 @@ 从已链接移动设备加载文件时请稍候片刻 桌面应用版本 %s 不兼容此应用。 验证连接 - 屏蔽群组成员 - 使用随机身份创建群组 + 屏蔽群成员 + 使用随机身份创建群 连接移动端和桌面端应用程序!🔗 通过安全的、抗量子计算机破解的协议。 隐藏不需要的信息。 - 更佳的群组 - 匿名群组 + 更佳的群 + 匿名群 %s 连接断开]]> 加入速度更快、信息更可靠。 - 可选择通知已删除的联系人。 @@ -1519,10 +1505,10 @@ 不给新成员发送历史消息。 或者显示此码 给新成员发送了最多 100 条历史消息。 - 您扫描的码不是 SimpleX 链接的二维码。 - 您粘贴的文本不是 SimpleX 链接。 + 你扫描的码不是 SimpleX 链接的二维码。 + 你粘贴的文本不是 SimpleX 链接。 启用相机访问 - 您可以在连接详情中再次查看邀请链接。 + 你可以在连接详情中再次查看邀请链接。 保留未使用的邀请吗? 分享此一次性邀请链接 建群: 来建立新群。]]> @@ -1635,7 +1621,7 @@ 应用数据迁移 通过二维码迁移到另一部设备。 画中画通话 - 更安全的群组 + 更安全的群 通话时使用本应用 迁移到此处 或粘贴存档链接 @@ -1720,9 +1706,9 @@ 不允许语音消息 SimpleX 链接 允许发送 SimpleX 链接。 - 群成员可发送 SimpleX 链接。 + 成员可发送 SimpleX 链接。 禁止发送 SimpleX 链接 - 此群禁止 SimpleX 链接。 + SimpleX 链接被禁止。 所有者 启用对象 管理员 @@ -1824,8 +1810,7 @@ 缩放 Webview 初始化失败。更新你的系统到新版本。请联系开发者。 \n错误:%s - 保护您的真实 IP 地址。不让你的联系人选择的消息中继看到它。 -\n在*网络&服务器*设置中开启。 + 保护你的真实 IP 地址。不让你的联系人选择的消息中继看到它。 \n在*网络&服务器*设置中开启。 确认来自未知服务器的文件。 安全地接收文件 改进了消息传递 @@ -1996,7 +1981,7 @@ 你仍可以在聊天列表中查看与 %1$s 的对话。 粘贴链接 联系人 - 单手用户界面 + 单手应用工具栏 正在连接联系人,请等候或稍后检查! 联系人被删除了。 要能够呼叫联系人,你需要先允许联系人进行呼叫。 @@ -2079,8 +2064,7 @@ 分享配置文件 转发消息出错 在你选中消息后这些消息被删除。 - %1$d 个文件错误: -\n%2$s + %1$d 个文件错误:\n%2$s 其他 %1$d 个文件错误。 %1$d 个文件未被下载。 转发 %1$s 条消息? @@ -2134,7 +2118,7 @@ 创建一次性链接 用于社交媒体 或者私下分享 - 选择运营者 + 服务器运营者 网络运营者 30 天后将接受已启用的运营者的条款。 继续 @@ -2211,4 +2195,39 @@ 接受运营者条款的日期:%s 远程移动设备 或者导入压缩文件 + 小米设备:请在系统设置中开启“自动启动”让通知正常工作。]]> + 消息太大! + 你可以复制并减小消息大小来发送它。 + 请减小消息大小或删除媒体并再次发送。 + 将你的团队成员加入对话。 + 企业地址 + 端到端加密,私信具备后量子密码安全性。]]> + 无后台服务 + 每 10 分钟检查消息 + 它如何帮助隐私 + 应用始终在后台运行 + 通知和电量 + 离开聊天? + 你将停止从这个聊天收到消息。聊天历史将被保留。 + 邀请加入聊天 + 将为你删除聊天 - 此操作无法撤销! + 删除聊天 + 删除聊天? + 添加好友 + 添加团队成员 + 将为所有成员删除聊天 - 此操作无法撤销! + 仅聊天所有人可更改首选项。 + 角色将被更改为 %s。聊天中的每个人都会收到通知。 + 成员之间的私信被禁止。 + 此聊天禁止成员之间的私信。 + 企业聊天 + 客户隐私。 + %1$s连接。]]> + 聊天已存在! + 单手聊天工具栏 + 离开聊天 + 你的聊天个人资料将被发送给聊天成员 + 聊天 + 将从聊天中删除成员 - 此操作无法撤销! + 请减小消息尺寸并再次发送。 \ No newline at end of file From 586671c3076cc4c4e39f7deb79dd190d518c4e82 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 5 Dec 2024 21:46:35 +0000 Subject: [PATCH 09/12] website: translations (#5331) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (258 of 258 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (258 of 258 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/ * Translated using Weblate (Italian) Currently translated at 100.0% (258 of 258 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (258 of 258 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/hu/ --------- Co-authored-by: 大王叫我来巡山 Co-authored-by: Random Co-authored-by: Ghost of Sparta --- website/langs/hu.json | 3 ++- website/langs/it.json | 3 ++- website/langs/zh_Hans.json | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/website/langs/hu.json b/website/langs/hu.json index b0b76714bc..7702b56f47 100644 --- a/website/langs/hu.json +++ b/website/langs/hu.json @@ -255,5 +255,6 @@ "simplex-chat-via-f-droid": "SimpleX Chat az F-Droidon keresztül", "simplex-chat-repo": "SimpleX Chat tároló", "stable-and-beta-versions-built-by-developers": "A fejlesztők által készített stabil és béta verziók", - "hero-overlay-card-3-p-3": "A Trail of Bits 2024 júliusában felülvizsgálta a SimpleX hálózati protokollok kriptográfiai felépítését. Tudjon meg többet." + "hero-overlay-card-3-p-3": "A Trail of Bits 2024 júliusában felülvizsgálta a SimpleX hálózati protokollok kriptográfiai felépítését. Tudjon meg többet.", + "docs-dropdown-14": "SimpleX üzleti célra" } diff --git a/website/langs/it.json b/website/langs/it.json index bdc4c38d45..502ab6d886 100644 --- a/website/langs/it.json +++ b/website/langs/it.json @@ -255,5 +255,6 @@ "docs-dropdown-10": "Trasparenza", "docs-dropdown-12": "Sicurezza", "docs-dropdown-11": "Domande frequenti", - "hero-overlay-card-3-p-3": "Trail of Bits ha analizzato la progettazione crittografica dei protocolli della rete SimpleX nel luglio 2024. Leggi di più." + "hero-overlay-card-3-p-3": "Trail of Bits ha analizzato la progettazione crittografica dei protocolli della rete SimpleX nel luglio 2024. Leggi di più.", + "docs-dropdown-14": "SimpleX per il lavoro" } diff --git a/website/langs/zh_Hans.json b/website/langs/zh_Hans.json index e482056565..836f7057ee 100644 --- a/website/langs/zh_Hans.json +++ b/website/langs/zh_Hans.json @@ -255,5 +255,6 @@ "docs-dropdown-10": "透明度", "docs-dropdown-11": "常问问题", "docs-dropdown-12": "安全性", - "hero-overlay-card-3-p-3": "Trail of Bits 于 2024 年 7 月审核了 SimpleX 网络协议的加密设计。了解更多信息。" + "hero-overlay-card-3-p-3": "Trail of Bits 于 2024 年 7 月审核了 SimpleX 网络协议的加密设计。了解更多信息。", + "docs-dropdown-14": "企业版 SimpleX" } From bd2ca749872a3d62d396198cae764d0a3c8bcf73 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 5 Dec 2024 22:22:03 +0000 Subject: [PATCH 10/12] ui: update "server operators privacy" in onboarding --- apps/ios/ru.lproj/Localizable.strings | 2 +- .../common/views/onboarding/ChooseServerOperators.kt | 1 + .../chat/simplex/common/views/onboarding/SimpleXInfo.kt | 2 +- .../common/src/commonMain/resources/MR/base/strings.xml | 5 +++-- .../common/src/commonMain/resources/MR/ru/strings.xml | 7 ++++--- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index c2124b34a4..57c1b91769 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -5397,7 +5397,7 @@ "You can configure operators in Network & servers settings." = "Вы можете настроить операторов в настройках Сеть и серверы."; /* No comment provided by engineer. */ -"You can configure servers via settings." = "Вы можете сконфигурировать серверы через настройки."; +"You can configure servers via settings." = "Вы можете настроить серверы позже."; /* No comment provided by engineer. */ "You can create it later" = "Вы можете создать его позже"; diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt index 782f51c205..132381294f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt @@ -342,6 +342,7 @@ private fun ChooseServerOperatorsInfoView() { ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_PADDING)) { AppBarTitle(stringResource(MR.strings.onboarding_network_operators), withPadding = false) ReadableText(stringResource(MR.strings.onboarding_network_operators_app_will_use_different_operators)) + ReadableText(stringResource(MR.strings.onboarding_network_operators_cant_see_who_talks_to_whom)) ReadableText(stringResource(MR.strings.onboarding_network_operators_app_will_use_for_routing)) SectionBottomSpacer() } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt index a77c25dd1d..020d3493b9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt @@ -181,7 +181,7 @@ fun OnboardingInformationButton( .clip(CircleShape) .clickable { onClick() } ) { - Row(Modifier.padding(8.dp), horizontalArrangement = Arrangement.spacedBy(4.dp) ) { + Row(Modifier.padding(8.dp), horizontalArrangement = Arrangement.spacedBy(4.dp)) { Icon( painterResource(MR.images.ic_info), null, diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index d56a7fe87c..7fc46cf3a7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1075,8 +1075,9 @@ Server operators Network operators - When more than one network operator is enabled, the app will use the servers of different operators for each conversation. - For example, if you receive messages via SimpleX Chat server, the app will use one of Flux servers for private routing. + The app protects your privacy by using different operators in each conversation. + When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. Select network operators to use. How it helps privacy You can configure servers via settings. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index 00df4f75cb..9e39ad61a4 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -2264,7 +2264,7 @@ Без фонового сервиса Нотификации и батарейка Как это улучшает конфиденциальность - Операторы сети + Операторы серверов Выберите операторов сети. Вы можете настроить операторов в настройках Сеть и серверы. Продолжить @@ -2320,8 +2320,9 @@ Разговор уже существует! только с одним контактом - поделитесь при встрече или через любой мессенджер.]]> Нет серверов для доставки сообщений. - Вы можете сконфигурировать серверы через настройки. - Когда больше чем один оператор сети включен, приложение использует серверы разных операторов в каждом разговоре. + Вы можете настроить серверы позже. + Приложение улучшает конфиденциальность используя разных операторов в каждом разговоре. + Когда больше чем один оператор включен, ни один из них не видит метаданные, чтобы определить, кто соединен с кем. Ошибка сохранения серверов Условия будут приняты для включенных операторов через 30 дней. Ошибка приема условий From 886dc56de864fdf7bc44ed8b95d2dcd8fcccfdff Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 5 Dec 2024 23:01:37 +0000 Subject: [PATCH 11/12] ui: update business chat info type --- apps/ios/SimpleXChat/ChatTypes.swift | 3 ++- .../commonMain/kotlin/chat/simplex/common/model/ChatModel.kt | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 5379cce236..a2d44d59d0 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -1962,8 +1962,9 @@ public struct GroupProfile: Codable, NamedChat, Hashable { } public struct BusinessChatInfo: Decodable, Hashable { - public var memberId: String public var chatType: BusinessChatType + public var businessId: String + public var customerId: String } public enum BusinessChatType: String, Codable, Hashable { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index 4d75d37b99..b9e52763a6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -1546,8 +1546,9 @@ data class GroupProfile ( @Serializable data class BusinessChatInfo ( - val memberId: String, - val chatType: BusinessChatType + val chatType: BusinessChatType, + val businessId: String, + val customerId: String, ) @Serializable From 5ef14ca95e6301d687d3ad7e69777f50720e9237 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 5 Dec 2024 23:30:05 +0000 Subject: [PATCH 12/12] 6.2-beta.6: ios 253, android 258, desktop 81 --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 36 +++++++++++----------- apps/multiplatform/gradle.properties | 8 ++--- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 690ba2579a..22d5ba971b 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -167,9 +167,9 @@ 648010AB281ADD15009009B9 /* CIFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648010AA281ADD15009009B9 /* CIFileView.swift */; }; 648679AB2BC96A74006456E7 /* ChatItemForwardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */; }; 649B28DD2CFE07CF00536B68 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28D82CFE07CF00536B68 /* libffi.a */; }; - 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP-ghc9.6.3.a */; }; + 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo-ghc9.6.3.a */; }; 649B28DF2CFE07CF00536B68 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DA2CFE07CF00536B68 /* libgmpxx.a */; }; - 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP.a */; }; + 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo.a */; }; 649B28E12CFE07CF00536B68 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DC2CFE07CF00536B68 /* libgmp.a */; }; 649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; }; 649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; }; @@ -516,9 +516,9 @@ 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemForwardingView.swift; sourceTree = ""; }; 6493D667280ED77F007A76FB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 649B28D82CFE07CF00536B68 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP-ghc9.6.3.a"; sourceTree = ""; }; + 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo-ghc9.6.3.a"; sourceTree = ""; }; 649B28DA2CFE07CF00536B68 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP.a"; sourceTree = ""; }; + 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo.a"; sourceTree = ""; }; 649B28DC2CFE07CF00536B68 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeImageView.swift; sourceTree = ""; }; 649BCDA12805D6EF00C3A862 /* CIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIImageView.swift; sourceTree = ""; }; @@ -671,9 +671,9 @@ 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, 649B28E12CFE07CF00536B68 /* libgmp.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, - 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP.a in Frameworks */, + 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo.a in Frameworks */, CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */, - 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP-ghc9.6.3.a in Frameworks */, + 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo-ghc9.6.3.a in Frameworks */, 649B28DD2CFE07CF00536B68 /* libffi.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -754,8 +754,8 @@ 649B28D82CFE07CF00536B68 /* libffi.a */, 649B28DC2CFE07CF00536B68 /* libgmp.a */, 649B28DA2CFE07CF00536B68 /* libgmpxx.a */, - 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP-ghc9.6.3.a */, - 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.5-592uBhlQO6KIf70TJf5KpP.a */, + 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo-ghc9.6.3.a */, + 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.6-5lGV6gtq9gSDlEsE8DHXYo.a */, ); path = Libraries; sourceTree = ""; @@ -1931,7 +1931,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1980,7 +1980,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -2021,7 +2021,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2041,7 +2041,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2066,7 +2066,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -2103,7 +2103,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -2140,7 +2140,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2191,7 +2191,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2242,7 +2242,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -2276,7 +2276,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 251; + CURRENT_PROJECT_VERSION = 253; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index b490c26f87..e620b4992d 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -24,11 +24,11 @@ android.nonTransitiveRClass=true kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.jvm.target=11 -android.version_name=6.2-beta.5 -android.version_code=256 +android.version_name=6.2-beta.6 +android.version_code=258 -desktop.version_name=6.2-beta.5 -desktop.version_code=80 +desktop.version_name=6.2-beta.6 +desktop.version_code=81 kotlin.version=1.9.23 gradle.plugin.version=8.2.0