From 3ff68dbc7bc1b896391cb345d6453002fe8ad296 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sun, 21 May 2023 00:13:38 +0100 Subject: [PATCH 01/15] 5.1.0-beta.1: Android 120, iOS 146 --- apps/android/app/build.gradle | 4 +- apps/ios/SimpleX.xcodeproj/project.pbxproj | 48 +++++++++++----------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/apps/android/app/build.gradle b/apps/android/app/build.gradle index 88a6edcc74..7d45479ecc 100644 --- a/apps/android/app/build.gradle +++ b/apps/android/app/build.gradle @@ -13,8 +13,8 @@ android { targetSdk 32 // !!! // skip version code after release to F-Droid, as it uses two version codes - versionCode 119 - versionName "5.1-beta.0" + versionCode 120 + versionName "5.1-beta.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index ce445692ff..89bb1ad562 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -84,6 +84,11 @@ 5CA059ED279559F40002BEB4 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA059C4279559F40002BEB4 /* ContentView.swift */; }; 5CA059EF279559F40002BEB4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5CA059C5279559F40002BEB4 /* Assets.xcassets */; }; 5CA7DFC329302AF000F7FDDE /* AppSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA7DFC229302AF000F7FDDE /* AppSheet.swift */; }; + 5CAC41212A1985AC00C331A2 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411C2A1985AB00C331A2 /* libgmp.a */; }; + 5CAC41222A1985AC00C331A2 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411D2A1985AB00C331A2 /* libffi.a */; }; + 5CAC41232A1985AC00C331A2 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411E2A1985AB00C331A2 /* libgmpxx.a */; }; + 5CAC41242A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411F2A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a */; }; + 5CAC41252A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC41202A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a */; }; 5CADE79A29211BB900072E13 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CADE79929211BB900072E13 /* PreferencesView.swift */; }; 5CADE79C292131E900072E13 /* ContactPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CADE79B292131E900072E13 /* ContactPreferencesView.swift */; }; 5CB0BA882826CB3A00B3292C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CB0BA862826CB3A00B3292C /* InfoPlist.strings */; }; @@ -169,11 +174,6 @@ 64AA1C6C27F3537400AC7277 /* DeletedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */; }; 64C06EB52A0A4A7C00792D4D /* ChatItemInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */; }; 64C3B0212A0D359700E19930 /* CustomTimePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C3B0202A0D359700E19930 /* CustomTimePicker.swift */; }; - 64C3B0272A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C3B0222A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx.a */; }; - 64C3B0282A1393FC00E19930 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C3B0232A1393FC00E19930 /* libffi.a */; }; - 64C3B0292A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C3B0242A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx-ghc8.10.7.a */; }; - 64C3B02A2A1393FC00E19930 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C3B0252A1393FC00E19930 /* libgmp.a */; }; - 64C3B02B2A1393FC00E19930 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C3B0262A1393FC00E19930 /* libgmpxx.a */; }; 64D0C2C029F9688300B38D5F /* UserAddressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2BF29F9688300B38D5F /* UserAddressView.swift */; }; 64D0C2C229FA57AB00B38D5F /* UserAddressLearnMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */; }; 64D0C2C629FAC1EC00B38D5F /* AddContactLearnMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2C529FAC1EC00B38D5F /* AddContactLearnMore.swift */; }; @@ -355,6 +355,11 @@ 5CAC41192A192D8400C331A2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 5CAC411A2A192DE800C331A2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = "ja.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; 5CAC411B2A192DE800C331A2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; + 5CAC411C2A1985AB00C331A2 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5CAC411D2A1985AB00C331A2 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 5CAC411E2A1985AB00C331A2 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5CAC411F2A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a"; sourceTree = ""; }; + 5CAC41202A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a"; sourceTree = ""; }; 5CADE79929211BB900072E13 /* PreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = ""; }; 5CADE79B292131E900072E13 /* ContactPreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactPreferencesView.swift; sourceTree = ""; }; 5CB0BA872826CB3A00B3292C /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -445,11 +450,6 @@ 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedItemView.swift; sourceTree = ""; }; 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemInfoView.swift; sourceTree = ""; }; 64C3B0202A0D359700E19930 /* CustomTimePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTimePicker.swift; sourceTree = ""; }; - 64C3B0222A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx.a"; sourceTree = ""; }; - 64C3B0232A1393FC00E19930 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 64C3B0242A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx-ghc8.10.7.a"; sourceTree = ""; }; - 64C3B0252A1393FC00E19930 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 64C3B0262A1393FC00E19930 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; 64D0C2BF29F9688300B38D5F /* UserAddressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressView.swift; sourceTree = ""; }; 64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressLearnMore.swift; sourceTree = ""; }; 64D0C2C529FAC1EC00B38D5F /* AddContactLearnMore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactLearnMore.swift; sourceTree = ""; }; @@ -498,12 +498,12 @@ buildActionMask = 2147483647; files = ( 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, + 5CAC41232A1985AC00C331A2 /* libgmpxx.a in Frameworks */, + 5CAC41212A1985AC00C331A2 /* libgmp.a in Frameworks */, + 5CAC41242A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a in Frameworks */, + 5CAC41252A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, - 64C3B0292A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx-ghc8.10.7.a in Frameworks */, - 64C3B0272A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx.a in Frameworks */, - 64C3B02A2A1393FC00E19930 /* libgmp.a in Frameworks */, - 64C3B0282A1393FC00E19930 /* libffi.a in Frameworks */, - 64C3B02B2A1393FC00E19930 /* libgmpxx.a in Frameworks */, + 5CAC41222A1985AC00C331A2 /* libffi.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -564,11 +564,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 64C3B0232A1393FC00E19930 /* libffi.a */, - 64C3B0252A1393FC00E19930 /* libgmp.a */, - 64C3B0262A1393FC00E19930 /* libgmpxx.a */, - 64C3B0242A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx-ghc8.10.7.a */, - 64C3B0222A1393FC00E19930 /* libHSsimplex-chat-5.1.0.0-AMORL5TbUTXHTJ22w4wnNx.a */, + 5CAC411D2A1985AB00C331A2 /* libffi.a */, + 5CAC411C2A1985AB00C331A2 /* libgmp.a */, + 5CAC411E2A1985AB00C331A2 /* libgmpxx.a */, + 5CAC411F2A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a */, + 5CAC41202A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a */, ); path = Libraries; sourceTree = ""; @@ -1470,7 +1470,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 145; + CURRENT_PROJECT_VERSION = 146; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1512,7 +1512,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 145; + CURRENT_PROJECT_VERSION = 146; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1592,7 +1592,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 145; + CURRENT_PROJECT_VERSION = 146; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; @@ -1624,7 +1624,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 145; + CURRENT_PROJECT_VERSION = 146; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; From 34af1e258ccb8075f2bbe52c08308427e6d36f19 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 22 May 2023 12:36:20 +0400 Subject: [PATCH 02/15] mobile: chat item info - show placeholder if version text is empty (#2476) * mobile: show chat item text representation if message text is empty in info * android, no menu * undo diff * update text for empty message in history * update Android --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- .../app/views/chat/ChatItemInfoView.kt | 47 +++++++++----- .../app/src/main/res/values/strings.xml | 1 + .../Shared/Views/Chat/ChatItemInfoView.swift | 63 +++++++++++-------- 3 files changed, 70 insertions(+), 41 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt index 1b69f5c4cd..8ef98933da 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatItemInfoView.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.app.R @@ -38,17 +39,30 @@ fun ChatItemInfoView(ci: ChatItem, ciInfo: ChatItemInfo, devTools: Boolean) { fun ItemVersionView(ciVersion: ChatItemVersion, current: Boolean) { val showMenu = remember { mutableStateOf(false) } val text = ciVersion.msgContent.text + + @Composable + fun VersionText() { + if (text != "") { + MarkdownText( + text, if (text.isEmpty()) emptyList() else ciVersion.formattedText, + linkMode = SimplexLinkMode.DESCRIPTION, uriHandler = uriHandler, + onLinkLongClick = { showMenu.value = true } + ) + } else { + Text( + generalGetString(R.string.item_info_no_text), + style = MaterialTheme.typography.body1.copy(color = MaterialTheme.colors.secondary, lineHeight = 22.sp, fontStyle = FontStyle.Italic) + ) + } + } + Column { Box( Modifier.clip(RoundedCornerShape(18.dp)).background(itemColor).padding(bottom = 3.dp) .combinedClickable(onLongClick = { showMenu.value = true }, onClick = {}) ) { Box(Modifier.padding(vertical = 6.dp, horizontal = 12.dp)) { - MarkdownText( - text, if (text.isEmpty()) emptyList() else ciVersion.formattedText, - linkMode = SimplexLinkMode.DESCRIPTION, uriHandler = uriHandler, - onLinkLongClick = { showMenu.value = true } - ) + VersionText() } } Row(Modifier.padding(start = 12.dp, top = 3.dp, bottom = 16.dp)) { @@ -66,15 +80,17 @@ fun ChatItemInfoView(ci: ChatItem, ciInfo: ChatItemInfo, devTools: Boolean) { ) } } - DefaultDropdownMenu(showMenu) { - ItemAction(stringResource(R.string.share_verb), painterResource(R.drawable.ic_share), onClick = { - shareText(context, text) - showMenu.value = false - }) - ItemAction(stringResource(R.string.copy_verb), painterResource(R.drawable.ic_content_copy), onClick = { - copyText(context, text) - showMenu.value = false - }) + if (text != "") { + DefaultDropdownMenu(showMenu) { + ItemAction(stringResource(R.string.share_verb), painterResource(R.drawable.ic_share), onClick = { + shareText(context, text) + showMenu.value = false + }) + ItemAction(stringResource(R.string.copy_verb), painterResource(R.drawable.ic_content_copy), onClick = { + copyText(context, text) + showMenu.value = false + }) + } } } } @@ -162,7 +178,8 @@ fun itemInfoShareText(ci: ChatItem, chatItemInfo: ChatItemInfo, devTools: Boolea localTimestamp(itemVersion.itemVersionTs) } ) - shareText.add(itemVersion.msgContent.text) + val t = itemVersion.msgContent.text + shareText.add(if (t != "") t else generalGetString(R.string.item_info_no_text)) } } return shareText.joinToString(separator = "\n") diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index 325f74656e..6c6be6e764 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -1131,6 +1131,7 @@ Disappears at: %s (current) "%s (current)" + no text Remove member diff --git a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift index ce7f3e21f1..d6d33c4a1a 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift @@ -16,19 +16,15 @@ struct ChatItemInfoView: View { @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false var body: some View { - if let chatItemInfo = chatItemInfo { - NavigationView { - itemInfoView(chatItemInfo) - .toolbar { - ToolbarItem(placement: .navigationBarTrailing) { - Button { showShareSheet(items: [itemInfoShareText(chatItemInfo)]) } label: { - Image(systemName: "square.and.arrow.up") - } + NavigationView { + itemInfoView() + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button { showShareSheet(items: [itemInfoShareText()]) } label: { + Image(systemName: "square.and.arrow.up") } } - } - } else { - Text("No message details") + } } } @@ -38,7 +34,7 @@ struct ChatItemInfoView: View { : NSLocalizedString("Received message", comment: "message info title") } - @ViewBuilder private func itemInfoView(_ chatItemInfo: ChatItemInfo) -> some View { + @ViewBuilder private func itemInfoView() -> some View { let meta = ci.meta GeometryReader { g in ScrollView { @@ -72,7 +68,8 @@ struct ChatItemInfoView: View { infoRow("Record updated at", localTimestamp(meta.updatedAt)) } - if !chatItemInfo.itemVersions.isEmpty { + if let chatItemInfo = chatItemInfo, + !chatItemInfo.itemVersions.isEmpty { Divider().padding(.vertical) Text("History") @@ -93,22 +90,24 @@ struct ChatItemInfoView: View { @ViewBuilder private func itemVersionView(_ itemVersion: ChatItemVersion, _ maxWidth: CGFloat, current: Bool) -> some View { VStack(alignment: .leading, spacing: 4) { - messageText(itemVersion.msgContent.text, itemVersion.formattedText, nil) + versionText(itemVersion) .allowsHitTesting(false) .padding(.horizontal, 12) .padding(.vertical, 6) .background(chatItemFrameColor(ci, colorScheme)) .cornerRadius(18) .contextMenu { - Button { - showShareSheet(items: [itemVersion.msgContent.text]) - } label: { - Label("Share", systemImage: "square.and.arrow.up") - } - Button { - UIPasteboard.general.string = itemVersion.msgContent.text - } label: { - Label("Copy", systemImage: "doc.on.doc") + if itemVersion.msgContent.text != "" { + Button { + showShareSheet(items: [itemVersion.msgContent.text]) + } label: { + Label("Share", systemImage: "square.and.arrow.up") + } + Button { + UIPasteboard.general.string = itemVersion.msgContent.text + } label: { + Label("Copy", systemImage: "doc.on.doc") + } } } let ts = localTimestamp(itemVersion.itemVersionTs) @@ -120,7 +119,17 @@ struct ChatItemInfoView: View { .frame(maxWidth: maxWidth, alignment: .leading) } - private func itemInfoShareText(_ chatItemInfo: ChatItemInfo) -> String { + @ViewBuilder private func versionText(_ itemVersion: ChatItemVersion) -> some View { + if itemVersion.msgContent.text != "" { + messageText(itemVersion.msgContent.text, itemVersion.formattedText, nil) + } else { + Text("no text") + .italic() + .foregroundColor(.secondary) + } + } + + private func itemInfoShareText() -> String { let meta = ci.meta var shareText: [String] = [title, ""] shareText += [String.localizedStringWithFormat(NSLocalizedString("Sent at: %@", comment: "copied message info"), localTimestamp(meta.itemTs))] @@ -147,9 +156,11 @@ struct ChatItemInfoView: View { String.localizedStringWithFormat(NSLocalizedString("Record updated at: %@", comment: "copied message info"), localTimestamp(meta.updatedAt)) ] } - if !chatItemInfo.itemVersions.isEmpty { + if let chatItemInfo = chatItemInfo, + !chatItemInfo.itemVersions.isEmpty { shareText += ["", NSLocalizedString("History", comment: "copied message info")] for (index, itemVersion) in chatItemInfo.itemVersions.enumerated() { + let t = itemVersion.msgContent.text shareText += [ "", String.localizedStringWithFormat( @@ -158,7 +169,7 @@ struct ChatItemInfoView: View { : NSLocalizedString("%@:", comment: "copied message info"), localTimestamp(itemVersion.itemVersionTs) ), - itemVersion.msgContent.text + t != "" ? t : NSLocalizedString("no text", comment: "copied message info in history") ] } } From d39614713d8473173b878c2827a1aeb806b182a5 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Mon, 22 May 2023 11:38:04 +0200 Subject: [PATCH 03/15] mobile: translations (#2474) * Translated using Weblate (French) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Japanese) Currently translated at 99.8% (1141 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/ * Translated using Weblate (Japanese) Currently translated at 99.8% (1243 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Polish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Polish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/ * Translated using Weblate (German) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (German) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 93.7% (1167 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 90.5% (1035 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1245 of 1245 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% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Czech) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * Translated using Weblate (Czech) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/ * Translated using Weblate (Hebrew) Currently translated at 66.4% (827 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/he/ * Translated using Weblate (Russian) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (French) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Russian) Currently translated at 100.0% (1245 of 1245 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% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (French) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Italian) Currently translated at 100.0% (1245 of 1245 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% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * corrections Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> * Translated using Weblate (French) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Japanese) Currently translated at 99.8% (1141 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/ * Translated using Weblate (Japanese) Currently translated at 99.8% (1243 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Polish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Polish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/ * Translated using Weblate (German) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (German) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 93.7% (1167 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 90.5% (1035 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1245 of 1245 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% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Czech) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * Translated using Weblate (Czech) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/ * Translated using Weblate (Hebrew) Currently translated at 66.4% (827 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/he/ * Translated using Weblate (Russian) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (French) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Russian) Currently translated at 100.0% (1245 of 1245 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% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (French) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Italian) Currently translated at 100.0% (1245 of 1245 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% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Czech) Currently translated at 100.0% (1245 of 1245 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * correct nl * correct nl * correct nl * Update apps/android/app/src/main/res/values-pt-rBR/strings.xml * Translated using Weblate (Czech) Currently translated at 100.0% (1143 of 1143 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/ * import/export localizations --------- Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com> Co-authored-by: No name Co-authored-by: a4318 Co-authored-by: B.O.S.S Co-authored-by: mlanp Co-authored-by: sith-on-mars Co-authored-by: John m Co-authored-by: tomato potato <4ryo49@protonmail.com> Co-authored-by: zenobit Co-authored-by: mf Co-authored-by: Roee Hershberg Co-authored-by: random r Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- .../app/src/main/res/values-cs/strings.xml | 142 +++++++- .../app/src/main/res/values-de/strings.xml | 66 +++- .../app/src/main/res/values-es/strings.xml | 149 ++++---- .../app/src/main/res/values-fr/strings.xml | 41 ++- .../app/src/main/res/values-it/strings.xml | 39 +- .../app/src/main/res/values-iw/strings.xml | 29 +- .../app/src/main/res/values-ja/strings.xml | 25 +- .../app/src/main/res/values-nl/strings.xml | 27 +- .../app/src/main/res/values-pl/strings.xml | 13 + .../src/main/res/values-pt-rBR/strings.xml | 102 +++++- .../app/src/main/res/values-ru/strings.xml | 144 +++++++- .../src/main/res/values-zh-rCN/strings.xml | 40 ++- .../cs.xcloc/Localized Contents/cs.xliff | 125 ++++++- .../de.xcloc/Localized Contents/de.xliff | 62 +++- .../en.xcloc/Localized Contents/en.xliff | 10 +- .../es.xcloc/Localized Contents/es.xliff | 123 ++++--- .../fr.xcloc/Localized Contents/fr.xliff | 39 +- .../it.xcloc/Localized Contents/it.xliff | 36 +- .../ja.xcloc/Localized Contents/ja.xliff | 31 +- .../nl.xcloc/Localized Contents/nl.xliff | 19 +- .../pl.xcloc/Localized Contents/pl.xliff | 17 +- .../ru.xcloc/Localized Contents/ru.xliff | 125 ++++++- .../Localized Contents/zh-Hans.xliff | 12 +- apps/ios/cs.lproj/Localizable.strings | 340 ++++++++++++++++++ apps/ios/de.lproj/Localizable.strings | 156 ++++++++ apps/ios/es.lproj/Localizable.strings | 127 ++++--- apps/ios/fr.lproj/Localizable.strings | 87 +++++ apps/ios/it.lproj/Localizable.strings | 78 ++++ apps/ios/ja.lproj/Localizable.strings | 31 +- apps/ios/nl.lproj/Localizable.strings | 23 +- apps/ios/pl.lproj/Localizable.strings | 21 +- apps/ios/ru.lproj/Localizable.strings | 340 ++++++++++++++++++ apps/ios/zh-Hans.lproj/Localizable.strings | 4 +- 33 files changed, 2302 insertions(+), 321 deletions(-) diff --git a/apps/android/app/src/main/res/values-cs/strings.xml b/apps/android/app/src/main/res/values-cs/strings.xml index 0cbb52e72c..f7e5bedb72 100644 --- a/apps/android/app/src/main/res/values-cs/strings.xml +++ b/apps/android/app/src/main/res/values-cs/strings.xml @@ -19,7 +19,7 @@ O SimpleX a + b Přijmout - 1 dni + 1 den správce Přidat profil Všechny chaty a zprávy budou smazány – tuto akci nelze vrátit zpět! @@ -383,7 +383,7 @@ Jasné ověření Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních. Vaše nastavení - Vaše adresa SimpleX + Vaše SimpleX adresa Heslo databáze a export Chat profily Zaslat otázky a nápady @@ -690,9 +690,9 @@ Lze změnit později v nastavení. Když aplikace běží Okamžité - Nejlepší pro baterii. Budete přijímat oznámení pouze když aplikace běží, služba na pozadí NEBUDE použita. - Dobré pro baterii. Služba na pozadí bude kontrolovat nové zprávy každých 10 minut. Můžete zmeškat hovory a naléhavé zprávy. - Využívá více baterie! Služba na pozadí je vždy spuštěna - oznámení se zobrazí, jakmile jsou zprávy k dispozici. + Nejlepší pro baterii. Budete přijímat oznámení pouze když aplikace běží (žádná služba na pozadí). + Dobré pro baterii. Služba na pozadí bude kontrolovat každých 10 minut. Můžete zmeškat hovory nebo naléhavé zprávy. + Využívá více baterie! Služba na pozadí je spuštěna vždy - oznámení se zobrazí, jakmile jsou zprávy k dispozici. Vložení přijatého odkazu Příchozí videohovor Příchozí zvukový hovor @@ -954,7 +954,7 @@ \nvašemu kontaktu Vaše konverzace Do níže uvedeného pole vložte odkaz, který jste obdrželi pro spojení s kontaktem. - Sdílet pozvánku + Sdílet jednorázovou pozvánku koncově šifrované moderované moderovaný %s @@ -1131,4 +1131,134 @@ Zastavit příjem souboru\? O adrese SimpleX Jednorázový odkaz + Reakce na zprávy + Poslat + Samodestrukční heslo + Heslo pro sebedestrukci změněno! + Další zbarvení + Sekundární + Vytvořit prázdný chat profil se zadaným názvem a otevřít aplikaci jako obvykle. + Pokud tento přístupový kód zadáte při otevření aplikace, všechna data budou nenávratně smazána! + Další sekundární + Pozadí + Menu a upozornění + vlastní + Vybrat + Chyba načítání podrobností + Info + Otevřít chat profily + Historie + Přijatá zpráva + Poslaná zpráva + Mizící zpráva + Poslat mizící zprávu + 1 minutu + 30 vteřin + Vlastní čas + Všechny vaše kontakty zůstanou připojeny. Aktualizace profilu bude odeslána vašim kontaktům. + Pozvat přátele + Povolit sebedestrukční heslo + Sebedestrukce + Povolit sebedestrukci + Pokud při otevření aplikace zadáte sebedestrukční heslo: + Sebedestrukční heslo povoleno! + Nastavit heslo + Záznam aktualizován v + Posláno v + Sdílet adresu + Upraveno v + Přijato v + Přijato v: %s + Záznam aktualizován v: %s + Posláno v: %s + Zmizí v: %s + Upraveno v: %s + %s (aktuální) + Tmavý motiv + Import motivu + SimpleX + Export motivu + Poslaná zpráva + Titul + Přijatá zpráva + Povolit kontaktům přidávat reakce na zprávy. + Vy i váš kontakt můžete přidávat reakce na zprávy. + Reakce na zprávy jsou v tomto chatu zakázány. + Zakázat reakce na zprávy. + Zakázat reakce na zprávy. + Členové skupin mohou přidávat reakce na zprávy. + Reakce na zprávy jsou v této skupině zakázány. + měsíců + Zjistit více + Sdílet s kontakty + Náhled + Otvírání databáze… + Chyba nastavení adresy + Pro připojení může váš kontakt naskenovat QR kód, nebo použít odkaz v aplikaci. + Když někdo požádá o připojení, můžete žádost přijmout nebo odmítnout. + Přečtěte si více v Uživatelské příručce. + Adresa SimpleX + BARVY MOTIVU + Přizpůsobit motiv + Aktualizace profilu bude zaslána vašim kontaktům. + Sdílet adresu s kontakty\? + Přestat sdílet adresu\? + Vytvořit adresu, aby se s vámi lidé mohli spojit. + Uložit nastavení automatického přijímání + Přestat sdílet + Automaticky přijmout + Můžete vytvořit později + Nevytvářet adresu + Ahoj! +\nSpojte se se mnou přes SimpleX Chat: %s + Promluvme si v SimpleX Chatu + Přečíst více + Všechna data se při zadání vymažou. + Lepší zprávy + Přizpůsobit a sdílet barevné motivy. + Vlastní motiv + Konečně je máme! 🚀 + Reakce na zprávy + Samodestrukční heslo + Japonské a portugalské uživatelské rozhraní + minut + vteřin + Díky uživatelům - překládejte prostřednictvím Weblate! + - 5 minutové hlasové zprávy. +\n- vlastní čas mizení. +\n- historie úprav. + dní + hodin + týdnů + 5 minut + Přidejte adresu do svého profilu, aby ji vaše kontakty mohly sdílet s dalšími lidmi. Aktualizace profilu bude zaslána vašim kontaktům. + Všechna data aplikace jsou smazána. + Adresa + Povolit reakce na zprávy. + Povolit reakce na zprávy, pokud je váš kontakt povolí. + Vytvořit SimpleX adresu + Pokračovat + Zadat uvítací zprávu... (volitelně) + Pokud se nemůžete setkat osobně, zobrazte QR kód ve videohovoru nebo sdílejte odkaz. + Změnit režim sebedestrukce + Změnit sebedestrukční heslo + (aktuální) + ID databáze: %d + Smazáno v + Smazáno v: %s + Zmizí v + Zadat uvítací zprávu… + Chyba importu motivu + Ujistěte se, že soubor má správnou syntaxi YAML. Exportujte motiv, abyste měli příklad struktury souboru. + Nově zobrazované jméno: + Reakce na zprávy můžete přidávat pouze vy. + Uložit nastavení\? + Reakce na zprávy může přidávat pouze váš kontakt. + Vaše kontakty zůstanou připojeny. + Tuto adresu můžete sdílet se svými kontakty, aby se mohli připojit k %s. + Vaše kontakty v SimpleX ji uvidí. +\nMůžete ji změnit v Nastavení. + Svou adresu můžete sdílet jako odkaz nebo QR kód - kdokoli se k vám může připojit. + Pokud později adresu odstraníte, o kontakty nepřijdete. + Přístupový kód aplikace je nahrazen sebedestrukčním přístupovým heslem. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-de/strings.xml b/apps/android/app/src/main/res/values-de/strings.xml index 32151b5942..9d1de5fa05 100644 --- a/apps/android/app/src/main/res/values-de/strings.xml +++ b/apps/android/app/src/main/res/values-de/strings.xml @@ -905,8 +905,8 @@ LIVE Schauen Sie sich den Sicherheitscode an Sofort - Gute Option für die Batterieausdauer. Der Hintergrundservice überprüft alle 10 Minuten nach neuen Nachrichten. Sie können eventuell Anrufe und dringende Nachrichten verpassen. - Beste Option für die Batterieausdauer. Sie empfangen Benachrichtigungen nur solange die App abläuft. Der Hintergrundservice wird nicht genutzt! + Gute Option für die Batterieausdauer. Der Hintergrundservice überprüft alle 10 Minuten nach Nachrichten. Sie können eventuell Anrufe oder dringende Nachrichten verpassen. + Beste Option für die Batterieausdauer. Sie empfangen Benachrichtigungen nur solange die App abläuft (kein aktiver Hintergrundservice). Senden %s wurde erfolgreich überprüft Überprüfung zurücknehmen @@ -942,7 +942,7 @@ Fehler beim Laden des Chats Fehler beim Laden der Chats Bitte aktualisieren Sie die App und nehmen Sie Kontakt mit den Entwicklern auf. - Benötigt mehr Leistung Ihrer Batterie! Der Hintergrundservice läuft die ganze Zeit ab. Benachrichtigungen werden Ihnen sofort angezeigt, nachdem Sie neue Nachrichten erhalten haben. + Benötigt mehr Leistung Ihrer Batterie! Der Hintergrundservice läuft permanent ab. Benachrichtigungen werden Ihnen angezeigt, sobald Sie neue Nachrichten erhalten haben. Gruppenlink erstellen Erlauben Sie Ihren Kontakten das Senden von verschwindenden Nachrichten. Das Senden von verschwindenden Nachrichten verbieten. @@ -1281,4 +1281,64 @@ Wenn Sie dieses Passwort während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht! Selbstzerstörungspasswort Passwort eingeben + In dieser Gruppe sind Reaktionen auf Nachrichten nicht erlaubt. + Fehler beim Laden von Details + Empfangene Nachricht + Information + Gesendete Nachricht + Zeit anpassen + Verschwindende Nachricht + Senden + 1 Minute + Verschwindende Nachricht senden + Moderiert um + Gelöscht um + Empfangen um + Datensatz aktualisiert um + Gesendet um + Moderiert um: %s + Datenbank-ID: %d + Empfangen um: %s + Datensatz aktualisiert um: %s + %s (aktuell) + Gesendet um: %s + Reaktionen auf Nachrichten + Erlauben Sie Ihren Kontakten Reaktionen auf Nachrichten zu geben. + Sowohl Sie, als auch Ihr Kontakt können Reaktionen auf Nachrichten geben. + Nur Sie können Reaktionen auf Nachrichten geben. + Reaktionen auf Nachrichten nicht erlauben. + Reaktionen auf Nachrichten sind nur möglich, falls Ihr Kontakt dies erlaubt. + Nur Ihr Kontakt kann Reaktionen auf Nachrichten geben. + Reaktionen auf Nachrichten erlauben. + Reaktionen auf Nachrichten nicht erlauben. + Gruppenmitglieder können eine Reaktion auf Nachrichten geben. + Mehr erfahren + Endlich haben wir sie! 🚀 + Reaktionen auf Nachrichten + Selbstzerstörungspasswort + Sobald es eingegeben wird, werden alle Daten gelöscht. + Benutzerdefinierte Designs + Japanische und Portugiesische Bedienoberfläche + Minuten + Sekunden + Dank der Nutzer - Tragen Sie per Weblate bei! + Verbesserungen bei Nachrichten + Farbdesigns anpassen und weitergeben. + Tage + Stunden + - Bis zu 5 Minuten lange Sprachnachrichten +\n- Zeit für verschwindende Nachrichten anpassen +\n- Vergangenheit bearbeiten + benutzerdefiniert + Monate + Auswählen + Wochen + 5 Minuten + (aktuell) + 30 Sekunden + Gelöscht um: %s + Verschwindet um + Verschwindet um: %s + Vergangenheit + In diesem Chat sind Reaktionen auf Nachrichten nicht erlaubt. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml index d369b38e4a..202d8f2589 100644 --- a/apps/android/app/src/main/res/values-es/strings.xml +++ b/apps/android/app/src/main/res/values-es/strings.xml @@ -3,8 +3,8 @@ Autenticación no disponible Aceptar Configuración avanzada de red - Mejor para la batería. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, el servicio NO se usará en segundo plano. - Bueno para la batería. El servicio en segundo plano comprueba si hay mensajes nuevos cada 10 minutos. Puedes perderte llamadas y mensajes urgentes. + Mejor para la batería. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, SIN servicio en segundo plano. + Bueno para la batería. El servicio en segundo plano comprueba si hay mensajes cada 10 minutos. Puedes perder llamadas o mensajes urgentes. Aceptar Copia de seguridad de los datos de la aplicación un dia @@ -78,7 +78,7 @@ Solicita recibir la imagen Atención: NO podrás recuperar o cambiar la contraseña si la pierdes. Tanto tú como tu contacto podéis enviar mensajes de voz. - ¡Gasta más batería! El servicio en segundo plano está siempre en funcionamiento - las notificaciones se mostrarán tan pronto como los mensajes estén disponibles. + ¡Consume más batería! El servicio en segundo plano se ejecuta siempre y las notificaciones se mostrarán en cuanto haya mensajes disponibles. Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados. Tanto tú como tu contacto podéis enviar mensajes temporales. Escanear código QR: para conectar con tu contacto mediante su código QR. @@ -86,7 +86,7 @@ Crear enlace de invitación de un solo uso. Crear grupo secreto La contraseña de cifrado de la base de datos será actualizada. - ID de la base de datos + ID de base de datos Los mensajes directos entre miembros del grupo no están permitidos. La contraseña es distinta a la almacenada en Keystore La base de datos será cifrada y la contraseña se guardará en Keystore. @@ -261,7 +261,7 @@ ¿Cambiar rol de grupo\? Compara los códigos de seguridad con tus contactos Archivo - Limpiar + Vaciar Vaciar chat Configurar servidores ICE Llamada terminada %1$s @@ -326,7 +326,7 @@ La invitación al grupo ya no es válida, ha sido eliminada por el remitente. El grupo se eliminará para tí. ¡No se puede deshacer! Cómo usar la sintaxis markdown - Incógnito mediante enlace de un uso + en modo incógnito mediante enlace de un solo uso Dirección de contacto SimpleX Error guardando servidores SMP Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces SimpleX que no son de confianza aparecerán en rojo. @@ -342,7 +342,7 @@ Archivo: %s ¡Error cambiando perfil! Introduce el servidor manualmente - Cómo usar tus servidores + Cómo usar los servidores Error deteniendo Chat Introduce la contraseña correcta. Introduce la contraseña… @@ -368,8 +368,8 @@ Error eliminando la base de datos Base de datos cifrada Error eliminando miembro - Los miembros del grupo pueden mandar mensajes de voz. - Incógnito mediante enlace de dirección del contacto + Los miembros del grupo pueden enviar mensajes de voz. + en modo incógnito mediante enlace de dirección del contacto Error creando perfil! No se pudo cargar el chat No se pudieron cargar los chats @@ -393,7 +393,7 @@ Error guardando servidores ICE Servidores ICE (uno por línea) Nombre completo: - Las personas pueden conectarse contigo solo mediante los enlaces que compartes. + Las personas pueden conectarse contigo sólo mediante los enlaces que compartes. Cómo funciona SimpleX Colgar Archivos y multimedia @@ -428,7 +428,7 @@ Activar TCP keep-alive activado para tí error - Incógnito mediante enlace de grupo + en modo incógnito mediante enlace de grupo Error al añadir miembro(s) Error enviando mensaje Error cifrando la base de datos @@ -447,7 +447,7 @@ Para poder usarse deshabilita la optimización de batería para SimpleX en el siguiente cuadro de diálogo. De lo contrario las notificaciones estarán desactivadas. Instalar terminal para SimpleX Chat invitación al grupo %1$s - invitado %1$s + ha invitado a %1$s Permite tener varias conexiones anónimas sin datos compartidos entre estas dentro del mismo perfil. Invitar al grupo Para comprobar el cifrado de extremo a extremo con tu contacto compara (o escanea) el código en tus dispositivos. @@ -518,7 +518,7 @@ Silenciar Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas. Se requieren hosts .onion para la conexión - Se usarán hosts .onion cuando estén disponibles. + Se usarán hosts .onion si están disponibles. Inmune a spam y abuso Muchos se preguntarán: si SimpleX no tiene identificadores de usuario, ¿cómo puede entregar los mensajes\? Videollamada entrante @@ -537,7 +537,7 @@ (sólo almacenado por miembros del grupo) Ayuda sintaxis markdown Servidores y Redes - Se usarán hosts .onion cuando estén disponibles. + Se usarán hosts .onion si están disponibles. cursiva Llamada entrante videollamada (sin cifrar) @@ -588,7 +588,7 @@ Marcar como verificado ¡Dirección de servidor no válida! Establecer una conexión privada - Comprueba su conexión de red con %1$s e inténtelo de nuevo. + Comprueba tu conexión de red con %1$s e inténtalo de nuevo. El remitente puede haber eliminado la solicitud de conexión. Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta Responder @@ -631,7 +631,7 @@ Enviar previsualizacion de enlaces Envía un mensaje en vivo: se actualizará para el(los) destinatario(s) a medida que se escribe error de envío - Envías vía + Enviando vía Por favor, actualiza la aplicación y ponte en contacto con los desarrolladores. El remitente ha cancelado la transferencia de archivos. Cola segura @@ -654,7 +654,7 @@ Reducción del uso de la batería Póngase en contacto con el administrador del grupo. Solicita que tu contacto habilite el envío de mensajes de voz. - Enviar mensaje en vivo + Mensaje en vivo Escanear código QR Enviar (escanear o pegar desde el portapapeles) @@ -678,7 +678,7 @@ Guardar archivo Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer. te ha expulsado - Recibes vía + Recibiendo vía Tiempo de espera del protocolo seg Perfil y conexiones de servidor @@ -782,7 +782,7 @@ Llamadas de chat SimpleX Se ejecuta periódicamente Se muestran el nombre del contacto y el mensaje - Se muestra solo el nombre del contacto + Se muestra sólo el nombre del contacto Bloqueo SimpleX activado Detener chat El mensaje se eliminará para todos los miembros. @@ -818,7 +818,7 @@ ¿Detener Chat\? %s segundo(s) Pulsa para unirse - ha actualizado el perfil de grupo + ha actualizado el perfil del grupo Tiempo de espera de la conexión TCP agotado Tema Establece preferencias de grupo @@ -851,14 +851,14 @@ Usar servidor Usar para conexiones nuevas Sistema - mediante enlace de un uso - Tus chats + mediante enlace de un solo uso + Mis chats Mensaje de voz… Desactivar vídeo Activar vídeo Contraseña de base de datos incorrecta ¡Contraseña incorrecta! - Te has unido a este grupo. Conectando con miembro del grupo invitado. + Te has unido a este grupo. Conectando con el miembro que emite la invitacíon. Estás usando un perfil incógnito para este grupo, por tanto para evitar compartir tu perfil principal no se permite invitar a contactos Has sido invitado al grupo Mensajes de voz @@ -871,7 +871,7 @@ ¡Bienvenido! Tu perfil Chat será enviado \na tu contacto - Tus servidores ICE + Mis servidores ICE Has rechazado la invitación del grupo. has cambiado el rol de %s a %s mediante relay @@ -910,7 +910,7 @@ Tú: %1$s Puedes compartir un enlace o un código QR: cualquiera podrá unirse al grupo. Si lo eliminas más tarde los miembros del grupo no se perderán. Cuando compartes un perfil incógnito con alguien, este perfil también se usará para los grupos a los que te inviten. - Tus preferencias + Mis preferencias Con mensaje de bienvenida opcional. Tu rol es observador Comprobar código de seguridad @@ -918,15 +918,15 @@ Has invitado a tu contacto Te conectarás al grupo cuando el dispositivo anfitrión esté en línea, por favor espera o compruébalo más tarde. Configuración - Tus servidores SMP + Mis servidores SMP ¡Tú controlas tu chat! Tu perfil, contactos y mensajes entregados se almacenan en tu dispositivo. esperando respuesta… esperando confirmación… Cuando la aplicación se está ejecutando Videollamada - Tus llamadas - Tus servidores ICE + Mis llamadas + Mis servidores ICE Privacidad MIS DATOS Base de datos Chat @@ -947,8 +947,8 @@ Estás conectado al servidor utilizado para recibir mensajes de este contacto. mediante enlace de dirección de contacto mediante enlace de grupo - has compartido enlace de un uso - has compartido enlace de un uso en módo incógnito + has compartido enlace de un solo uso + has compartido enlace de un solo uso en módo incógnito No tienes chats El contacto ha enviado un archivo mayor al máximo admitido (%1$s ). %1$d mensaje(s) omitido(s) @@ -1042,7 +1042,7 @@ ¡Demasiados vídeos! Vídeo enviado El vídeo se recibirá cuando tu contacto termine de subirlo. - Solo se pueden enviar 10 vídeos de forma simultánea + Sólo se pueden enviar 10 vídeos de forma simultánea Esperando el vídeo Error guardando servidores SMP Error cargando servidores XFTP @@ -1054,7 +1054,7 @@ Eliminar archivo Subir archivo Servidores XFTP - Tus servidores XFTP + Mis servidores XFTP Puerto puerto %d Establece Usar hosts .onion en No si el proxy SOCKS no los admite. @@ -1063,31 +1063,31 @@ Host Configuración proxy SOCKS Autenticar - Código de acceso actual + Código de acceso Autenticación cancelada Cambiar el modo de bloqueo %d segundos Error de autenticación - Cambiar el código de acceso + Cambiar código de acceso ¡Código de acceso no cambiado! Autenticación del sistema Sin código de acceso de la aplicación Campo de código de acceso Modo Bloqueo SimpleX - No has podido ser verificado. Inténtelo de nuevo. + No has podido ser autenticado. Inténtalo de nuevo. %d minutos - Introducir el código de acceso + Introduce código Inmediatamente - Por favor, recuerda y guarda la contraseña en un lugar seguro. ¡No hay ninguna manera de recuperar una contraseña perdida! + Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código perdido! ¡Bloqueo SimpleX no activado! Puedes activar el Bloqueo SimpleX a través de Configuración. - Confirmar el código de acceso + Confirma código Activar bloqueo Bloquear después de Modo de bloqueo Enviar Código de acceso incorrecto - Nuevo código de acceso + Código nuevo Código de acceso ¡Código de acceso cambiado! ¡Código de acceso guardado! @@ -1121,11 +1121,11 @@ " \nDisponible en v5.1" Tanto tú como tu contacto podéis realizar llamadas. - Solo tú puedes realizar llamadas. + Sólo tú puedes realizar llamadas. Sólo tu contacto puede realizar llamadas. No se permiten llamadas y videollamadas. - Código de acceso a la aplicación - Interfaz polaco + Código de acceso de la aplicación + Interfaz en polaco Úsalo en lugar de la autenticación del sistema. ¡Gracias a los colaboradores! Contribuye a través de Weblate. Vídeos y archivos de hasta 1Gb @@ -1140,9 +1140,9 @@ Abriendo base de datos… Error al introducir la dirección Más información en la Guía de usuario. - Enlace de un uso + Enlace un uso Dirección SimpleX - Cuando alguien solicita conectarse, puedes aceptar o rechazar. + Cuando alguien solicite conectarse podrás aceptar o rechazar su solicitud. Compartir dirección Introduce mensaje de bienvenida… SimpleX @@ -1173,7 +1173,7 @@ Guardar configuración de auto aceptar Puedes compartir tu dirección como enlace o como código QR: cualquiera podrá conectarse contigo. ¿Guardar configuración\? - Color secundario + Secundario Mensaje enviado Dejar de compartir ¿Dejar de compartir la dirección\? @@ -1186,46 +1186,46 @@ Tus contactos en SimpleX lo verán. \nPuedes cambiarlo en Configuración. Tus contactos permanecerán conectados. - No perderás tus contactos si más tarde borras tu dirección. - Todos los datos de la aplicación se han eliminado. - Se creará un perfil de chat vacío con el nombre proporcionado, y la aplicación se abrirá como de costumbre. + Si más tarde decides borrar tu dirección los contactos no se perderán. + Todos los datos de la aplicación se eliminarán. + Se creará un perfil vacío con el nombre proporcionado, y la aplicación se abrirá como de costumbre. Autodestrucción Activar código de autodestrucción - El código de acceso se ha reemplazado por código de autodestrucción. + El código de acceso será reemplazado por código de autodestrucción. Cambiar el modo de autodestrucción - Cambiar código de autodestrucción + Cambiar código autodestrucción ¡Si introduces este código al abrir la aplicación, todos los datos de la misma se eliminarán de forma irreversible! - Si introduces el código de autodestrucción al abrir la aplicación: + Si al abrir la aplicación introduces el código de autodestrucción: Nuevo nombre mostrado: Código de autodestrucción ¡Código de autodestrucción cambiado! ¡Código de autodestrucción activado! Activar autodestrucción - Introduce el código de acceso + Código autodestrucción Tanto tú como tu contacto podéis añadir reacciones a los mensajes. Seleccionar personalizado - Historia - Información - Mensaje recibido - Mensaje enviado + Historial + Detalles + Mensaje entrante + Mensaje saliente Mensaje temporal Enviar mensaje temporal Tiempo personalizado Enviar - Moderado a las - Recibido a las - Enviado a las + Moderado el + Recibido el + Enviado el (actual) ID de base de datos: %d - Borrado a las: %s - Desaparece en: %s - Moderado a las: %s - Recibido a las: %s - Registro actualizado a las: %s + Borrado el: %s + Desaparecerá el: %s + Moderado el: %s + Recibido el: %s + Registro actualizado: %s %s (actual) - Enviado a las: %s - Desaparece a las + Enviado el: %s + Desaparecerá el Reacciones a los mensajes No se permiten reacciones a los mensajes. Permitir reacciones a los mensajes. @@ -1243,10 +1243,23 @@ Las reacciones a los mensajes no están permitidas en este grupo. Sólo tu contacto puede añadir reacciones a los mensajes. 1 minuto - Registro actualizado a las + Registro actualizado 30 segundos 5 minutos Permitir que tus contactos añadan reacciones a los mensajes. - Eliminado a las + Eliminado el Se permiten las reacciones a los mensajes pero sólo si tu contacto también las permite. + Temas personalizados + Código de autodestrucción + - mensajes de voz de hasta 5 minutos. +\n- tiempo personalizado para mensajes temporales. +\n- historial de edición. + ¡Gracias a los colaboradores! Contribuye a través de Weblate. + Mensajes mejorados + Al introducirlo todos los datos son borrados. + Personalizar y compartir temas de color. + ¡Por fin los tenemos! 🚀 + Reacciones a los mensajes + Saber más + Interfaz en japonés y portugués \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-fr/strings.xml b/apps/android/app/src/main/res/values-fr/strings.xml index 2c3d9593ab..0efdb91834 100644 --- a/apps/android/app/src/main/res/values-fr/strings.xml +++ b/apps/android/app/src/main/res/values-fr/strings.xml @@ -388,7 +388,7 @@ Quand l\'application fonctionne Périodique Instantanée - Économie de batterie. Vous recevrez des notifications uniquement lorsque l\'application est en cours d\'exécution, le service de fond ne sera PAS utilisé. + Économie de batterie. Vous recevrez des notifications uniquement lorsque l\'application est en cours d\'exécution (PAS de service d\'arrière-plan) À propos de SimpleX Chat Comment l\'utiliser Aide Markdown @@ -462,8 +462,8 @@ Beaucoup se demandent : si SimpleX n\'a pas d\'identifiant d\'utilisateur, comment peut-il transmettre des messages \? Seuls les appareils clients stockent les profils des utilisateurs, les contacts, les groupes et les messages envoyés avec un chiffrement de bout en bout à deux couches. Pour en savoir plus, consultez notre GitHub repository. - Batterie peu utilisée. Le service de fond vérifie les nouveaux messages toutes les 10 minutes. Vous risquez de manquer des appels et des messages urgents. - Batterie plus utilisée ! Le service de fond est toujours en cours d\'exécution - les notifications s\'afficheront dès que les messages seront disponibles. + Batterie peu utilisée. Le service de fond vérifie les messages toutes les 10 minutes. Vous risquez de manquer des appels ou des messages urgents. + Batterie plus utilisée ! Le service de fond est toujours en cours d\'exécution - les notifications s\'affichent dès que les messages sont disponibles. %1$d message⸱s manqué⸱s ID de message incorrecte PARAMÈTRES @@ -1226,4 +1226,39 @@ jours mois Seul votre contact peut ajouter des réactions aux messages. + Erreur de chargement des détails + Historique + Info + Message reçu + personnalisé + Choisir + En savoir plus + - messages vocaux pouvant durer jusqu\'à 5 minutes. +\n- délai personnalisé de disparition. +\n- l\'historique de modification. + Reçu le : %s + Meilleurs messages + Thèmes personnalisés + Toutes les données sont effacées lorsqu\'il est saisi. + Personnalisez et partagez des thèmes de couleurs. + (actuel) + Supprimé à + Reçu le + Envoyé le + ID de base de données : %d + Supprimé à : %s + Disparaît à : %s + Disparaît à + Interface en japonais et en portugais + Merci aux utilisateurs - contribuez via Weblate ! + Enfin, les voilà ! 🚀 + Modéré à + Enregistrement mis à jour le : %s + Réactions aux messages + Modéré à : %s + Enregistrement mis à jour le + %s (actuel) + Code d\'autodestruction + Envoyé le : %s + Message envoyé \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml index 9eaab24759..4b172ce681 100644 --- a/apps/android/app/src/main/res/values-it/strings.xml +++ b/apps/android/app/src/main/res/values-it/strings.xml @@ -272,8 +272,8 @@ ICONA APP Verrà inviato un profilo casuale al contatto da cui hai ricevuto questo link Verrà inviato un profilo casuale al tuo contatto - Ideale per la batteria. Riceverai notifiche solo quando l\'app è in esecuzione, il servizio in secondo piano NON verrà usato. - Consuma più batteria! Il servizio in secondo piano è sempre attivo: le notifiche verranno mostrate non appena i messaggi saranno disponibili. + Ideale per la batteria. Riceverai notifiche solo quando l\'app è in esecuzione (NO servizio in secondo piano). + Consuma più batteria! Servizio in secondo piano sempre attivo: le notifiche sono mostrate non appena i messaggi sono disponibili. chiamata… annulla anteprima link Impossibile accedere al Keystore per salvare la password del database @@ -357,7 +357,7 @@ Come usare il markdown chiamata audio chiamata audio (non crittografata e2e) - Buono per la batteria. Il servizio in secondo piano controlla nuovi messaggi ogni 10 minuti. Potresti perdere chiamate e messaggi urgenti. + Buono per la batteria. Il servizio in secondo piano cerca messaggi ogni 10 minuti. Potresti perdere chiamate o messaggi urgenti. Chiamata già terminata! Crea il tuo profilo Decentralizzato @@ -1228,4 +1228,37 @@ 5 minuti personalizzato Messaggio a tempo + Errore caricamento dettagli + Informazioni + Cronologia + Messaggio ricevuto + Messaggio inviato + ID database: %d + Moderato il + Moderato il: %s + Ricevuto il + Ricevuto il: %s + Registro aggiornato il + Registro aggiornato il: %s + Inviato il + Inviato il: %s + %s (attuale) + Leggi tutto + Tutti i dati vengono cancellati quando inserito. + Personalizza e condividi temi di colore. + Temi personalizzati + Finalmente le abbiamo! 🚀 + Reazioni ai messaggi + Codice di autodistruzione + Grazie agli utenti – contribuite via Weblate! + - messaggi vocali fino a 5 minuti. +\n- tempo di scomparsa personalizzato. +\n- cronologia delle modifiche. + Messaggi migliorati + Interfaccia giapponese e portoghese + (attuale) + Eliminato il + Eliminato il: %s + Scompare il + Scompare il: %s \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-iw/strings.xml b/apps/android/app/src/main/res/values-iw/strings.xml index a77f4a668a..05b2f182d0 100644 --- a/apps/android/app/src/main/res/values-iw/strings.xml +++ b/apps/android/app/src/main/res/values-iw/strings.xml @@ -99,8 +99,8 @@ אימות בוטל אימות לא זמין הוסף איש קשר חדש: ליצירת קוד QR חד פעמי עבור איש הקשר שלך. - הטוב ביותר לסוללה. התראות יוצגו רק כאשר האפליקציה מופעלת, שירות הרקע לא יופעל. - טוב לסוללה. שירות הרקע ייבדוק הודעות חדשות כל 10 דקות. שיחות והודעות דחופות עלולות להתפספס. + הטוב ביותר לסוללה. התראות יוצגו רק כאשר האפליקציה מופעלת (ללא שירות רקע). + טוב לסוללה. שירות הרקע ייבדוק הודעות כל 10 דקות. שיחות או הודעות דחופות עלולות להתפספס. גם אתם וגם איש הקשר יכולים למחוק באופן בלתי הפיך הודעות שנשלחו. גם אתם וגם איש הקשר יכולים לשלוח הודעות נעלמות. לא ניתן לקבל את הקובץ @@ -440,7 +440,7 @@ שגיאה בהפעלת צ׳אט שגיאה: %s שגיאה בעדכון קישור קבוצה - ייצא ערכת נושא + ייצא ערכת צבעים הרחב בחירת תפקיד הקובץ ייתקבל כאשר איש הקשר יהיה מקוון, אנא חכו או בידקו מאוחר יותר! שם מלא: @@ -480,8 +480,8 @@ פרופיל הקבוצה עודכן פרופיל הקבוצה מאוחסן במכשירי חברי הקבוצה, לא על השרתים. כל נתוני האפליקציה יימחקו. - פרופיל צ׳אט ריק עם השם שסופק נוצר, והאפליקציה נפתחת כרגיל. - קוד הגישה לאפליקציה מוחלף עם קוד הגישה להשמדה עצמית. + פרופיל צ׳אט ריק עם השם שסופק ייווצר, והאפליקציה תיפתח כרגיל. + קוד הגישה לאפליקציה יוחלף עם קוד הגישה להשמדה עצמית. ניתן להסתיר את מסך האפליקציה במסך האפליקציות האחרונות. פרופילי צ׳אט מוסתרים ניהול קבוצה @@ -529,8 +529,8 @@ התמונה תתקבל כאשר איש הקשר יסיים להעלות אותה. התמונה תתקבל כאשר איש הקשר יהיה מקוון, אנא המתינו או בידקו מאוחר יותר! ייבא - ייבא ערכת נושא - שגיאה בייבוא ערכת נושא + ייבא ערכת צבעים + שגיאה בייבוא ערכת צבעים מצב זהות נסתרת אינו נתמך כאן – הפרופיל הראשי שלך יישלח לחברי הקבוצה תצורת שרתים משופרת פרטיות ואבטחה משופרים @@ -615,7 +615,7 @@ שם מקומי נתוני פרופיל מקומיים בלבד בהיר - ודאו שלקובץ יש תחביר YAML תקין. ייצאו ערכת נושא כדי לקבל דוגמה למבנה תקין של קובץ ערכת נושא. + ודאו שלקובץ יש תחביר YAML תקין. ייצאו ערכת צבעים כדי לקבל דוגמה למבנה תקין של קובץ ערכת צבעים. ככל הנראה איש קשר זה מחק את החיבור איתך. ייעשה שימוש במארחי Onion כאשר יהיו זמינים. מארחי Onion יידרשו לחיבור. @@ -824,4 +824,17 @@ הסר חבר קבוצה הסר התקבל, לא מאופשר + יצירת קוד גישה להשמדה עצמית + שינוי מצב השמדה עצמית + שנה קוד גישה להשמדה עצמית + מזהה מסד נתונים: %d + נמחק ב: %s + ייעלם ב: %s + כל הנתונים נמחקים בהזנת הקוד. + הודעות משופרות + התאימו אישית ושתפו ערכות צבעים. + ערכות צבעים מותאמות אישית + (נוכחי) + נמחק + ייעלם \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-ja/strings.xml b/apps/android/app/src/main/res/values-ja/strings.xml index e69dcdbf18..04b86d8868 100644 --- a/apps/android/app/src/main/res/values-ja/strings.xml +++ b/apps/android/app/src/main/res/values-ja/strings.xml @@ -77,7 +77,7 @@ バックグラウンド機能が常にオンで、メッセージが到着次第に通知が出ます。 新しい連絡先を追加:使い捨てのQRコードを発行 電池省エネをオンに、バックグラウンド機能と定期的な受信依頼をオフにします。設定メニューにて変更できます。 - 電池消費が最少:アプリがアクティブ時のみに通知が出ます。 + 電池消費が最少:アプリがアクティブ時のみに通知が出ます(バックグラウンドサービス無し)。 設定メニューにてオフにできます。 アプリがアクティブ時に通知が出ます。 あなたと連絡相手が送信済みメッセージを永久削除できます。 QRコードを読み込み:連絡相手のQRコードをスキャンすると繋がります。 @@ -995,7 +995,7 @@ データベースアップグレード 音声/ビデオ通話 音声/ビデオ通話は禁止されています。 - 受け取った、禁止された + 禁帯出 XFTPサーバーのアドレスが正しい形式で、行で区切られており、重複していないことを確認してください。 ファイルの削除 ビデオ待機中 @@ -1006,7 +1006,7 @@ データベースを開いています… メッセージを送信できませんでした! ビデオ - 上記の場合、次のようになります: + ← から: SOCKSプロキシー設定 あなたのXFTPサーバ プロフィールにアドレスを追加し、連絡先があなたのアドレスを他の人と共有できるようにします。プロフィールの更新は連絡先に送信されます。 @@ -1034,7 +1034,7 @@ 連絡先からの通話を許可する。 連絡先が通話を許可している場合のみ通話を許可する。 " -\nv5.1で利用可能予定" +\nv5.1 で利用可能" 連絡先からのみ通話ができます。 あなたからも連絡先からも通話ができます。 システム @@ -1133,10 +1133,10 @@ 少なくとも1つのユーザープロフィールが表示されている必要があります。 少なくとも1つのユーザープロファイルが必要です。 プロフィールを非表示にできます! - リレー サーバーは IP アドレスを保護しますが、通話している間は監視できます。 + リレー サーバーは IP アドレスを保護しますが、通話時間は監視されます。 アドレスを連絡先と共有しますか\? 保留中の通話 - 無効な移行の確認 + データ移行の確認が正しくない %s を提供しました 確認を受け取りました… 提供された %s: %2s @@ -1248,4 +1248,17 @@ グループメンバーはメッセージへのリアクションを追加できます。 このグループではメッセージへのリアクションは禁止されています。 レコード更新日時 + メッセージへのリアクション + 自己破壊パスコード + カスタムテーマ + 日本語とポルトガル語UI + - 最長 5 分間の音声メッセージ。 +\n- 消えるまでのカスタム時間。 +\n- 編集履歴。 + 続きを読む + 入力するとすべてのデータが消去されます。 + カラーテーマをカスタマイズして共有することができます。 + ユーザーに感謝します – Weblate 経由で貢献してください! + ついに、私たちはそれらを手に入れました! 🚀 + より良いメッセージ \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index f37898ebf3..fd98c0b6e8 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -66,7 +66,7 @@ Sta toe dat uw contacten spraak berichten verzenden. Al uw contacten blijven verbonden. Spraak berichten toestaan\? - Goed voor batterij. Achtergrondservice controleert elke 10 minuten op nieuwe berichten. U kunt oproepen en dringende berichten missen. + Goed voor de batterij. Achtergrondservice controleert berichten elke 10 minuten. Mogelijk mist u oproepen of dringende berichten. Onjuiste bericht hash Scan QR-code: om verbinding te maken met uw contactpersoon die u de QR-code laat zien. Onjuiste bericht ID @@ -96,16 +96,16 @@ Er wordt een aparte TCP-verbinding (en SOCKS-referentie) gebruikt voor elk chat profiel dat je in de app hebt . audio oproep (niet e2e versleuteld) Achtergrondservice is altijd actief, meldingen worden weergegeven zodra de berichten beschikbaar zijn. - Nieuw contact toevoegen: om uw eenmalige QR-code voor uw contact te maken. + Nieuw contact toevoegen: om een eenmalige QR-code voor uw contact te maken. Oproep beëindigd Batterijoptimalisatie is actief, waardoor achtergrondservice en periodieke verzoeken om nieuwe berichten worden uitgeschakeld. Je kunt ze weer inschakelen via instellingen. - Beste voor de batterij. U ontvangt alleen meldingen als de app draait, de achtergronddienst wordt NIET gebruikt. + 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 jij als je contactpersoon kunnen verzonden berichten onherroepelijk verwijderen. Zowel jij als je contactpersoon kunnen verdwijnende berichten sturen. Zowel jij als je contactpersoon kunnen spraak berichten verzenden. Let op: u kunt het wachtwoord NIET herstellen of wijzigen als u het kwijt raakt. - Gebruikt meer batterij! Achtergrondservice is altijd actief, meldingen worden weergegeven zodra de berichten beschikbaar zijn. + Gebruikt meer batterij! Achtergrondservice wordt altijd uitgevoerd - meldingen worden weergegeven zodra berichten beschikbaar zijn. link voorbeeld annuleren oproep beëindigd %1$s Kan de database niet initialiseren @@ -632,7 +632,7 @@ U bepaalt via welke server(s) je de berichten ontvangt, uw contacten de servers die u gebruikt om ze berichten te sturen. Video aan Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren. - Deze instelling is van toepassing op berichten in jou huidige chat profiel + Deze instelling is van toepassing op berichten in uw huidige chat profiel Bewaar archief bijgewerkt groep profiel verwijderd @@ -760,7 +760,7 @@ Uw chat database Wachtwoord instellen om te exporteren Start de app opnieuw om een nieuw chat profiel aan te maken. - U mag de meest recente versie van uw chat database ALLEEN op één apparaat gebruiken, anders ontvangt u mogelijk geen berichten meer van sommige contacten. + U mag de meest recente versie van uw chat-database ALLEEN op één apparaat gebruiken, anders ontvangt u mogelijk geen berichten meer van sommige contacten. Start de app opnieuw om de geïmporteerde chat database te gebruiken. Stop de chat om database acties mogelijk te maken. Deze actie kan niet ongedaan worden gemaakt, alle ontvangen en verzonden bestanden en media worden verwijderd. Foto\'s met een lage resolutie blijven behouden. @@ -1240,11 +1240,24 @@ Fout bij het laden van details Verzonden bericht Verwijderd om - Ontvangen om + Ontvangen op Verzonden op Verwijderd om: %s Ontvangen op: %s Record bijgewerkt op: %s Geschiedenis Ontvangen bericht + Lees meer + Reacties op berichten + Alle gegevens worden bij het invoeren gewist. + Betere berichten + Pas kleuren thema\'s aan en deel ze. + Aangepaste thema\'s + Eindelijk, we hebben ze! 🚀 + Japanse en Portugese gebruikersinterface + Zelfvernietigingscode + Dank aan de gebruikers – draag bij via Weblate! + - spraakberichten tot 5 minuten. +\n- aangepaste tijd om te verdwijnen. +\n- bewerkingsgeschiedenis. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-pl/strings.xml b/apps/android/app/src/main/res/values-pl/strings.xml index ac13541c80..174a14c324 100644 --- a/apps/android/app/src/main/res/values-pl/strings.xml +++ b/apps/android/app/src/main/res/values-pl/strings.xml @@ -1248,4 +1248,17 @@ Otrzymane o %s (aktualny) Rekord zaktualizowany o: %s + Wszystkie dane są usuwane po jego wprowadzeniu. + Podziękowania dla użytkowników - wkład za pośrednictwem Weblate! + Reakcje wiadomości + Lepsze wiadomości + Dostosuj i udostępniaj motywy kolorów. + Niestandardowe motywy + W końcu je mamy! 🚀 + Japoński i portugalski interfejs użytkownika + Przeczytaj więcej + Pin samozniszczenia + - wiadomości głosowe do 5 minut. +\n- niestandardowy czas zniknięcia. +\n- historia edycji. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-pt-rBR/strings.xml b/apps/android/app/src/main/res/values-pt-rBR/strings.xml index 0012002a48..f6a74d6e9d 100644 --- a/apps/android/app/src/main/res/values-pt-rBR/strings.xml +++ b/apps/android/app/src/main/res/values-pt-rBR/strings.xml @@ -77,8 +77,8 @@ Console de chat Verifique o endereço do servidor e tente novamente. Uma conexão TCP separada (e credencial SOCKS) será usada para cada perfil de chat que você tiver no aplicativo. - Melhor para bateria. Você receberá notificações apenas quando o aplicativo estiver em execução, o serviço em segundo plano NÃO será usado. - Consome mais bateria! O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis. + Melhor para bateria. Você receberá notificações apenas quando o aplicativo estiver em execução (sem segundo plano). + Consome mais bateria! O serviço em segundo plano está sempre em execução - as notificações são exibidas assim que as mensagens estiverem disponíveis. CHATS ÍCONE DO APP BANCO DE DADOS DE CHAT @@ -87,7 +87,7 @@ Alterar senha do banco de dados\? Arquivo de chat endereço alterado para você - Você e seu contato podem enviar mensagens que desaparecem. + Você e seu contato podem enviar mensagens temporárias. Backup de dados do aplicativo CHAMADAS Aceitar solicitações de contato automaticamente @@ -95,7 +95,7 @@ O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis. Uma conexão TCP separada (e credencial SOCKS) será usada para cada contato e membro do grupo. \nObservação: se você tiver muitas conexões, o consumo de bateria e tráfego pode ser substancialmente maior e algumas conexões podem falhar. - Bom para bateria. O serviço em segundo plano verifica novas mensagens a cada 10 minutos. Você pode perder chamadas e mensagens urgentes. + Bom para bateria. O serviço em segundo plano procura por mensagens a cada 10 minutos. Você pode perder chamadas ou mensagens urgentes. chamda encerrada %1$s Chat com os desenvolvedores Criar link de grupo @@ -109,7 +109,7 @@ Contato oculto: Copiar Permitir - Permitir enviar mensagens que desaparecem. + Permitir enviar mensagens temporárias. Permitir o envio de mensagens diretas aos membros. Conectar via link/QR Todas as mensagens serão excluídas - isso não pode ser desfeito! As mensagens serão excluídas APENAS para você. @@ -142,7 +142,7 @@ Aceitar Permitir mensagens temporárias apenas se o seu contato permitir. Permita a exclusão irreversível da mensagem somente se o seu contato permitir. - Permitir que seus contatos enviem mensagens que desaparecem. + Permitir que seus contatos enviem mensagens temporárias. Permitir mensagens de voz somente se o seu contato permitir. Permitir que seus contatos enviem mensagens de voz. administrador @@ -346,11 +346,11 @@ %dh %d horas anônimo via link de endereço de contato - anônimo via link único + anônimo via link de uso único Ocultar Da Galeria Vídeo - Os membros do grupo podem enviar mensagens que desaparecem. + Os membros do grupo podem enviar mensagens temporárias. Arquivo Nome completo: Chamada de áudio recebida @@ -463,7 +463,7 @@ Cole o link que você recebeu na caixa abaixo para conectar com o seu contato. Novo em %s Envie-nos um e-mail - Escanear código QR do servidor + Escanear QR code do servidor Seus servidores SMP nunca Restaurar o backup do banco de dados\? @@ -604,7 +604,7 @@ Markdown em mensagens Servidores SMP Endereço do servidor pré-definido - Muitos perguntaram: se SimpleX não tem identificadores de usuários, como ele pode mandar memsagens\? + Muitos perguntaram: se SimpleX não tem identificadores de usuários, como ele pode mandar mensagens\? Rejeitar %1$d mensagens ignoradas Proteger a tela do app @@ -856,7 +856,7 @@ Mensagens de voz via link de endereço de contato via link de uso único - Compartilhar link único + Compartilhar link de uso único Usar hosts .onion chamada de vídeo (não criptografada ponta-a-ponta) Parar chat\? @@ -965,7 +965,7 @@ O contato com o qual você compartilhou este link NÃO será capaz de se conectar! Equipe SimpleX Usar servidoresSimpleX\? - Usando servidoresSimpleX. + Usando servidores SimpleX. Mostrar opções para desenvolvedores Suporte bluetooth e outras melhorias. Para revelar seu perfil oculto, digite uma senha em um campo de busca em sua página de perfis de chat. @@ -1033,7 +1033,7 @@ Esta ação não pode ser desfeita - as mensagens enviadas e recebidas antes do selecionado serão excluídas. Pode levar vários minutos. Confirme as atualizações do banco de dados Perfis de usuário, contatos, grupos e mensagens enviadas com criptografia de ponta-a-ponta são armazenados somente no seu dispositivo. - Obrigado por instalarSimpleX! + Obrigado por instalar SimpleX! A plataforma de mensagens que protege sua privacidade e segurança. Você está tentando convidar um contato com quem compartilhou um perfil anônimo para o grupo no qual está usando seu perfil principal Você controla por meio de qual(is) servidor(es) receber as mensagens, seus contatos controlam os servidores que você usa para enviar mensagens. @@ -1129,7 +1129,7 @@ Sobre o endereço SimpleX Secundária adicional Acento adicional - Link único + Link de uso único Adicione o endereço ao seu perfil, para que seus contatos possam compartilhá-lo com outras pessoas. A atualização do perfil será enviada aos seus contatos. Crie um endereço para permitir que as pessoas se conectem com você. Criar endereço SimpleX @@ -1184,8 +1184,78 @@ \nVocê pode alterá-la nas Configurações. Seus contatos continuarão conectados. Todos os dados do aplicativo serão excluídos. - A senha do aplicativo é substituída por uma senha de autodestruição. + A senha do aplicativo é substituída por uma senha de auto-destruição. Novo nome de exibição: Definir senha - Ativar autodestruição + Ativar auto-destruição + Enviar mensagem temporária + 1 minuto + 30 segundos + 5 minutos + Horário personalizado + Mensagem temporária + Enviar + A senha de auto-destruição foi alterada! + Senha de auto-destruição + Senha de auto-destruição ativada! + Ativar senha de auto-destruição + Permitir reações à mensagens. + Somente você pode adicionar reações à mensagens. + Somente seu contato pode adicionar reações à mensagens. + Reações à mensagens são proibidas neste grupo. + horas + minutos + segundos + Auto-destruição + Erro ao carregar detalhes + Histórico + Info + Mensagem recebida + Mensagem enviada + Um perfil chat vazio com o nome fornecido é criado, e o aplicativo é aberto normalmente. + Alterar o modo de auto-destruição + Se você digitar essa senha ao abrir o aplicativo, todos os dados do aplicativo serão excluídos irreversivelmente! + Excluído em + Recebido em + Registro atualizado em + ID do banco de dados: %d + Excluído em: %s + Desaparece em + Desaparece em: %s + Moderado em + Moderado em: %s + Recebido em: %s + Registro atualizado em: %s + (atual) + %s (atual) + Permitir que seus contatos adicionem reações à mensagens. + Você e seu contato podem adicionar reações à mensagens. + Os membros do grupo podem adicionar reações às mensagens. + Reações à mensagens são proibidas neste chat. + Proibir reações à mensagens. + personalizado + Ler mais + Todos seus dados são apagados quando digitado + Finalmente, nós os temos! 🚀 + Reações à mensagens + Senha de auto-destruição + Mensagens melhores + IU em japonês e português + meses + Selecionar + Obrigado aos usuários – contribua via Weblate! + - mensagens de voz de até 5 minutos +\n- tempo personalizado para desaparecer. +\n- histórico de edição. + semanas + Permitir reações à mensagens somente se o seu contato permitir. + Personalize e compartilhe temas de cores. + Temas personalizados + dias + Reações à mensagens + Proibir reações à mensagens. + Enviado em: %s + Enviado em + Alterar senha de auto-destruição + Se você digitar sua senha de auto-destruição ao abrir o aplicativo: \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml index ef5725d0f0..dd17625aab 100644 --- a/apps/android/app/src/main/res/values-ru/strings.xml +++ b/apps/android/app/src/main/res/values-ru/strings.xml @@ -182,7 +182,7 @@ У Вас нет чатов Отправить сообщение… - Отправить изображение… + Поделиться изображением… Отправить файл… Прикрепить @@ -334,7 +334,7 @@ Ваш профиль будет отправлен \nВашему контакту Если Вы не можете встретиться лично, Вы можете сосканировать QR код во время видеозвонка, или Ваш контакт может отправить Вам ссылку. - Поделиться ссылкой + Поделиться одноразовой ссылкой Чтобы соединиться, вставьте в это поле ссылку, полученную от Вашего контакта. Ваш профиль будет отправлен Вашему контакту @@ -345,7 +345,7 @@ Одноразовая ссылка Настройки - Ваш SimpleX адрес + Ваш адрес SimpleX Пароль и экспорт базы Информация о SimpleX Chat Как использовать @@ -913,8 +913,8 @@ Когда приложение запущено Периодически Мгновенно - Больше расход батареи! Фоновый сервис постоянно запущен - уведомления будут показаны как только есть новые сообщения. - Меньше расход батареи. Фоновый сервис проверяет новые сообщения каждые 10 минут. Вы можете пропустить звонки и срочные сообщения. + Больше расход батареи! Фоновый сервис постоянно запущен - уведомления будут показаны как только есть сообщения. + Меньше расход батареи. Фоновый сервис проверяет сообщения каждые 10 минут. Вы можете пропустить звонки и срочные сообщения. Можно изменить позже в настройках. LIVE Отправить живое сообщение @@ -1162,7 +1162,7 @@ Блокировка SimpleX не включена! Ошибка хэш сообщения Хэш предыдущего сообщения отличается. - Подтвердить Код + Подтвердить код Неправильный код Заблокировать через Режим блокировки @@ -1211,4 +1211,136 @@ Отозвать файл Остановить приём файла\? Вы можете включить Блокировку SimpleX через Настройки. + Только Вы можете добавлять реакции на сообщения. + И Вы, и Ваш контакт можете добавлять реакции на сообщения. + Одноразовая ссылка + Адрес SimpleX + Когда Вы получите запрос на соединение, Вы можете принять или отклонить его. + Включить код самоуничтожения + Все данные приложения будут удалены. + Если Вы введёте код самоуничтожения при открытии приложения: + Новое имя: + Установить код доступа + История + Информация + Открыть профили чата + Полученное сообщение + Отправленное сообщение + Исчезающее сообщение + Отправить исчезающее сообщение + 5 минут + Пользовательское время + Отправить + Пригласить друзей + Сохранить настройки автоприема + Изменить режим самоуничтожения + Изменить код самоуничтожения + Самоуничтожение + Код самоуничтожения включен! + Код доступа в приложение будет заменен кодом самоуничтожения. + Включить код самоуничтожения + Код самоуничтожения + Код самоуничтожения изменен! + Будет создан пустой профиль чата с указанным именем, и приложение откроется в обычном режиме. + Если Вы введете этот код при открытии приложения, все данные приложения будут безвозвратно удалены! + (текущее) + ID базы данных: %d + Модерировано + Модерировано: %s + Получено + Получено: %s + Запись обновлена: %s + %s (текущее) + Отправлено + Отправлено: %s + Реакции на сообщения + Разрешить реакции на сообщения. + Разрешить реакции на сообщения, только если ваш контакт разрешает их. + Разрешить контактам добавлять реакции на сообщения. + Члены группы могут добавлять реакции на сообщения. + Реакции на сообщения в этом чате запрещены. + Реакции на сообщения запрещены в этой группе. + Только Ваш контакт может добавлять реакции на сообщения. + Запретить реакции на сообщения. + Запретить реакции на сообщения. + секунд + ЦВЕТА ТЕМЫ + Поделиться адресом с контактами\? + Обновлённый профиль будет отправлен Вашим контактам. + Об адресе SimpleX + Узнать больше + Если Вы не можете встретиться лично, покажите QR-код во время видеозвонка или поделитесь ссылкой. + Чтобы соединиться с Вами, Ваш контакт может отсканировать QR-код или использовать ссылку в приложении. + Вы не потеряете контакты, если позже удалите Ваш адрес. + Вы можете поделиться своим адресом в виде ссылки или QR-кода - любой может соединиться с Вами. + Узнать больше в Руководстве пользователя. + Ваши контакты сохранятся. + Настроить тему + Создайте адрес, чтобы можно было соединиться с Вами. + Все Ваши контакты сохранятся. Обновленный профиль будет отправлен Вашим контактам. + Добавьте адрес в свой профиль, чтобы Ваши контакты могли поделиться им. Профиль будет отправлен Вашим контактам. + Создать адрес SimpleX + Поделиться с контактами + Прекратить делиться адресом\? + Автоприем + Введите приветственное сообщение... (опционально) + Сохранить настройки\? + Прекратить делиться + Продолжить + Не создавать адрес + Вы можете создать его позже + Ваши контакты в SimpleX получат этот адрес. +\nВы можете изменить это в Настройках. + Адрес + Введите приветственное сообщение… + Просмотр + Поделиться адресом + Вы можете поделиться этим адресом с Вашими контактами, чтобы они могли соединиться с %s. + Темная тема + Импорт темы + Ошибка импорта темы + SimpleX + Вторичный + Меню и диалоги + Экспорт темы + Заголовок + Убедитесь, что файл имеет правильный формат YAML. Экспортируйте тему, чтобы получить пример файла темы. + Вторичный 2 + Дополнительный акцент + Фон + Полученное сообщение + Отправленное сообщение + Узнать больше + Наконец-то, мы их добавили! 🚀 + Японский и Португальский UI + Реакции на сообщения + Код самоуничтожения + Все данные удаляются при его вводе. + Улучшенные сообщения + Настраивайте и делитесь темами. + Пользовательские темы + - голосовые сообщения до 5 минут. +\n- настройка времени исчезающих сообщений. +\n- история редактирования. + другое + дней + часов + минут + месяцев + Выбрать + Благодаря пользователям – добавьте переводы через Weblate! + недель + 1 минута + 30 секунд + Удалено: %s + Удалено + Исчезает + Исчезает: %s + Ошибка загрузки информации + Ошибка установки адреса + Привет! +\nСвяжитесь со мной через SimpleX Chat: %s + Давайте поговорим в SimpleX Chat + Открытие базы данных… + Запись обновлена \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index 085b529f68..9eb897557b 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -72,7 +72,7 @@ 仅有您的联系人许可后才允许语音消息。 您: %1$s 允许您的联系人发送语音消息。 - 一直 + 始终 始终开启 允许您的联系人发送限时消息。 应用程序构建:%s @@ -121,14 +121,14 @@ \n<b>请注意</b>:如果您有很多连接,您的电池和流量消耗可能会大大增加,并且某些连接可能会失败。 返回 添加新联系人:为您的联系人创建一次性二维码。 - 最长续航 。您只会在应用程序运行时收到通知,后台服务不会被使用。 - 较长续航 。后台服务每 10 分钟检查一次新消息。您可能会错过来电和紧急信息。 + 最长续航 。您只会在应用程序运行时收到通知(无后台服务)。 + 较长续航 。后台服务每 10 分钟检查一次消息。您可能会错过来电或者紧急信息。 加粗 您和您的联系人都可以不可逆转地删除已发送的消息。 您和您的联系人都可以发送限时消息。 您和您的联系人都可以发送语音消息。 可以在设置里禁用它 - 应用程序运行时仍会显示通知。 - 使用更多电量 !后台服务会始终运行——一旦收到消息,就会显示通知。 + 使用更多电量 !后台服务始终运行——一旦收到消息,就会显示通知。 请注意:如果您丢失密码,您将无法恢复或者更改密码。 通话已结束! 扫描二维码 :与向您展示二维码的联系人联系。 @@ -1007,10 +1007,10 @@ 感谢用户——通过 Weblate 做出贡献! 应该至少有一个可见的用户资料。 解除静音 - 欢迎信息 + 欢迎消息 当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。 您可以隐藏或静音用户配置文件——长按以显示菜单。 - 欢迎信息 + 欢迎消息 确认数据库升级 实验性 数据库升级 @@ -1151,4 +1151,32 @@ 已删除所有应用程序数据。 已创建一个包含所提供名字的空白聊天资料,应用程序照常打开。 更改自毁密码 + 自毁密码 + 加载细节错误 + 自定义时间 + 限时消息 + 启用自毁功能 + 启用自毁密码 + 自毁 + 数据库 ID:%d + 消失在 + 设置地址错误 + 自定义主题 + 创建一个地址,让人们与您联系。 + 创建 SimpleX 地址 + 输入欢迎消息……(可选) + 不创建地址 + 输入欢迎消息…… + 深色主题 + 导出主题 + 所有数据在输入后将被删除。 + 更好的消息 + 自定义和分享主题色。 + 自定义主题 + + 自定义 + (当前) + 已删除在 + 已删除在:%s + 消失在:%s \ No newline at end of file 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 d43033321e..16604349ef 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -59,10 +59,12 @@ %@ (current) + %@ (aktuální) No comment provided by engineer. %@ (current): + %@ (aktuální): copied message info @@ -97,6 +99,7 @@ %@: + %@: copied message info @@ -131,6 +134,7 @@ %d weeks + %d týdnů time interval @@ -297,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - 5 minutové hlasové zprávy. +- vlastní čas mizení. +- historie úprav. No comment provided by engineer. @@ -306,6 +313,7 @@ 0s + 0s No comment provided by engineer. @@ -320,6 +328,7 @@ 1 minute + 1 minutu No comment provided by engineer. @@ -334,10 +343,12 @@ 1-time link + Jednorázový odkaz No comment provided by engineer. 5 minutes + 5 minut No comment provided by engineer. @@ -347,6 +358,7 @@ 30 seconds + 30 vteřin No comment provided by engineer. @@ -357,6 +369,8 @@ <p>Hi!</p> <p><a href="%@">Connect to me via SimpleX Chat</a></p> + <p>Ahoj!</p> +<p><a href="%@"> Připojte se ke mne přes SimpleX Chat</a></p> email text @@ -398,6 +412,7 @@ About SimpleX address + O SimpleX adrese No comment provided by engineer. @@ -428,6 +443,7 @@ Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts. + Přidejte adresu do svého profilu, aby ji vaše kontakty mohly sdílet s dalšími lidmi. Aktualizace profilu bude zaslána vašim kontaktům. No comment provided by engineer. @@ -462,6 +478,7 @@ Address + Adresa No comment provided by engineer. @@ -476,6 +493,7 @@ All app data is deleted. + Všechna data aplikace jsou smazána. No comment provided by engineer. @@ -485,6 +503,7 @@ All data is erased when it is entered. + Všechna data se při zadání vymažou. No comment provided by engineer. @@ -499,10 +518,12 @@ All your contacts will remain connected. + Všechny vaše kontakty zůstanou připojeny. No comment provided by engineer. All your contacts will remain connected. Profile update will be sent to your contacts. + Všechny vaše kontakty zůstanou připojeny. Aktualizace profilu bude odeslána vašim kontaktům. No comment provided by engineer. @@ -527,10 +548,12 @@ Allow message reactions only if your contact allows them. + Povolit reakce na zprávy, pokud je váš kontakt povolí. No comment provided by engineer. Allow message reactions. + Povolit reakce na zprávy. No comment provided by engineer. @@ -565,6 +588,7 @@ Allow your contacts adding message reactions. + Povolit kontaktům přidávat reakce na zprávy. No comment provided by engineer. @@ -599,6 +623,7 @@ An empty chat profile with the provided name is created, and the app opens as usual. + Vytvořit prázdný chat profil se zadaným názvem a otevřít aplikaci jako obvykle. No comment provided by engineer. @@ -623,6 +648,7 @@ App passcode is replaced with self-destruct passcode. + Přístupový kód aplikace je nahrazen sebedestrukčním přístupovým heslem. No comment provided by engineer. @@ -687,6 +713,7 @@ Auto-accept + Automaticky přijmout No comment provided by engineer. @@ -716,10 +743,12 @@ Better messages + Lepší zprávy No comment provided by engineer. Both you and your contact can add message reactions. + Vy i váš kontakt můžete přidávat reakce na zprávy. No comment provided by engineer. @@ -829,10 +858,12 @@ Change self-destruct mode + Změnit režim sebedestrukce authentication reason Change self-destruct passcode + Změnit sebedestrukční heslo authentication reason set passcode view @@ -1083,6 +1114,7 @@ Continue + Pokračovat No comment provided by engineer. @@ -1102,10 +1134,12 @@ Create SimpleX address + Vytvořit SimpleX adresu No comment provided by engineer. Create an address to let people connect with you. + Vytvořit adresu, aby se s vámi lidé mohli spojit. No comment provided by engineer. @@ -1165,6 +1199,7 @@ Custom time + Vlastní čas No comment provided by engineer. @@ -1179,6 +1214,7 @@ Database ID: %d + ID databáze: %d copied message info @@ -1456,10 +1492,12 @@ Deleted at + Smazáno v No comment provided by engineer. Deleted at: %@ + Smazáno v: %@ copied message info @@ -1514,6 +1552,7 @@ Disappearing message + Mizící zpráva No comment provided by engineer. @@ -1533,10 +1572,12 @@ Disappears at + Zmizí v No comment provided by engineer. Disappears at: %@ + Zmizí v: %@ copied message info @@ -1566,6 +1607,7 @@ Don't create address + Nevytvářet adresu No comment provided by engineer. @@ -1590,6 +1632,7 @@ Duration + Trvání No comment provided by engineer. @@ -1644,10 +1687,12 @@ Enable self-destruct + Povolit sebedestrukci No comment provided by engineer. Enable self-destruct passcode + Povolit sebedestrukční heslo set passcode view @@ -1722,10 +1767,12 @@ Enter welcome message… + Zadat uvítací zprávu… placeholder Enter welcome message… (optional) + Zadat uvítací zprávu... (volitelně) placeholder @@ -1895,6 +1942,7 @@ Error sending email + Chyba odesílání e-mailu No comment provided by engineer. @@ -2019,6 +2067,7 @@ Finally, we have them! 🚀 + Konečně je máme! 🚀 No comment provided by engineer. @@ -2108,6 +2157,7 @@ Group members can add message reactions. + Členové skupin mohou přidávat reakce na zprávy. No comment provided by engineer. @@ -2212,6 +2262,7 @@ History + Historie copied message info @@ -2246,6 +2297,7 @@ If you can't meet in person, show QR code in a video call, or share the link. + Pokud se nemůžete setkat osobně, zobrazte QR kód ve videohovoru nebo sdílejte odkaz. No comment provided by engineer. @@ -2255,10 +2307,12 @@ If you enter this passcode when opening the app, all app data will be irreversibly removed! + Pokud tento přístupový kód zadáte při otevření aplikace, všechna data budou nenávratně smazána! No comment provided by engineer. If you enter your self-destruct passcode while opening the app: + Pokud při otevření aplikace zadáte sebedestrukční heslo: No comment provided by engineer. @@ -2368,6 +2422,7 @@ Info + Info chat item action @@ -2414,6 +2469,7 @@ Invite friends + Pozvat přátele No comment provided by engineer. @@ -2474,6 +2530,7 @@ Japanese interface + Japonské rozhraní No comment provided by engineer. @@ -2518,6 +2575,7 @@ Learn more + Zjistit více No comment provided by engineer. @@ -2537,6 +2595,7 @@ Let's talk in SimpleX Chat + Promluvme si v SimpleX Chatu email subject @@ -2661,14 +2720,17 @@ Message reactions + Reakce na zprávy chat feature Message reactions are prohibited in this chat. + Reakce na zprávy jsou v tomto chatu zakázány. No comment provided by engineer. Message reactions are prohibited in this group. + Reakce na zprávy jsou v této skupině zakázány. No comment provided by engineer. @@ -2718,10 +2780,12 @@ Moderated at + Upraveno v No comment provided by engineer. Moderated at: %@ + Upraveno v: %@ copied message info @@ -2791,6 +2855,7 @@ New display name + Nově zobrazované jméno No comment provided by engineer. @@ -2843,10 +2908,6 @@ Skupina nebyla nalezena! No comment provided by engineer. - - No message details - No comment provided by engineer. - No permission to record voice message Nemáte oprávnění nahrávat hlasové zprávy @@ -2938,6 +2999,7 @@ Only you can add message reactions. + Reakce na zprávy můžete přidávat pouze vy. No comment provided by engineer. @@ -2962,6 +3024,7 @@ Only your contact can add message reactions. + Reakce na zprávy může přidávat pouze váš kontakt. No comment provided by engineer. @@ -3011,6 +3074,7 @@ Opening database… + Otvírání databáze… No comment provided by engineer. @@ -3180,6 +3244,7 @@ Preview + Náhled No comment provided by engineer. @@ -3214,6 +3279,7 @@ Profile update will be sent to your contacts. + Aktualizace profilu bude zaslána vašim kontaktům. No comment provided by engineer. @@ -3228,10 +3294,12 @@ Prohibit message reactions. + Zakázat reakce na zprávy. No comment provided by engineer. Prohibit messages reactions. + Zakázat reakce na zprávy. No comment provided by engineer. @@ -3276,6 +3344,7 @@ React... + Reagovat... chat item menu @@ -3285,14 +3354,17 @@ Read more + Přečíst více No comment provided by engineer. Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address). + Další informace naleznete v [Uživatelské příručce](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address). No comment provided by engineer. Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends). + Přečtěte si více v [Uživatelské příručce](https://simplex.chat/docs/guide/readme.html#connect-to-friends). No comment provided by engineer. @@ -3307,10 +3379,12 @@ Received at + Přijato v No comment provided by engineer. Received at: %@ + Přijato v: %@ copied message info @@ -3320,6 +3394,7 @@ Received message + Přijatá zpráva message info title @@ -3339,10 +3414,12 @@ Record updated at + Záznam aktualizován v No comment provided by engineer. Record updated at: %@ + Záznam aktualizován v: %@ copied message info @@ -3522,6 +3599,7 @@ Save auto-accept settings + Uložit nastavení automatického přijímání No comment provided by engineer. @@ -3561,6 +3639,7 @@ Save settings? + Uložit nastavení? No comment provided by engineer. @@ -3615,22 +3694,27 @@ Select + Vybrat No comment provided by engineer. Self-destruct + Sebedestrukce No comment provided by engineer. Self-destruct passcode + Samodestrukční heslo No comment provided by engineer. Self-destruct passcode changed! + Heslo pro sebedestrukci změněno! No comment provided by engineer. Self-destruct passcode enabled! + Sebedestrukční heslo povoleno! No comment provided by engineer. @@ -3650,6 +3734,7 @@ Send disappearing message + Poslat mizící zprávu No comment provided by engineer. @@ -3704,10 +3789,12 @@ Sent at + Posláno v No comment provided by engineer. Sent at: %@ + Posláno v: % @ copied message info @@ -3717,6 +3804,7 @@ Sent message + Poslaná zpráva message info title @@ -3766,6 +3854,7 @@ Set passcode + Nastavit heslo No comment provided by engineer. @@ -3795,14 +3884,17 @@ Share 1-time link + Sdílet jednorázovou pozvánku No comment provided by engineer. Share address + Sdílet adresu No comment provided by engineer. Share address with contacts? + Sdílet adresu s kontakty? No comment provided by engineer. @@ -3817,6 +3909,7 @@ Share with contacts + Sdílet s kontakty No comment provided by engineer. @@ -3841,6 +3934,7 @@ SimpleX Address + SimpleX Adresa No comment provided by engineer. @@ -3870,6 +3964,7 @@ SimpleX address + Adresa SimpleX No comment provided by engineer. @@ -3969,10 +4064,12 @@ Stop sharing + Přestat sdílet No comment provided by engineer. Stop sharing address? + Přestat sdílet adresu? No comment provided by engineer. @@ -4219,6 +4316,7 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován To connect, your contact can scan QR code or use the link in the app. + Pro připojení může váš kontakt naskenovat QR kód, nebo použít odkaz v aplikaci. No comment provided by engineer. @@ -4330,6 +4428,7 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření. Unit + Jednotka No comment provided by engineer. @@ -4581,6 +4680,7 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu When people request to connect, you can accept or reject it. + Když někdo požádá o připojení, můžete žádost přijmout nebo odmítnout. No comment provided by engineer. @@ -4655,6 +4755,7 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu You can create it later + Můžete vytvořit později No comment provided by engineer. @@ -4681,6 +4782,7 @@ SimpleX zámek musí být povolen. You can share this address with your contacts to let them connect with **%@**. + Tuto adresu můžete sdílet s vašimi kontakty, abyse se mohli spojit s **%@**. No comment provided by engineer. @@ -4830,6 +4932,7 @@ SimpleX zámek musí být povolen. Your SimpleX address + Vaše SimpleX adresa No comment provided by engineer. @@ -4892,10 +4995,13 @@ Toto připojení můžete zrušit a kontakt odebrat (a zkusit to později s nov Your contacts in SimpleX will see it. You can change it in Settings. + Vaše kontakty v SimpleX ji uvidí. +Můžete ji změnit v Nastavení. No comment provided by engineer. Your contacts will remain connected. + Vaše kontakty zůstanou připojeny. No comment provided by engineer. @@ -5147,6 +5253,7 @@ Servery SimpleX nevidí váš profil. custom + vlastní dropdown time picker choice @@ -5156,6 +5263,7 @@ Servery SimpleX nevidí váš profil. days + dní time unit @@ -5235,6 +5343,7 @@ Servery SimpleX nevidí váš profil. hours + hodin time unit @@ -5344,6 +5453,7 @@ Servery SimpleX nevidí váš profil. minutes + minut time unit @@ -5363,6 +5473,7 @@ Servery SimpleX nevidí váš profil. months + měsíců time unit @@ -5385,6 +5496,10 @@ Servery SimpleX nevidí váš profil. bez šifrování e2e No comment provided by engineer. + + no text + copied message info in history + observer pozorovatel @@ -5463,6 +5578,7 @@ Servery SimpleX nevidí váš profil. seconds + vteřin time unit @@ -5542,6 +5658,7 @@ Servery SimpleX nevidí váš profil. weeks + týdnů time unit 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 2bfc3233cf..924e8d978b 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -59,10 +59,12 @@ %@ (current) + %@ (aktuell) No comment provided by engineer. %@ (current): + %@ (aktuell): copied message info @@ -299,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - Bis zu 5 Minuten lange Sprachnachrichten +- Zeit für verschwindende Nachrichten anpassen +- Vergangenheit bearbeiten No comment provided by engineer. @@ -323,6 +328,7 @@ 1 minute + 1 Minute No comment provided by engineer. @@ -342,6 +348,7 @@ 5 minutes + 5 Minuten No comment provided by engineer. @@ -351,6 +358,7 @@ 30 seconds + 30 Sekunden No comment provided by engineer. @@ -495,6 +503,7 @@ All data is erased when it is entered. + Sobald es eingegeben wird, werden alle Daten gelöscht. No comment provided by engineer. @@ -539,10 +548,12 @@ Allow message reactions only if your contact allows them. + Reaktionen auf Nachrichten sind nur möglich, falls Ihr Kontakt dies erlaubt. No comment provided by engineer. Allow message reactions. + Reaktionen auf Nachrichten erlauben. No comment provided by engineer. @@ -577,6 +588,7 @@ Allow your contacts adding message reactions. + Erlauben Sie Ihren Kontakten Reaktionen auf Nachrichten zu geben. No comment provided by engineer. @@ -731,10 +743,12 @@ Better messages + Verbesserungen bei Nachrichten No comment provided by engineer. Both you and your contact can add message reactions. + Sowohl Sie, als auch Ihr Kontakt können Reaktionen auf Nachrichten geben. No comment provided by engineer. @@ -1185,6 +1199,7 @@ Custom time + Zeit anpassen No comment provided by engineer. @@ -1477,10 +1492,12 @@ Deleted at + Gelöscht um No comment provided by engineer. Deleted at: %@ + Gelöscht um: %@ copied message info @@ -1535,6 +1552,7 @@ Disappearing message + Verschwindende Nachricht No comment provided by engineer. @@ -1554,10 +1572,12 @@ Disappears at + Verschwindet um No comment provided by engineer. Disappears at: %@ + Verschwindet um: %@ copied message info @@ -1612,6 +1632,7 @@ Duration + Dauer No comment provided by engineer. @@ -2046,6 +2067,7 @@ Finally, we have them! 🚀 + Endlich haben wir sie! 🚀 No comment provided by engineer. @@ -2135,6 +2157,7 @@ Group members can add message reactions. + Gruppenmitglieder können eine Reaktion auf Nachrichten geben. No comment provided by engineer. @@ -2239,6 +2262,7 @@ History + Vergangenheit copied message info @@ -2398,6 +2422,7 @@ Info + Information chat item action @@ -2505,6 +2530,7 @@ Japanese interface + Japanische Benutzeroberfläche No comment provided by engineer. @@ -2694,14 +2720,17 @@ Message reactions + Reaktionen auf Nachrichten chat feature Message reactions are prohibited in this chat. + In diesem Chat sind Reaktionen auf Nachrichten nicht erlaubt. No comment provided by engineer. Message reactions are prohibited in this group. + In dieser Gruppe sind Reaktionen auf Nachrichten nicht erlaubt. No comment provided by engineer. @@ -2751,10 +2780,12 @@ Moderated at + Moderiert um No comment provided by engineer. Moderated at: %@ + Moderiert um: %@ copied message info @@ -2824,6 +2855,7 @@ New display name + Neuer Anzeigename No comment provided by engineer. @@ -2876,10 +2908,6 @@ Die Gruppe wurde nicht gefunden! No comment provided by engineer. - - No message details - No comment provided by engineer. - No permission to record voice message Keine Berechtigung für das Aufnehmen von Sprachnachrichten @@ -2971,6 +2999,7 @@ Only you can add message reactions. + Nur Sie können Reaktionen auf Nachrichten geben. No comment provided by engineer. @@ -2995,6 +3024,7 @@ Only your contact can add message reactions. + Nur Ihr Kontakt kann Reaktionen auf Nachrichten geben. No comment provided by engineer. @@ -3264,10 +3294,12 @@ Prohibit message reactions. + Reaktionen auf Nachrichten nicht erlauben. No comment provided by engineer. Prohibit messages reactions. + Reaktionen auf Nachrichten nicht erlauben. No comment provided by engineer. @@ -3312,6 +3344,7 @@ React... + Reaktion... chat item menu @@ -3321,6 +3354,7 @@ Read more + Mehr erfahren No comment provided by engineer. @@ -3345,10 +3379,12 @@ Received at + Empfangen um No comment provided by engineer. Received at: %@ + Empfangen um: %@ copied message info @@ -3378,10 +3414,12 @@ Record updated at + Datensatz aktualisiert um No comment provided by engineer. Record updated at: %@ + Datensatz aktualisiert um: %@ copied message info @@ -3656,6 +3694,7 @@ Select + Auswählen No comment provided by engineer. @@ -3695,6 +3734,7 @@ Send disappearing message + Verschwindende Nachricht senden No comment provided by engineer. @@ -3749,10 +3789,12 @@ Sent at + Gesendet um No comment provided by engineer. Sent at: %@ + Gesendet um: %@ copied message info @@ -4386,6 +4428,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Unit + Einheit No comment provided by engineer. @@ -5210,6 +5253,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. custom + Benutzerdefiniert dropdown time picker choice @@ -5219,6 +5263,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. days + Tage time unit @@ -5298,6 +5343,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. hours + Stunden time unit @@ -5407,6 +5453,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. minutes + Minuten time unit @@ -5426,6 +5473,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. months + Monate time unit @@ -5448,6 +5496,10 @@ SimpleX-Server können Ihr Profil nicht einsehen. Keine E2E-Verschlüsselung No comment provided by engineer. + + no text + copied message info in history + observer Beobachter @@ -5526,6 +5578,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. seconds + Sekunden time unit @@ -5605,6 +5658,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. weeks + Wochen time unit 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 1675084433..023f507387 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -2908,11 +2908,6 @@ Group not found! No comment provided by engineer. - - No message details - No message details - No comment provided by engineer. - No permission to record voice message No permission to record voice message @@ -5501,6 +5496,11 @@ SimpleX servers cannot see your profile. no e2e encryption No comment provided by engineer. + + no text + no text + copied message info in history + observer observer 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 a691e014c4..add4477595 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -301,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - mensajes de voz de hasta 5 minutos. +- tiempo personalizado para mensajes temporales. +- historial de edición. No comment provided by engineer. @@ -340,7 +343,7 @@ 1-time link - Enlace de un uso + Enlace un uso No comment provided by engineer. @@ -490,7 +493,7 @@ All app data is deleted. - Todos los datos de la aplicación se han eliminado. + Todos los datos de la aplicación se eliminarán. No comment provided by engineer. @@ -500,6 +503,7 @@ All data is erased when it is entered. + Al introducirlo todos los datos son borrados. No comment provided by engineer. @@ -639,12 +643,12 @@ App passcode - Código de acceso a la aplicación + Código de acceso de la aplicación No comment provided by engineer. App passcode is replaced with self-destruct passcode. - El código de acceso se ha reemplazado por código de autodestrucción. + El código de acceso será reemplazado por código de autodestrucción. No comment provided by engineer. @@ -739,6 +743,7 @@ Better messages + Mensajes mejorados No comment provided by engineer. @@ -833,7 +838,7 @@ Change passcode - Cambiar el código de acceso + Cambiar código de acceso authentication reason @@ -858,7 +863,7 @@ Change self-destruct passcode - Cambiar código de autodestrucción + Cambiar código autodestrucción authentication reason set passcode view @@ -974,7 +979,7 @@ Confirm Passcode - Confirmar el código de acceso + Confirma Código No comment provided by engineer. @@ -1179,7 +1184,7 @@ Current Passcode - Código de acceso actual + Código de Acceso No comment provided by engineer. @@ -1204,12 +1209,12 @@ Database ID - ID de la base de datos + ID de base de datos No comment provided by engineer. Database ID: %d - ID de la base de datos: %d + ID de base de datos: %d copied message info @@ -1487,12 +1492,12 @@ Deleted at - Eliminado a las + Eliminado el No comment provided by engineer. Deleted at: %@ - Eliminado a las: %@ + Eliminado el: %@ copied message info @@ -1567,12 +1572,12 @@ Disappears at - Desaparece a las + Desaparecerá el No comment provided by engineer. Disappears at: %@ - Desaparece a las: %@ + Desaparecerá el: %@ copied message info @@ -1737,7 +1742,7 @@ Enter Passcode - Introducir código de acceso + Introduce Código No comment provided by engineer. @@ -2062,6 +2067,7 @@ Finally, we have them! 🚀 + ¡Por fin los tenemos! 🚀 No comment provided by engineer. @@ -2171,7 +2177,7 @@ Group members can send voice messages. - Los miembros del grupo pueden mandar mensajes de voz. + Los miembros del grupo pueden enviar mensajes de voz. No comment provided by engineer. @@ -2256,7 +2262,7 @@ History - Historia + Historial copied message info @@ -2281,7 +2287,7 @@ How to use your servers - Cómo usar tus servidores + Cómo usar los servidores No comment provided by engineer. @@ -2306,7 +2312,7 @@ If you enter your self-destruct passcode while opening the app: - Si introduces el código de autodestrucción al abrir la aplicación: + Si al abrir la aplicación introduces el código de autodestrucción: No comment provided by engineer. @@ -2416,7 +2422,7 @@ Info - Información + Detalles chat item action @@ -2524,6 +2530,7 @@ Japanese interface + Interfáz en japonés No comment provided by engineer. @@ -2773,12 +2780,12 @@ Moderated at - Moderado a las + Moderado el No comment provided by engineer. Moderated at: %@ - Moderado a las: %@ + Moderado el: %@ copied message info @@ -2828,7 +2835,7 @@ New Passcode - Código de acceso nuevo + Código Nuevo No comment provided by engineer. @@ -2901,11 +2908,6 @@ ¡Grupo no encontrado! No comment provided by engineer. - - No message details - Sin detalles del mensaje - No comment provided by engineer. - No permission to record voice message Sin permiso para grabar mensajes de voz @@ -2972,7 +2974,7 @@ Onion hosts will be used when available. Requires enabling VPN. - Se usarán hosts .onion cuando estén disponibles. Requiere activación de la VPN. + Se usarán hosts .onion si están disponibles. Requiere activación de la VPN. No comment provided by engineer. @@ -3192,7 +3194,7 @@ Please remember or store it securely - there is no way to recover a lost passcode! - Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código de acceso perdido! + Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código perdido! No comment provided by engineer. @@ -3352,6 +3354,7 @@ Read more + Saber más No comment provided by engineer. @@ -3376,12 +3379,12 @@ Received at - Recibido a las + Recibido el No comment provided by engineer. Received at: %@ - Recibido a las: %@ + Recibido el: %@ copied message info @@ -3391,7 +3394,7 @@ Received message - Mensaje recibido + Mensaje entrante message info title @@ -3401,7 +3404,7 @@ Receiving via - Recibes vía + Recibiendo vía No comment provided by engineer. @@ -3411,12 +3414,12 @@ Record updated at - Registro actualizado a las + Registro actualizado No comment provided by engineer. Record updated at: %@ - Registro actualizado a las: %@ + Registro actualizado: %@ copied message info @@ -3741,7 +3744,7 @@ Send live message - Enviar mensaje en vivo + Mensaje en vivo No comment provided by engineer. @@ -3781,17 +3784,17 @@ Sending via - Envías vía + Enviando vía No comment provided by engineer. Sent at - Enviado a las + Enviado el No comment provided by engineer. Sent at: %@ - Enviado a las: %@ + Enviado el: %@ copied message info @@ -3801,7 +3804,7 @@ Sent message - Mensaje enviado + Mensaje saliente message info title @@ -3851,7 +3854,7 @@ Set passcode - Introduce el código de acceso + Código autodestrucción No comment provided by engineer. @@ -4678,7 +4681,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb When people request to connect, you can accept or reject it. - Cuando alguien solicita conectarse, puedes aceptar o rechazar. + Cuando alguien solicite conectarse podrás aceptar o rechazar la solicitud. No comment provided by engineer. @@ -4815,7 +4818,7 @@ Bloqueo SimpleX debe estar activado. You could not be verified; please try again. - No has podido ser verificado. Inténtelo de nuevo. + No has podido ser autenticado. Inténtalo de nuevo. No comment provided by engineer. @@ -4840,7 +4843,7 @@ Bloqueo SimpleX debe estar activado. You joined this group. Connecting to inviting group member. - Te has unido a este grupo. Conectando con miembro del grupo invitado. + Te has unido a este grupo. Conectando con el miembro que emite la invitacíon. No comment provided by engineer. @@ -4915,17 +4918,17 @@ Bloqueo SimpleX debe estar activado. Your %@ servers - Tus servidores %@ + Mis servidores %@ No comment provided by engineer. Your ICE servers - Tus servidores ICE + Mis servidores ICE No comment provided by engineer. Your SMP servers - Tus servidores SMP + Mis servidores SMP No comment provided by engineer. @@ -4935,12 +4938,12 @@ Bloqueo SimpleX debe estar activado. Your XFTP servers - Tus servidores XFTP + Mis servidores XFTP No comment provided by engineer. Your calls - Tus llamadas + Mis llamadas No comment provided by engineer. @@ -4970,7 +4973,7 @@ Bloqueo SimpleX debe estar activado. Your chats - Tus chats + Mis chats No comment provided by engineer. @@ -5014,7 +5017,7 @@ Puedes cambiarlo en Configuración. Your preferences - Tus preferencias + Mis preferencias No comment provided by engineer. @@ -5356,17 +5359,17 @@ Los servidores de SimpleX no pueden ver tu perfil. incognito via contact address link - Incógnito mediante enlace de dirección del contacto + en modo incógnito mediante enlace de dirección del contacto chat list item description incognito via group link - Incógnito mediante enlace de grupo + en modo incógnito mediante enlace de grupo chat list item description incognito via one-time link - Incógnito mediante enlace de un uso + en modo incógnito mediante enlace de un solo uso chat list item description @@ -5401,7 +5404,7 @@ Los servidores de SimpleX no pueden ver tu perfil. invited %@ - invitado %@ + ha invitado a %@ rcv group event chat item @@ -5494,6 +5497,10 @@ Los servidores de SimpleX no pueden ver tu perfil. sin cifrar No comment provided by engineer. + + no text + copied message info in history + observer observador @@ -5602,7 +5609,7 @@ Los servidores de SimpleX no pueden ver tu perfil. updated group profile - ha actualizado el perfil de grupo + ha actualizado el perfil del grupo rcv group event chat item @@ -5707,7 +5714,7 @@ Los servidores de SimpleX no pueden ver tu perfil. you shared one-time link incognito - has compartido enlace de un uso en modo incógnito + has compartido enlace de un solo uso en modo incógnito chat list item description 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 570067bf4f..42ec2ace15 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -59,10 +59,12 @@ %@ (current) + %@ (actuel) No comment provided by engineer. %@ (current): + %@ (actuel) : copied message info @@ -299,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - messages vocaux pouvant durer jusqu'à 5 minutes. +- délai personnalisé de disparition. +- l'historique de modification. No comment provided by engineer. @@ -498,6 +503,7 @@ All data is erased when it is entered. + Toutes les données sont effacées lorsqu'il est saisi. No comment provided by engineer. @@ -737,6 +743,7 @@ Better messages + Meilleurs messages No comment provided by engineer. @@ -1485,10 +1492,12 @@ Deleted at + Supprimé à No comment provided by engineer. Deleted at: %@ + Supprimé à : %@ copied message info @@ -1563,10 +1572,12 @@ Disappears at + Disparaît à No comment provided by engineer. Disappears at: %@ + Disparaît à : %@ copied message info @@ -1621,6 +1632,7 @@ Duration + Durée No comment provided by engineer. @@ -2055,6 +2067,7 @@ Finally, we have them! 🚀 + Enfin, les voilà ! 🚀 No comment provided by engineer. @@ -2249,6 +2262,7 @@ History + Historique copied message info @@ -2408,6 +2422,7 @@ Info + Info chat item action @@ -2515,6 +2530,7 @@ Japanese interface + Interface en japonais No comment provided by engineer. @@ -2764,10 +2780,12 @@ Moderated at + Modéré à No comment provided by engineer. Moderated at: %@ + Modéré à : %@ copied message info @@ -2837,6 +2855,7 @@ New display name + Nouveau nom d'affichage No comment provided by engineer. @@ -2889,10 +2908,6 @@ Groupe introuvable ! No comment provided by engineer. - - No message details - No comment provided by engineer. - No permission to record voice message Pas l'autorisation d'enregistrer un message vocal @@ -3329,6 +3344,7 @@ React... + Réagir... chat item menu @@ -3338,6 +3354,7 @@ Read more + En savoir plus No comment provided by engineer. @@ -3362,10 +3379,12 @@ Received at + Reçu le No comment provided by engineer. Received at: %@ + Reçu le : %@ copied message info @@ -3375,6 +3394,7 @@ Received message + Message reçu message info title @@ -3394,10 +3414,12 @@ Record updated at + Enregistrement mis à jour le No comment provided by engineer. Record updated at: %@ + Enregistrement mis à jour le : %@ copied message info @@ -3672,6 +3694,7 @@ Select + Choisir No comment provided by engineer. @@ -3766,10 +3789,12 @@ Sent at + Envoyé le No comment provided by engineer. Sent at: %@ + Envoyé le : %@ copied message info @@ -4403,6 +4428,7 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s Unit + Unité No comment provided by engineer. @@ -5227,6 +5253,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. custom + personnalisé dropdown time picker choice @@ -5469,6 +5496,10 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. sans chiffrement de bout en bout No comment provided by engineer. + + no text + copied message info in history + observer observateur 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 ca2cd62b5e..ce622228ee 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -59,10 +59,12 @@ %@ (current) + %@ (attuale) No comment provided by engineer. %@ (current): + %@ (attuale): copied message info @@ -299,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - messaggi vocali fino a 5 minuti. +- tempo di scomparsa personalizzato. +- cronologia delle modifiche. No comment provided by engineer. @@ -498,6 +503,7 @@ All data is erased when it is entered. + Tutti i dati vengono cancellati quando inserito. No comment provided by engineer. @@ -737,6 +743,7 @@ Better messages + Messaggi migliorati No comment provided by engineer. @@ -1485,10 +1492,12 @@ Deleted at + Eliminato il No comment provided by engineer. Deleted at: %@ + Eliminato il: %@ copied message info @@ -1563,10 +1572,12 @@ Disappears at + Scompare il No comment provided by engineer. Disappears at: %@ + Scompare il: %@ copied message info @@ -1621,6 +1632,7 @@ Duration + Durata No comment provided by engineer. @@ -2055,6 +2067,7 @@ Finally, we have them! 🚀 + Finalmente le abbiamo! 🚀 No comment provided by engineer. @@ -2249,6 +2262,7 @@ History + Cronologia copied message info @@ -2408,6 +2422,7 @@ Info + Informazioni chat item action @@ -2515,6 +2530,7 @@ Japanese interface + Interfaccia giapponese No comment provided by engineer. @@ -2764,10 +2780,12 @@ Moderated at + Moderato il No comment provided by engineer. Moderated at: %@ + Moderato il: %@ copied message info @@ -2837,6 +2855,7 @@ New display name + Nuovo nome da mostrare No comment provided by engineer. @@ -2889,10 +2908,6 @@ Gruppo non trovato! No comment provided by engineer. - - No message details - No comment provided by engineer. - No permission to record voice message Nessuna autorizzazione per registrare messaggi vocali @@ -3329,6 +3344,7 @@ React... + Reagisci... chat item menu @@ -3338,6 +3354,7 @@ Read more + Leggi tutto No comment provided by engineer. @@ -3362,10 +3379,12 @@ Received at + Ricevuto il No comment provided by engineer. Received at: %@ + Ricevuto il: %@ copied message info @@ -3395,10 +3414,12 @@ Record updated at + Registro aggiornato il No comment provided by engineer. Record updated at: %@ + Registro aggiornato il: %@ copied message info @@ -3768,10 +3789,12 @@ Sent at + Inviato il No comment provided by engineer. Sent at: %@ + Inviato il: %@ copied message info @@ -4405,6 +4428,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Unit + Unità No comment provided by engineer. @@ -5472,6 +5496,10 @@ I server di SimpleX non possono vedere il tuo profilo. nessuna crittografia e2e No comment provided by engineer. + + no text + copied message info in history + observer osservatore 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 bc4b41c0e1..39d331773a 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -301,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - 最長 5 分間の音声メッセージ。 +- 消えるまでのカスタム時間。 +- 編集履歴。 No comment provided by engineer. @@ -480,7 +483,7 @@ Admins can create the links to join groups. - 管理者はグループの参加リンクを発行できます。 + 管理者はグループの参加リンクを生成できます。 No comment provided by engineer. @@ -500,6 +503,7 @@ All data is erased when it is entered. + 入力するとすべてのデータが消去されます。 No comment provided by engineer. @@ -1144,17 +1148,17 @@ Create group link - グループのリンクを発行する + グループのリンクを生成する No comment provided by engineer. Create link - リンクを発行する + リンクを生成する No comment provided by engineer. Create one-time invitation link - 使い捨ての招待リンクを発行する + 使い捨ての招待リンクを生成する No comment provided by engineer. @@ -1817,7 +1821,7 @@ Error creating group link - グループリンク発行にエラー発生 + グループリンク生成にエラー発生 No comment provided by engineer. @@ -2047,7 +2051,7 @@ File will be received when your contact is online, please wait or check later! - 連絡先がオンラインになったら受信されます。しばらくお待ちください。 + 連絡先がオンラインになったら受信されます。しばらくお待ちください! No comment provided by engineer. @@ -2301,7 +2305,7 @@ If you enter this passcode when opening the app, all app data will be irreversibly removed! - アプリを開くときにこのパスコードを入力すると、アプリのすべてのデータが元に戻せないように削除されます。 + アプリを開くときにこのパスコードを入力すると、アプリのすべてのデータが元に戻せないように削除されます! No comment provided by engineer. @@ -2524,6 +2528,7 @@ Japanese interface + 日本語UI No comment provided by engineer. @@ -2901,11 +2906,6 @@ グループが見つかりません! No comment provided by engineer. - - No message details - メッセージの詳細はありません - No comment provided by engineer. - No permission to record voice message 音声メッセージを録音する権限がありません @@ -3217,7 +3217,7 @@ Polish interface - 洗練されたインターフェース + ポーランド語UI No comment provided by engineer. @@ -3352,6 +3352,7 @@ Read more + 続きを読む No comment provided by engineer. @@ -5493,6 +5494,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 エンドツーエンド暗号化がありません No comment provided by engineer. + + no text + copied message info in history + observer オブザーバー 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 c01c581e25..643bc75bcb 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -301,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - spraakberichten tot 5 minuten. +- aangepaste tijd om te verdwijnen. +- bewerkingsgeschiedenis. No comment provided by engineer. @@ -500,6 +503,7 @@ All data is erased when it is entered. + Alle gegevens worden bij het invoeren gewist. No comment provided by engineer. @@ -739,6 +743,7 @@ Better messages + Betere berichten No comment provided by engineer. @@ -2062,6 +2067,7 @@ Finally, we have them! 🚀 + Eindelijk, we hebben ze! 🚀 No comment provided by engineer. @@ -2524,6 +2530,7 @@ Japanese interface + Japanse interface No comment provided by engineer. @@ -2901,11 +2908,6 @@ Groep niet gevonden! No comment provided by engineer. - - No message details - Geen berichtdetails - No comment provided by engineer. - No permission to record voice message Geen toestemming om spraakbericht op te nemen @@ -3352,6 +3354,7 @@ Read more + Lees meer No comment provided by engineer. @@ -3376,7 +3379,7 @@ Received at - Ontvangen om + Ontvangen op No comment provided by engineer. @@ -5492,6 +5495,10 @@ SimpleX servers kunnen uw profiel niet zien. geen e2e versleuteling No comment provided by engineer. + + no text + copied message info in history + observer Waarnemer 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 c312532660..1378c98d27 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -301,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - wiadomości głosowe do 5 minut. +- niestandardowy czas zniknięcia. +- historia edycji. No comment provided by engineer. @@ -500,6 +503,7 @@ All data is erased when it is entered. + Wszystkie dane są usuwane po jego wprowadzeniu. No comment provided by engineer. @@ -739,6 +743,7 @@ Better messages + Lepsze wiadomości No comment provided by engineer. @@ -2062,6 +2067,7 @@ Finally, we have them! 🚀 + W końcu je mamy! 🚀 No comment provided by engineer. @@ -2524,6 +2530,7 @@ Japanese interface + Japoński interfejs No comment provided by engineer. @@ -2901,11 +2908,6 @@ Nie znaleziono grupy! No comment provided by engineer. - - No message details - Brak szczegółów wiadomości - No comment provided by engineer. - No permission to record voice message Brak uprawnień do nagrywania wiadomości głosowej @@ -3352,6 +3354,7 @@ Read more + Przeczytaj więcej No comment provided by engineer. @@ -5493,6 +5496,10 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. brak szyfrowania e2e No comment provided by engineer. + + no text + copied message info in history + observer obserwator 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 9332a73dd2..c8faa7b6c8 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -59,10 +59,12 @@ %@ (current) + %@ (текущее) No comment provided by engineer. %@ (current): + %@ (текущее): copied message info @@ -97,6 +99,7 @@ %@: + %@: copied message info @@ -131,6 +134,7 @@ %d weeks + %d недель time interval @@ -297,6 +301,9 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. + - голосовые сообщения до 5 минут. +- настройка времени исчезающих сообщений. +- история редактирования. No comment provided by engineer. @@ -306,6 +313,7 @@ 0s + No comment provided by engineer. @@ -320,6 +328,7 @@ 1 minute + 1 минута No comment provided by engineer. @@ -334,10 +343,12 @@ 1-time link + Одноразовая ссылка No comment provided by engineer. 5 minutes + 5 минут No comment provided by engineer. @@ -347,6 +358,7 @@ 30 seconds + 30 секунд No comment provided by engineer. @@ -357,6 +369,8 @@ <p>Hi!</p> <p><a href="%@">Connect to me via SimpleX Chat</a></p> + <p>Привет!</p> +<p><a href="%@">Соединитесь со мной в SimpleX Chat.</a></p> email text @@ -398,6 +412,7 @@ About SimpleX address + Об адресе SimpleX No comment provided by engineer. @@ -428,6 +443,7 @@ 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. @@ -462,6 +478,7 @@ Address + Адрес No comment provided by engineer. @@ -476,6 +493,7 @@ All app data is deleted. + Все данные приложения будут удалены. No comment provided by engineer. @@ -485,6 +503,7 @@ All data is erased when it is entered. + Все данные удаляются при его вводе. No comment provided by engineer. @@ -499,10 +518,12 @@ All your contacts will remain connected. + Все контакты, которые соединились через этот адрес, сохранятся. No comment provided by engineer. All your contacts will remain connected. Profile update will be sent to your contacts. + Все Ваши контакты сохранятся. Обновленный профиль будет отправлен Вашим контактам. No comment provided by engineer. @@ -527,10 +548,12 @@ Allow message reactions only if your contact allows them. + Разрешить реакции на сообщения, только если ваш контакт разрешает их. No comment provided by engineer. Allow message reactions. + Разрешить реакции на сообщения. No comment provided by engineer. @@ -565,6 +588,7 @@ Allow your contacts adding message reactions. + Разрешить контактам добавлять реакции на сообщения. No comment provided by engineer. @@ -599,6 +623,7 @@ An empty chat profile with the provided name is created, and the app opens as usual. + Будет создан пустой профиль чата с указанным именем, и приложение откроется в обычном режиме. No comment provided by engineer. @@ -623,6 +648,7 @@ App passcode is replaced with self-destruct passcode. + Код доступа в приложение будет заменен кодом самоуничтожения. No comment provided by engineer. @@ -687,6 +713,7 @@ Auto-accept + Автоприем No comment provided by engineer. @@ -716,10 +743,12 @@ Better messages + Улучшенные сообщения No comment provided by engineer. Both you and your contact can add message reactions. + И Вы, и Ваш контакт можете добавлять реакции на сообщения. No comment provided by engineer. @@ -829,10 +858,12 @@ Change self-destruct mode + Изменить режим самоуничтожения authentication reason Change self-destruct passcode + Изменить код самоуничтожения authentication reason set passcode view @@ -1083,6 +1114,7 @@ Continue + Продолжить No comment provided by engineer. @@ -1102,10 +1134,12 @@ Create SimpleX address + Создать адрес SimpleX No comment provided by engineer. Create an address to let people connect with you. + Создайте адрес, чтобы можно было соединиться с вами. No comment provided by engineer. @@ -1165,6 +1199,7 @@ Custom time + Пользовательское время No comment provided by engineer. @@ -1179,6 +1214,7 @@ Database ID: %d + ID базы данных: %d copied message info @@ -1456,10 +1492,12 @@ Deleted at + Удалено No comment provided by engineer. Deleted at: %@ + Удалено: %@ copied message info @@ -1514,6 +1552,7 @@ Disappearing message + Исчезающее сообщение No comment provided by engineer. @@ -1533,10 +1572,12 @@ Disappears at + Исчезает No comment provided by engineer. Disappears at: %@ + Исчезает: %@ copied message info @@ -1566,6 +1607,7 @@ Don't create address + Не создавать адрес No comment provided by engineer. @@ -1590,6 +1632,7 @@ Duration + Длительность No comment provided by engineer. @@ -1644,10 +1687,12 @@ Enable self-destruct + Включить код самоуничтожения No comment provided by engineer. Enable self-destruct passcode + Включить код самоуничтожения set passcode view @@ -1722,10 +1767,12 @@ Enter welcome message… + Введите приветственное сообщение… placeholder Enter welcome message… (optional) + Введите приветственное сообщение... (опционально) placeholder @@ -1895,6 +1942,7 @@ Error sending email + Ошибка отправки email No comment provided by engineer. @@ -2019,6 +2067,7 @@ Finally, we have them! 🚀 + Наконец-то, мы их добавили! 🚀 No comment provided by engineer. @@ -2108,6 +2157,7 @@ Group members can add message reactions. + Члены группы могут добавлять реакции на сообщения. No comment provided by engineer. @@ -2212,6 +2262,7 @@ History + История copied message info @@ -2246,6 +2297,7 @@ If you can't meet in person, show QR code in a video call, or share the link. + Если Вы не можете встретиться лично, покажите QR-код во время видеозвонка или поделитесь ссылкой. No comment provided by engineer. @@ -2255,10 +2307,12 @@ If you enter this passcode when opening the app, all app data will be irreversibly removed! + Если Вы введете этот код при открытии приложения, все данные приложения будут безвозвратно удалены! No comment provided by engineer. If you enter your self-destruct passcode while opening the app: + Если Вы введёте код самоуничтожения при открытии приложения: No comment provided by engineer. @@ -2368,6 +2422,7 @@ Info + Информация chat item action @@ -2414,6 +2469,7 @@ Invite friends + Пригласить друзей No comment provided by engineer. @@ -2474,6 +2530,7 @@ Japanese interface + Японский интерфейс No comment provided by engineer. @@ -2518,6 +2575,7 @@ Learn more + Узнать больше No comment provided by engineer. @@ -2537,6 +2595,7 @@ Let's talk in SimpleX Chat + Давайте поговорим в SimpleX Chat email subject @@ -2661,14 +2720,17 @@ Message reactions + Реакции на сообщения chat feature Message reactions are prohibited in this chat. + Реакции на сообщения в этом чате запрещены. No comment provided by engineer. Message reactions are prohibited in this group. + Реакции на сообщения запрещены в этой группе. No comment provided by engineer. @@ -2718,10 +2780,12 @@ Moderated at + Модерировано No comment provided by engineer. Moderated at: %@ + Модерировано: %@ copied message info @@ -2791,6 +2855,7 @@ New display name + Новое имя No comment provided by engineer. @@ -2843,10 +2908,6 @@ Группа не найдена! No comment provided by engineer. - - No message details - No comment provided by engineer. - No permission to record voice message Нет разрешения для записи голосового сообщения @@ -2938,6 +2999,7 @@ Only you can add message reactions. + Только Вы можете добавлять реакции на сообщения. No comment provided by engineer. @@ -2962,6 +3024,7 @@ Only your contact can add message reactions. + Только Ваш контакт может добавлять реакции на сообщения. No comment provided by engineer. @@ -3011,6 +3074,7 @@ Opening database… + Открытие базы данных… No comment provided by engineer. @@ -3180,6 +3244,7 @@ Preview + Просмотр No comment provided by engineer. @@ -3214,6 +3279,7 @@ Profile update will be sent to your contacts. + Обновлённый профиль будет отправлен Вашим контактам. No comment provided by engineer. @@ -3228,10 +3294,12 @@ Prohibit message reactions. + Запретить реакции на сообщения. No comment provided by engineer. Prohibit messages reactions. + Запретить реакции на сообщения. No comment provided by engineer. @@ -3276,6 +3344,7 @@ React... + Реакция... chat item menu @@ -3285,14 +3354,17 @@ Read more + Узнать больше No comment provided by engineer. Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address). + Узнать больше в [Руководстве пользователя](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address). No comment provided by engineer. Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends). + Узнать больше в [Руководстве пользователя](https://simplex.chat/docs/guide/readme.html#connect-to-friends). No comment provided by engineer. @@ -3307,10 +3379,12 @@ Received at + Получено No comment provided by engineer. Received at: %@ + Получено: %@ copied message info @@ -3320,6 +3394,7 @@ Received message + Полученное сообщение message info title @@ -3339,10 +3414,12 @@ Record updated at + Запись обновлена No comment provided by engineer. Record updated at: %@ + Запись обновлена: %@ copied message info @@ -3522,6 +3599,7 @@ Save auto-accept settings + Сохранить настройки автоприема No comment provided by engineer. @@ -3561,6 +3639,7 @@ Save settings? + Сохранить настройки? No comment provided by engineer. @@ -3615,22 +3694,27 @@ Select + Выбрать No comment provided by engineer. Self-destruct + Самоуничтожение No comment provided by engineer. Self-destruct passcode + Код самоуничтожения No comment provided by engineer. Self-destruct passcode changed! + Код самоуничтожения изменен! No comment provided by engineer. Self-destruct passcode enabled! + Код самоуничтожения включен! No comment provided by engineer. @@ -3650,6 +3734,7 @@ Send disappearing message + Отправить исчезающее сообщение No comment provided by engineer. @@ -3704,10 +3789,12 @@ Sent at + Отправлено No comment provided by engineer. Sent at: %@ + Отправлено: %@ copied message info @@ -3717,6 +3804,7 @@ Sent message + Отправленное сообщение message info title @@ -3766,6 +3854,7 @@ Set passcode + Установить код доступа No comment provided by engineer. @@ -3795,14 +3884,17 @@ Share 1-time link + Поделиться одноразовой ссылкой No comment provided by engineer. Share address + Поделиться адресом No comment provided by engineer. Share address with contacts? + Поделиться адресом с контактами? No comment provided by engineer. @@ -3817,6 +3909,7 @@ Share with contacts + Поделиться с контактами No comment provided by engineer. @@ -3841,6 +3934,7 @@ SimpleX Address + Адрес SimpleX No comment provided by engineer. @@ -3870,6 +3964,7 @@ SimpleX address + Адрес SimpleX No comment provided by engineer. @@ -3969,10 +4064,12 @@ Stop sharing + Прекратить делиться No comment provided by engineer. Stop sharing address? + Прекратить делиться адресом? No comment provided by engineer. @@ -4219,6 +4316,7 @@ It can happen because of some bug or when the connection is compromised. To connect, your contact can scan QR code or use the link in the app. + Чтобы соединиться с Вами, Ваш контакт может отсканировать QR-код или использовать ссылку в приложении. No comment provided by engineer. @@ -4330,6 +4428,7 @@ You will be prompted to complete authentication before this feature is enabled.< Unit + Единица No comment provided by engineer. @@ -4581,6 +4680,7 @@ To connect, please ask your contact to create another connection link and check When people request to connect, you can accept or reject it. + Когда Вы получите запрос на соединение, Вы можете принять или отклонить его. No comment provided by engineer. @@ -4655,6 +4755,7 @@ To connect, please ask your contact to create another connection link and check You can create it later + Вы можете создать его позже No comment provided by engineer. @@ -4681,6 +4782,7 @@ SimpleX Lock must be enabled. You can share this address with your contacts to let them connect with **%@**. + Вы можете поделиться этим адресом с Вашими контактами, чтобы они могли соединиться с **%@**. No comment provided by engineer. @@ -4830,6 +4932,7 @@ SimpleX Lock must be enabled. Your SimpleX address + Ваш адрес SimpleX No comment provided by engineer. @@ -4892,10 +4995,13 @@ You can cancel this connection and remove the contact (and try later with a new Your contacts in SimpleX will see it. You can change it in Settings. + Ваши контакты в SimpleX получат этот адрес. +Вы можете изменить это в Настройках. No comment provided by engineer. Your contacts will remain connected. + Ваши контакты сохранятся. No comment provided by engineer. @@ -5147,6 +5253,7 @@ SimpleX серверы не могут получить доступ к Ваше custom + другое dropdown time picker choice @@ -5156,6 +5263,7 @@ SimpleX серверы не могут получить доступ к Ваше days + дней time unit @@ -5235,6 +5343,7 @@ SimpleX серверы не могут получить доступ к Ваше hours + часов time unit @@ -5344,6 +5453,7 @@ SimpleX серверы не могут получить доступ к Ваше minutes + минут time unit @@ -5363,6 +5473,7 @@ SimpleX серверы не могут получить доступ к Ваше months + месяцев time unit @@ -5385,6 +5496,10 @@ SimpleX серверы не могут получить доступ к Ваше нет e2e шифрования No comment provided by engineer. + + no text + copied message info in history + observer читатель @@ -5463,6 +5578,7 @@ SimpleX серверы не могут получить доступ к Ваше seconds + секунд time unit @@ -5542,6 +5658,7 @@ SimpleX серверы не могут получить доступ к Ваше weeks + недель time unit 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 d9b35f2799..73b53d84fb 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 @@ -2847,10 +2847,6 @@ 未找到群组! No comment provided by engineer. - - No message details - No comment provided by engineer. - No permission to record voice message 没有录制语音消息的权限 @@ -4571,7 +4567,7 @@ To connect, please ask your contact to create another connection link and check Welcome message - 欢迎信息 + 欢迎消息 No comment provided by engineer. @@ -5003,7 +4999,7 @@ SimpleX 服务器无法看到您的资料。 always - 一直 + 始终 pref value @@ -5391,6 +5387,10 @@ SimpleX 服务器无法看到您的资料。 无端到端加密 No comment provided by engineer. + + no text + copied message info in history + observer 观察者 diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index b477e8a5b6..c62ceb3d35 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_kurzíva_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- 5 minutové hlasové zprávy.\n- vlastní čas mizení.\n- historie úprav."; + /* No comment provided by engineer. */ ", " = ", "; @@ -88,6 +91,12 @@ /* No comment provided by engineer. */ "%@" = "%@"; +/* No comment provided by engineer. */ +"%@ (current)" = "%@ (aktuální)"; + +/* copied message info */ +"%@ (current):" = "%@ (aktuální):"; + /* No comment provided by engineer. */ "%@ / %@" = "%@ / %@"; @@ -109,6 +118,9 @@ /* notification title */ "%@ wants to connect!" = "%@ se chce připojit!"; +/* copied message info */ +"%@:" = "%@:"; + /* time interval */ "%d days" = "%d dní"; @@ -127,6 +139,9 @@ /* integrity error chat item */ "%d skipped message(s)" = "%d přeskočené zprávy"; +/* time interval */ +"%d weeks" = "%d týdnů"; + /* No comment provided by engineer. */ "%lld" = "%lld"; @@ -181,24 +196,42 @@ /* No comment provided by engineer. */ "`a + b`" = "\\`a + b`"; +/* email text */ +"

Hi!

\n

Connect to me via SimpleX Chat

" = "

Ahoj!

\n

Připojte se ke mne přes SimpleX Chat

"; + /* No comment provided by engineer. */ "~strike~" = "\\~stávka~"; +/* No comment provided by engineer. */ +"0s" = "0s"; + /* time interval */ "1 day" = "1 den"; /* time interval */ "1 hour" = "1 hodina"; +/* No comment provided by engineer. */ +"1 minute" = "1 minutu"; + /* time interval */ "1 month" = "1 měsíc"; /* time interval */ "1 week" = "1 týden"; +/* No comment provided by engineer. */ +"1-time link" = "Jednorázový odkaz"; + +/* No comment provided by engineer. */ +"5 minutes" = "5 minut"; + /* No comment provided by engineer. */ "6" = "6"; +/* No comment provided by engineer. */ +"30 seconds" = "30 vteřin"; + /* notification title */ "A new contact" = "Nový kontakt"; @@ -217,6 +250,9 @@ /* No comment provided by engineer. */ "About SimpleX" = "O SimpleX"; +/* No comment provided by engineer. */ +"About SimpleX address" = "O SimpleX adrese"; + /* No comment provided by engineer. */ "About SimpleX Chat" = "O SimpleX chat"; @@ -242,6 +278,9 @@ /* call status */ "accepted call" = "přijatý hovor"; +/* 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." = "Přidejte adresu do svého profilu, aby ji vaše kontakty mohly sdílet s dalšími lidmi. Aktualizace profilu bude zaslána vašim kontaktům."; + /* No comment provided by engineer. */ "Add preset servers" = "Přidejte přednastavené servery"; @@ -260,6 +299,9 @@ /* No comment provided by engineer. */ "Add welcome message" = "Přidat uvítací zprávu"; +/* No comment provided by engineer. */ +"Address" = "Adresa"; + /* member role */ "admin" = "správce"; @@ -269,15 +311,27 @@ /* No comment provided by engineer. */ "Advanced network settings" = "Pokročilá nastavení sítě"; +/* No comment provided by engineer. */ +"All app data is deleted." = "Všechna data aplikace jsou smazána."; + /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Všechny chaty a zprávy budou smazány – tuto akci nelze vrátit zpět!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Všechna data se při zadání vymažou."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Všichni členové skupiny zůstanou připojeni."; /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Všechny zprávy budou smazány – tuto akci nelze vrátit zpět! Zprávy budou smazány POUZE pro vás."; +/* No comment provided by engineer. */ +"All your contacts will remain connected." = "Všechny vaše kontakty zůstanou připojeny."; + +/* No comment provided by engineer. */ +"All your contacts will remain connected. Profile update will be sent to your contacts." = "Všechny vaše kontakty zůstanou připojeny. Aktualizace profilu bude odeslána vašim kontaktům."; + /* No comment provided by engineer. */ "Allow" = "Povolit"; @@ -290,6 +344,12 @@ /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you." = "Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí."; +/* No comment provided by engineer. */ +"Allow message reactions only if your contact allows them." = "Povolit reakce na zprávy, pokud je váš kontakt povolí."; + +/* No comment provided by engineer. */ +"Allow message reactions." = "Povolit reakce na zprávy."; + /* No comment provided by engineer. */ "Allow sending direct messages to members." = "Povolit odesílání přímých zpráv členům."; @@ -308,6 +368,9 @@ /* No comment provided by engineer. */ "Allow voice messages?" = "Povolit hlasové zprávy?"; +/* No comment provided by engineer. */ +"Allow your contacts adding message reactions." = "Povolit kontaktům přidávat reakce na zprávy."; + /* No comment provided by engineer. */ "Allow your contacts to call you." = "Povolte svým kontaktům vám volat."; @@ -329,6 +392,9 @@ /* No comment provided by engineer. */ "Always use relay" = "Spojení přes relé"; +/* No comment provided by engineer. */ +"An empty chat profile with the provided name is created, and the app opens as usual." = "Vytvořit prázdný chat profil se zadaným názvem a otevřít aplikaci jako obvykle."; + /* No comment provided by engineer. */ "Answer call" = "Přijmout hovor"; @@ -341,6 +407,9 @@ /* No comment provided by engineer. */ "App passcode" = "Heslo aplikace"; +/* No comment provided by engineer. */ +"App passcode is replaced with self-destruct passcode." = "Přístupový kód aplikace je nahrazen sebedestrukčním přístupovým heslem."; + /* No comment provided by engineer. */ "App version" = "Verze aplikace"; @@ -380,6 +449,9 @@ /* No comment provided by engineer. */ "Authentication unavailable" = "Ověřování není k dispozici"; +/* No comment provided by engineer. */ +"Auto-accept" = "Automaticky přijmout"; + /* No comment provided by engineer. */ "Auto-accept contact requests" = "Automatické přijímání žádostí o kontakt"; @@ -401,9 +473,15 @@ /* No comment provided by engineer. */ "Bad message ID" = "Špatné ID zprávy"; +/* No comment provided by engineer. */ +"Better messages" = "Lepší zprávy"; + /* No comment provided by engineer. */ "bold" = "tučně"; +/* No comment provided by engineer. */ +"Both you and your contact can add message reactions." = "Vy i váš kontakt můžete přidávat reakce na zprávy."; + /* No comment provided by engineer. */ "Both you and your contact can irreversibly delete sent messages." = "Vy i váš kontakt můžete nevratně mazat odeslané zprávy."; @@ -479,6 +557,13 @@ /* No comment provided by engineer. */ "Change role" = "Změnit roli"; +/* authentication reason */ +"Change self-destruct mode" = "Změnit režim sebedestrukce"; + +/* authentication reason + set passcode view */ +"Change self-destruct passcode" = "Změnit sebedestrukční heslo"; + /* chat item text */ "changed address for you" = "změnila se vaše adresa"; @@ -686,6 +771,9 @@ /* No comment provided by engineer. */ "Contacts can mark messages for deletion; you will be able to view them." = "Kontakty mohou označit zprávy ke smazání; vy je budete moci zobrazit."; +/* No comment provided by engineer. */ +"Continue" = "Pokračovat"; + /* chat item action */ "Copy" = "Kopírovat"; @@ -695,6 +783,9 @@ /* No comment provided by engineer. */ "Create" = "Vytvořit"; +/* No comment provided by engineer. */ +"Create an address to let people connect with you." = "Vytvořit adresu, aby se s vámi lidé mohli spojit."; + /* server test step */ "Create file" = "Vytvořit soubor"; @@ -713,6 +804,9 @@ /* No comment provided by engineer. */ "Create secret group" = "Vytvořit tajnou skupinu"; +/* No comment provided by engineer. */ +"Create SimpleX address" = "Vytvořit SimpleX adresu"; + /* No comment provided by engineer. */ "Create your profile" = "Vytvořte si profil"; @@ -731,6 +825,12 @@ /* No comment provided by engineer. */ "Currently maximum supported file size is %@." = "Aktuálně maximální podporovaná velikost souboru je %@."; +/* dropdown time picker choice */ +"custom" = "vlastní"; + +/* No comment provided by engineer. */ +"Custom time" = "Vlastní čas"; + /* No comment provided by engineer. */ "Dark" = "Tmavý"; @@ -752,6 +852,9 @@ /* No comment provided by engineer. */ "Database ID" = "ID databáze"; +/* copied message info */ +"Database ID: %d" = "ID databáze: %d"; + /* No comment provided by engineer. */ "Database IDs and Transport isolation option." = "ID databáze a možnost Izolace přenosu."; @@ -788,6 +891,9 @@ /* No comment provided by engineer. */ "Database will be migrated when the app restarts" = "Databáze bude přenesena po restartu aplikace"; +/* time unit */ +"days" = "dní"; + /* No comment provided by engineer. */ "Decentralized" = "Decentralizované"; @@ -905,6 +1011,12 @@ /* deleted chat item */ "deleted" = "smazáno"; +/* No comment provided by engineer. */ +"Deleted at" = "Smazáno v"; + +/* copied message info */ +"Deleted at: %@" = "Smazáno v: %@"; + /* rcv group event chat item */ "deleted group" = "odstraněna skupina"; @@ -944,6 +1056,9 @@ /* authentication reason */ "Disable SimpleX Lock" = "Vypnutí zámku SimpleX"; +/* No comment provided by engineer. */ +"Disappearing message" = "Mizící zpráva"; + /* chat feature */ "Disappearing messages" = "Mizící zprávy"; @@ -953,6 +1068,12 @@ /* No comment provided by engineer. */ "Disappearing messages are prohibited in this group." = "Mizící zprávy jsou v této skupině zakázány."; +/* No comment provided by engineer. */ +"Disappears at" = "Zmizí v"; + +/* copied message info */ +"Disappears at: %@" = "Zmizí v: %@"; + /* server test step */ "Disconnect" = "Odpojit"; @@ -968,6 +1089,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NEpoužívejte SimpleX pro tísňová volání."; +/* No comment provided by engineer. */ +"Don't create address" = "Nevytvářet adresu"; + /* No comment provided by engineer. */ "Don't show again" = "Znovu neukazuj"; @@ -983,6 +1107,9 @@ /* integrity error chat item */ "duplicate message" = "duplicitní zpráva"; +/* No comment provided by engineer. */ +"Duration" = "Trvání"; + /* No comment provided by engineer. */ "e2e encrypted" = "e2e šifrované"; @@ -1010,6 +1137,12 @@ /* No comment provided by engineer. */ "Enable periodic notifications?" = "Povolit pravidelná oznámení?"; +/* No comment provided by engineer. */ +"Enable self-destruct" = "Povolit sebedestrukci"; + +/* set passcode view */ +"Enable self-destruct passcode" = "Povolit sebedestrukční heslo"; + /* authentication reason */ "Enable SimpleX Lock" = "Zapnutí zámku SimpleX"; @@ -1073,6 +1206,12 @@ /* No comment provided by engineer. */ "Enter server manually" = "Zadejte server ručně"; +/* placeholder */ +"Enter welcome message…" = "Zadat uvítací zprávu…"; + +/* placeholder */ +"Enter welcome message… (optional)" = "Zadat uvítací zprávu... (volitelně)"; + /* No comment provided by engineer. */ "error" = "chyba"; @@ -1175,6 +1314,9 @@ /* No comment provided by engineer. */ "Error saving user password" = "Chyba ukládání hesla uživatele"; +/* No comment provided by engineer. */ +"Error sending email" = "Chyba odesílání e-mailu"; + /* No comment provided by engineer. */ "Error sending message" = "Chyba při odesílání zprávy"; @@ -1247,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "Soubory a média"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "Konečně je máme! 🚀"; + /* No comment provided by engineer. */ "For console" = "Pro konzoli"; @@ -1301,6 +1446,9 @@ /* No comment provided by engineer. */ "Group links" = "Odkazy na skupiny"; +/* No comment provided by engineer. */ +"Group members can add message reactions." = "Členové skupin mohou přidávat reakce na zprávy."; + /* No comment provided by engineer. */ "Group members can irreversibly delete sent messages." = "Členové skupiny mohou nevratně mazat odeslané zprávy."; @@ -1364,6 +1512,12 @@ /* No comment provided by engineer. */ "Hide:" = "Skrýt:"; +/* copied message info */ +"History" = "Historie"; + +/* time unit */ +"hours" = "hodin"; + /* No comment provided by engineer. */ "How it works" = "Jak to funguje"; @@ -1382,9 +1536,18 @@ /* No comment provided by engineer. */ "ICE servers (one per line)" = "Servery ICE (jeden na řádek)"; +/* No comment provided by engineer. */ +"If you can't meet in person, show QR code in a video call, or share the link." = "Pokud se nemůžete setkat osobně, zobrazte QR kód ve videohovoru nebo sdílejte odkaz."; + /* No comment provided by engineer. */ "If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Pokud se nemůžete setkat osobně, můžete **naskenovat QR kód během videohovoru**, nebo váš kontakt může sdílet odkaz na pozvánku."; +/* No comment provided by engineer. */ +"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Pokud tento přístupový kód zadáte při otevření aplikace, všechna data budou nenávratně smazána!"; + +/* No comment provided by engineer. */ +"If you enter your self-destruct passcode while opening the app:" = "Pokud při otevření aplikace zadáte sebedestrukční heslo:"; + /* No comment provided by engineer. */ "If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "Pokud potřebujete chat používat nyní, klepněte na **Udělat později** níže (migrace databáze vám bude nabídnuta po restartování aplikace)."; @@ -1460,6 +1623,9 @@ /* connection level description */ "indirect (%d)" = "nepřímé (%d)"; +/* chat item action */ +"Info" = "Info"; + /* No comment provided by engineer. */ "Initial role" = "Počáteční role"; @@ -1496,6 +1662,9 @@ /* group name */ "invitation to group %@" = "pozvánka do skupiny %@"; +/* No comment provided by engineer. */ +"Invite friends" = "Pozvat přátele"; + /* No comment provided by engineer. */ "Invite members" = "Pozvat členy"; @@ -1547,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "kurzíva"; +/* No comment provided by engineer. */ +"Japanese interface" = "Japonské rozhraní"; + /* No comment provided by engineer. */ "Join" = "Připojte se na"; @@ -1571,6 +1743,9 @@ /* No comment provided by engineer. */ "Large file!" = "Velký soubor!"; +/* No comment provided by engineer. */ +"Learn more" = "Zjistit více"; + /* No comment provided by engineer. */ "Leave" = "Opustit"; @@ -1583,6 +1758,9 @@ /* rcv group event chat item */ "left" = "opustil"; +/* email subject */ +"Let's talk in SimpleX Chat" = "Promluvme si v SimpleX Chatu"; + /* No comment provided by engineer. */ "Light" = "Světlo"; @@ -1667,6 +1845,15 @@ /* No comment provided by engineer. */ "Message draft" = "Návrh zprávy"; +/* chat feature */ +"Message reactions" = "Reakce na zprávy"; + +/* No comment provided by engineer. */ +"Message reactions are prohibited in this chat." = "Reakce na zprávy jsou v tomto chatu zakázány."; + +/* No comment provided by engineer. */ +"Message reactions are prohibited in this group." = "Reakce na zprávy jsou v této skupině zakázány."; + /* notification */ "message received" = "zpráva přijata"; @@ -1694,6 +1881,9 @@ /* No comment provided by engineer. */ "Migrations: %@" = "Migrace: %@"; +/* time unit */ +"minutes" = "minut"; + /* call status */ "missed call" = "zmeškané volání"; @@ -1703,9 +1893,18 @@ /* moderated chat item */ "moderated" = "moderované"; +/* No comment provided by engineer. */ +"Moderated at" = "Upraveno v"; + +/* copied message info */ +"Moderated at: %@" = "Upraveno v: %@"; + /* No comment provided by engineer. */ "moderated by %@" = "moderovaný %@"; +/* time unit */ +"months" = "měsíců"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Další vylepšení se chystají již brzy!"; @@ -1745,6 +1944,9 @@ /* No comment provided by engineer. */ "New database archive" = "Archiv nové databáze"; +/* No comment provided by engineer. */ +"New display name" = "Nově zobrazované jméno"; + /* No comment provided by engineer. */ "New in %@" = "Nový V %@"; @@ -1854,6 +2056,9 @@ /* No comment provided by engineer. */ "Only group owners can enable voice messages." = "Pouze majitelé skupin mohou povolit zasílání hlasových zpráv."; +/* No comment provided by engineer. */ +"Only you can add message reactions." = "Reakce na zprávy můžete přidávat pouze vy."; + /* No comment provided by engineer. */ "Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání)."; @@ -1866,6 +2071,9 @@ /* No comment provided by engineer. */ "Only you can send voice messages." = "Hlasové zprávy můžete posílat pouze vy."; +/* No comment provided by engineer. */ +"Only your contact can add message reactions." = "Reakce na zprávy může přidávat pouze váš kontakt."; + /* No comment provided by engineer. */ "Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání)."; @@ -1893,6 +2101,9 @@ /* No comment provided by engineer. */ "Open-source protocol and code – anybody can run the servers." = "Protokol a kód s otevřeným zdrojovým kódem - servery může provozovat kdokoli."; +/* No comment provided by engineer. */ +"Opening database…" = "Otvírání databáze…"; + /* No comment provided by engineer. */ "Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené."; @@ -2001,6 +2212,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Přednastavená adresa serveru"; +/* No comment provided by engineer. */ +"Preview" = "Náhled"; + /* No comment provided by engineer. */ "Privacy & security" = "Ochrana osobních údajů a zabezpečení"; @@ -2019,12 +2233,21 @@ /* No comment provided by engineer. */ "Profile password" = "Heslo profilu"; +/* No comment provided by engineer. */ +"Profile update will be sent to your contacts." = "Aktualizace profilu bude zaslána vašim kontaktům."; + /* No comment provided by engineer. */ "Prohibit audio/video calls." = "Zákaz audio/video hovorů."; /* No comment provided by engineer. */ "Prohibit irreversible message deletion." = "Zakázat nevratné mazání zpráv."; +/* No comment provided by engineer. */ +"Prohibit message reactions." = "Zakázat reakce na zprávy."; + +/* No comment provided by engineer. */ +"Prohibit messages reactions." = "Zakázat reakce na zprávy."; + /* No comment provided by engineer. */ "Prohibit sending direct messages to members." = "Zakázat odesílání přímých zpráv členům."; @@ -2049,9 +2272,21 @@ /* No comment provided by engineer. */ "Rate the app" = "Ohodnoťte aplikaci"; +/* chat item menu */ +"React..." = "Reagovat..."; + /* No comment provided by engineer. */ "Read" = "Číst"; +/* No comment provided by engineer. */ +"Read more" = "Přečíst více"; + +/* No comment provided by engineer. */ +"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Další informace naleznete v [Uživatelské příručce](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)."; + +/* No comment provided by engineer. */ +"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Přečtěte si více v [Uživatelské příručce](https://simplex.chat/docs/guide/readme.html#connect-to-friends)."; + /* No comment provided by engineer. */ "Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Přečtěte si více v našem [GitHub repozitáři](https://github.com/simplex-chat/simplex-chat#readme)."; @@ -2061,12 +2296,21 @@ /* No comment provided by engineer. */ "received answer…" = "obdržel odpověď…"; +/* No comment provided by engineer. */ +"Received at" = "Přijato v"; + +/* copied message info */ +"Received at: %@" = "Přijato v: %@"; + /* No comment provided by engineer. */ "received confirmation…" = "obdržel potvrzení…"; /* notification */ "Received file event" = "Událost přijatého souboru"; +/* message info title */ +"Received message" = "Přijatá zpráva"; + /* No comment provided by engineer. */ "Receiving file will be stopped." = "Příjem souboru bude zastaven."; @@ -2076,6 +2320,12 @@ /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Příjemci uvidí aktualizace během jejich psaní."; +/* No comment provided by engineer. */ +"Record updated at" = "Záznam aktualizován v"; + +/* copied message info */ +"Record updated at: %@" = "Záznam aktualizován v: %@"; + /* No comment provided by engineer. */ "Reduced battery usage" = "Snížení spotřeby baterie"; @@ -2190,6 +2440,9 @@ /* No comment provided by engineer. */ "Save archive" = "Uložit archiv"; +/* No comment provided by engineer. */ +"Save auto-accept settings" = "Uložit nastavení automatického přijímání"; + /* No comment provided by engineer. */ "Save group profile" = "Uložení profilu skupiny"; @@ -2211,6 +2464,9 @@ /* No comment provided by engineer. */ "Save servers?" = "Uložit servery?"; +/* No comment provided by engineer. */ +"Save settings?" = "Uložit nastavení?"; + /* No comment provided by engineer. */ "Save welcome message?" = "Uložit uvítací zprávu?"; @@ -2235,6 +2491,9 @@ /* network option */ "sec" = "sek"; +/* time unit */ +"seconds" = "vteřin"; + /* No comment provided by engineer. */ "secret" = "tajný"; @@ -2247,6 +2506,21 @@ /* No comment provided by engineer. */ "Security code" = "Bezpečnostní kód"; +/* No comment provided by engineer. */ +"Select" = "Vybrat"; + +/* No comment provided by engineer. */ +"Self-destruct" = "Sebedestrukce"; + +/* No comment provided by engineer. */ +"Self-destruct passcode" = "Samodestrukční heslo"; + +/* No comment provided by engineer. */ +"Self-destruct passcode changed!" = "Heslo pro sebedestrukci změněno!"; + +/* No comment provided by engineer. */ +"Self-destruct passcode enabled!" = "Sebedestrukční heslo povoleno!"; + /* No comment provided by engineer. */ "Send" = "Poslat"; @@ -2256,6 +2530,9 @@ /* No comment provided by engineer. */ "Send direct message" = "Odeslat přímou zprávu"; +/* No comment provided by engineer. */ +"Send disappearing message" = "Poslat mizící zprávu"; + /* No comment provided by engineer. */ "Send link previews" = "Odesílání náhledů odkazů"; @@ -2286,9 +2563,18 @@ /* No comment provided by engineer. */ "Sending via" = "Odesílání přes"; +/* No comment provided by engineer. */ +"Sent at" = "Posláno v"; + +/* copied message info */ +"Sent at: %@" = "Posláno v: % @"; + /* notification */ "Sent file event" = "Odeslaná událost souboru"; +/* message info title */ +"Sent message" = "Poslaná zpráva"; + /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Odeslané zprávy se po uplynutí nastavené doby odstraní."; @@ -2316,6 +2602,9 @@ /* No comment provided by engineer. */ "Set it instead of system authentication." = "Nastavte jej namísto ověřování systému."; +/* No comment provided by engineer. */ +"Set passcode" = "Nastavit heslo"; + /* No comment provided by engineer. */ "Set passphrase to export" = "Nastavení přístupové fráze pro export"; @@ -2331,12 +2620,24 @@ /* chat item action */ "Share" = "Sdílet"; +/* No comment provided by engineer. */ +"Share 1-time link" = "Sdílet jednorázovou pozvánku"; + +/* No comment provided by engineer. */ +"Share address" = "Sdílet adresu"; + +/* No comment provided by engineer. */ +"Share address with contacts?" = "Sdílet adresu s kontakty?"; + /* No comment provided by engineer. */ "Share link" = "Sdílet odkaz"; /* No comment provided by engineer. */ "Share one-time invitation link" = "Jednorázový zvací odkaz"; +/* No comment provided by engineer. */ +"Share with contacts" = "Sdílet s kontakty"; + /* No comment provided by engineer. */ "Show calls in phone history" = "Ukaž hovory v historii telefonu"; @@ -2349,6 +2650,12 @@ /* No comment provided by engineer. */ "Show:" = "Zobrazit:"; +/* No comment provided by engineer. */ +"SimpleX address" = "Adresa SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Address" = "SimpleX Adresa"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "Zabezpečení SimpleX chatu bylo auditováno společností Trail of Bits."; @@ -2424,6 +2731,12 @@ /* No comment provided by engineer. */ "Stop sending file?" = "Zastavit odesílání souboru?"; +/* No comment provided by engineer. */ +"Stop sharing" = "Přestat sdílet"; + +/* No comment provided by engineer. */ +"Stop sharing address?" = "Přestat sdílet adresu?"; + /* authentication reason */ "Stop SimpleX" = "Zastavit SimpleX"; @@ -2577,6 +2890,9 @@ /* No comment provided by engineer. */ "To ask any questions and to receive updates:" = "Chcete-li položit jakékoli dotazy a dostávat aktuality:"; +/* No comment provided by engineer. */ +"To connect, your contact can scan QR code or use the link in the app." = "Pro připojení může váš kontakt naskenovat QR kód, nebo použít odkaz v aplikaci."; + /* No comment provided by engineer. */ "To find the profile used for an incognito connection, tap the contact or group name on top of the chat." = "Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části chatu."; @@ -2640,6 +2956,9 @@ /* No comment provided by engineer. */ "Unhide profile" = "Odkrýt profil"; +/* No comment provided by engineer. */ +"Unit" = "Jednotka"; + /* connection info */ "unknown" = "neznámý"; @@ -2808,6 +3127,9 @@ /* No comment provided by engineer. */ "WebRTC ICE servers" = "WebRTC servery ICE"; +/* time unit */ +"weeks" = "týdnů"; + /* No comment provided by engineer. */ "Welcome %@!" = "Vítejte %@!"; @@ -2820,6 +3142,9 @@ /* No comment provided by engineer. */ "When available" = "Když je k dispozici"; +/* No comment provided by engineer. */ +"When people request to connect, you can accept or reject it." = "Když někdo požádá o připojení, můžete žádost přijmout nebo odmítnout."; + /* 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." = "Pokud s někým sdílíte inkognito profil, bude tento profil použit pro skupiny, do kterých vás pozve."; @@ -2871,6 +3196,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Můžete se také připojit kliknutím na odkaz. Pokud se otevře v prohlížeči, klikněte na tlačítko **Otevřít v mobilní aplikaci**."; +/* No comment provided by engineer. */ +"You can create it later" = "Můžete vytvořit později"; + /* No comment provided by engineer. */ "You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.\nSimpleX zámek musí být povolen."; @@ -2883,6 +3211,9 @@ /* No comment provided by engineer. */ "You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." = "Můžete sdílet odkaz nebo QR kód - ke skupině se bude moci připojit kdokoli. O členy skupiny nepřijdete, pokud ji později odstraníte."; +/* No comment provided by engineer. */ +"You can share this address with your contacts to let them connect with **%@**." = "Tuto adresu můžete sdílet s vašimi kontakty, abyse se mohli spojit s **%@**."; + /* No comment provided by engineer. */ "You can share your address as a link or QR code - anybody can connect to you." = "Můžete sdílet svou adresu jako odkaz nebo jako QR kód - kdokoli se k vám bude moci připojit."; @@ -3021,6 +3352,12 @@ /* No comment provided by engineer. */ "Your contacts can allow full message deletion." = "Vaše kontakty mohou povolit úplné mazání zpráv."; +/* No comment provided by engineer. */ +"Your contacts in SimpleX will see it.\nYou can change it in Settings." = "Vaše kontakty v SimpleX ji uvidí.\nMůžete ji změnit v Nastavení."; + +/* No comment provided by engineer. */ +"Your contacts will remain connected." = "Vaše kontakty zůstanou připojeny."; + /* No comment provided by engineer. */ "Your current chat database will be DELETED and REPLACED with the imported one." = "Vaše aktuální chat databáze bude ODSTRANĚNA a NAHRAZENA importovanou."; @@ -3057,6 +3394,9 @@ /* No comment provided by engineer. */ "Your settings" = "Vaše nastavení"; +/* No comment provided by engineer. */ +"Your SimpleX address" = "Vaše SimpleX adresa"; + /* No comment provided by engineer. */ "Your SMP servers" = "Vaše servery SMP"; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index dcb12a440b..a29ebc64b5 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_kursiv_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten\n- Zeit für verschwindende Nachrichten anpassen\n- Vergangenheit bearbeiten"; + /* No comment provided by engineer. */ ", " = ", "; @@ -88,6 +91,12 @@ /* No comment provided by engineer. */ "%@" = "%@"; +/* No comment provided by engineer. */ +"%@ (current)" = "%@ (aktuell)"; + +/* copied message info */ +"%@ (current):" = "%@ (aktuell):"; + /* No comment provided by engineer. */ "%@ / %@" = "%@ / %@"; @@ -202,6 +211,9 @@ /* time interval */ "1 hour" = "1 Stunde"; +/* No comment provided by engineer. */ +"1 minute" = "1 Minute"; + /* time interval */ "1 month" = "monatlich"; @@ -211,9 +223,15 @@ /* No comment provided by engineer. */ "1-time link" = "Einmal-Link"; +/* No comment provided by engineer. */ +"5 minutes" = "5 Minuten"; + /* No comment provided by engineer. */ "6" = "6"; +/* No comment provided by engineer. */ +"30 seconds" = "30 Sekunden"; + /* notification title */ "A new contact" = "Ein neuer Kontakt"; @@ -299,6 +317,9 @@ /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Alle Chats und Nachrichten werden gelöscht! Dies kann nicht rückgängig gemacht werden!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Sobald es eingegeben wird, werden alle Daten gelöscht."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Alle Gruppenmitglieder bleiben verbunden."; @@ -323,6 +344,12 @@ /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you." = "Erlauben Sie das unwiederbringliche Löschen von Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt."; +/* No comment provided by engineer. */ +"Allow message reactions only if your contact allows them." = "Reaktionen auf Nachrichten sind nur möglich, falls Ihr Kontakt dies erlaubt."; + +/* No comment provided by engineer. */ +"Allow message reactions." = "Reaktionen auf Nachrichten erlauben."; + /* No comment provided by engineer. */ "Allow sending direct messages to members." = "Das Senden von Direktnachrichten an Gruppenmitglieder erlauben."; @@ -341,6 +368,9 @@ /* No comment provided by engineer. */ "Allow voice messages?" = "Sprachnachricht erlauben?"; +/* No comment provided by engineer. */ +"Allow your contacts adding message reactions." = "Erlauben Sie Ihren Kontakten Reaktionen auf Nachrichten zu geben."; + /* No comment provided by engineer. */ "Allow your contacts to call you." = "Erlaubt Ihren Kontakten Sie anzurufen."; @@ -443,9 +473,15 @@ /* No comment provided by engineer. */ "Bad message ID" = "Falsche Nachrichten-ID"; +/* No comment provided by engineer. */ +"Better messages" = "Verbesserungen bei Nachrichten"; + /* No comment provided by engineer. */ "bold" = "fett"; +/* No comment provided by engineer. */ +"Both you and your contact can add message reactions." = "Sowohl Sie, als auch Ihr Kontakt können Reaktionen auf Nachrichten geben."; + /* No comment provided by engineer. */ "Both you and your contact can irreversibly delete sent messages." = "Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen."; @@ -789,6 +825,12 @@ /* No comment provided by engineer. */ "Currently maximum supported file size is %@." = "Die derzeit maximal unterstützte Dateigröße beträgt %@."; +/* dropdown time picker choice */ +"custom" = "Benutzerdefiniert"; + +/* No comment provided by engineer. */ +"Custom time" = "Zeit anpassen"; + /* No comment provided by engineer. */ "Dark" = "Dunkel"; @@ -849,6 +891,9 @@ /* No comment provided by engineer. */ "Database will be migrated when the app restarts" = "Die Datenbank wird beim nächsten Start der App migriert"; +/* time unit */ +"days" = "Tage"; + /* No comment provided by engineer. */ "Decentralized" = "Dezentral"; @@ -966,6 +1011,12 @@ /* deleted chat item */ "deleted" = "Gelöscht"; +/* No comment provided by engineer. */ +"Deleted at" = "Gelöscht um"; + +/* copied message info */ +"Deleted at: %@" = "Gelöscht um: %@"; + /* rcv group event chat item */ "deleted group" = "Gruppe gelöscht"; @@ -1005,6 +1056,9 @@ /* authentication reason */ "Disable SimpleX Lock" = "SimpleX Sperre deaktivieren"; +/* No comment provided by engineer. */ +"Disappearing message" = "Verschwindende Nachricht"; + /* chat feature */ "Disappearing messages" = "verschwindende Nachrichten"; @@ -1014,6 +1068,12 @@ /* No comment provided by engineer. */ "Disappearing messages are prohibited in this group." = "In dieser Gruppe sind verschwindende Nachrichten nicht erlaubt."; +/* No comment provided by engineer. */ +"Disappears at" = "Verschwindet um"; + +/* copied message info */ +"Disappears at: %@" = "Verschwindet um: %@"; + /* server test step */ "Disconnect" = "Trennen"; @@ -1047,6 +1107,9 @@ /* integrity error chat item */ "duplicate message" = "Doppelte Nachricht"; +/* No comment provided by engineer. */ +"Duration" = "Dauer"; + /* No comment provided by engineer. */ "e2e encrypted" = "E2E-verschlüsselt"; @@ -1326,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "Dateien & Medien"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "Endlich haben wir sie! 🚀"; + /* No comment provided by engineer. */ "For console" = "Für Konsole"; @@ -1380,6 +1446,9 @@ /* No comment provided by engineer. */ "Group links" = "Gruppen-Links"; +/* No comment provided by engineer. */ +"Group members can add message reactions." = "Gruppenmitglieder können eine Reaktion auf Nachrichten geben."; + /* No comment provided by engineer. */ "Group members can irreversibly delete sent messages." = "Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen."; @@ -1443,6 +1512,12 @@ /* No comment provided by engineer. */ "Hide:" = "Verberge:"; +/* copied message info */ +"History" = "Vergangenheit"; + +/* time unit */ +"hours" = "Stunden"; + /* No comment provided by engineer. */ "How it works" = "Wie es funktioniert"; @@ -1548,6 +1623,9 @@ /* connection level description */ "indirect (%d)" = "indirekt (%d)"; +/* chat item action */ +"Info" = "Information"; + /* No comment provided by engineer. */ "Initial role" = "Anfängliche Rolle"; @@ -1638,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "kursiv"; +/* No comment provided by engineer. */ +"Japanese interface" = "Japanische Benutzeroberfläche"; + /* No comment provided by engineer. */ "Join" = "Beitreten"; @@ -1764,6 +1845,15 @@ /* No comment provided by engineer. */ "Message draft" = "Nachrichtenentwurf"; +/* chat feature */ +"Message reactions" = "Reaktionen auf Nachrichten"; + +/* No comment provided by engineer. */ +"Message reactions are prohibited in this chat." = "In diesem Chat sind Reaktionen auf Nachrichten nicht erlaubt."; + +/* No comment provided by engineer. */ +"Message reactions are prohibited in this group." = "In dieser Gruppe sind Reaktionen auf Nachrichten nicht erlaubt."; + /* notification */ "message received" = "Nachricht empfangen"; @@ -1791,6 +1881,9 @@ /* No comment provided by engineer. */ "Migrations: %@" = "Migrationen: %@"; +/* time unit */ +"minutes" = "Minuten"; + /* call status */ "missed call" = "Anruf verpasst"; @@ -1800,9 +1893,18 @@ /* moderated chat item */ "moderated" = "Moderiert"; +/* No comment provided by engineer. */ +"Moderated at" = "Moderiert um"; + +/* copied message info */ +"Moderated at: %@" = "Moderiert um: %@"; + /* No comment provided by engineer. */ "moderated by %@" = "Von %@ moderiert"; +/* time unit */ +"months" = "Monate"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Weitere Verbesserungen sind bald verfügbar!"; @@ -1842,6 +1944,9 @@ /* No comment provided by engineer. */ "New database archive" = "Neues Datenbankarchiv"; +/* No comment provided by engineer. */ +"New display name" = "Neuer Anzeigename"; + /* No comment provided by engineer. */ "New in %@" = "Neu in %@"; @@ -1951,6 +2056,9 @@ /* No comment provided by engineer. */ "Only group owners can enable voice messages." = "Sprachnachrichten können nur von Gruppen-Eigentümern aktiviert werden."; +/* No comment provided by engineer. */ +"Only you can add message reactions." = "Nur Sie können Reaktionen auf Nachrichten geben."; + /* No comment provided by engineer. */ "Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren)."; @@ -1963,6 +2071,9 @@ /* No comment provided by engineer. */ "Only you can send voice messages." = "Nur Sie können Sprachnachrichten versenden."; +/* No comment provided by engineer. */ +"Only your contact can add message reactions." = "Nur Ihr Kontakt kann Reaktionen auf Nachrichten geben."; + /* No comment provided by engineer. */ "Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren)."; @@ -2131,6 +2242,12 @@ /* No comment provided by engineer. */ "Prohibit irreversible message deletion." = "Unwiederbringliches löschen von Nachrichten nicht erlauben."; +/* No comment provided by engineer. */ +"Prohibit message reactions." = "Reaktionen auf Nachrichten nicht erlauben."; + +/* No comment provided by engineer. */ +"Prohibit messages reactions." = "Reaktionen auf Nachrichten nicht erlauben."; + /* No comment provided by engineer. */ "Prohibit sending direct messages to members." = "Das Senden von Direktnachrichten an Gruppenmitglieder nicht erlauben."; @@ -2155,9 +2272,15 @@ /* No comment provided by engineer. */ "Rate the app" = "Bewerten Sie die App"; +/* chat item menu */ +"React..." = "Reaktion..."; + /* No comment provided by engineer. */ "Read" = "Gelesen"; +/* No comment provided by engineer. */ +"Read more" = "Mehr erfahren"; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Mehr dazu in der [Benutzeranleitung](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address) lesen."; @@ -2173,6 +2296,12 @@ /* No comment provided by engineer. */ "received answer…" = "Antwort erhalten…"; +/* No comment provided by engineer. */ +"Received at" = "Empfangen um"; + +/* copied message info */ +"Received at: %@" = "Empfangen um: %@"; + /* No comment provided by engineer. */ "received confirmation…" = "Bestätigung erhalten…"; @@ -2191,6 +2320,12 @@ /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Die Empfänger sehen Nachrichtenaktualisierungen, während Sie sie eingeben."; +/* No comment provided by engineer. */ +"Record updated at" = "Datensatz aktualisiert um"; + +/* copied message info */ +"Record updated at: %@" = "Datensatz aktualisiert um: %@"; + /* No comment provided by engineer. */ "Reduced battery usage" = "Reduzierter Batterieverbrauch"; @@ -2356,6 +2491,9 @@ /* network option */ "sec" = "sek"; +/* time unit */ +"seconds" = "Sekunden"; + /* No comment provided by engineer. */ "secret" = "geheim"; @@ -2368,6 +2506,9 @@ /* No comment provided by engineer. */ "Security code" = "Sicherheitscode"; +/* No comment provided by engineer. */ +"Select" = "Auswählen"; + /* No comment provided by engineer. */ "Self-destruct" = "Selbstzerstörung"; @@ -2389,6 +2530,9 @@ /* No comment provided by engineer. */ "Send direct message" = "Direktnachricht senden"; +/* No comment provided by engineer. */ +"Send disappearing message" = "Verschwindende Nachricht senden"; + /* No comment provided by engineer. */ "Send link previews" = "Link-Vorschau senden"; @@ -2419,6 +2563,12 @@ /* No comment provided by engineer. */ "Sending via" = "Senden über"; +/* No comment provided by engineer. */ +"Sent at" = "Gesendet um"; + +/* copied message info */ +"Sent at: %@" = "Gesendet um: %@"; + /* notification */ "Sent file event" = "Datei-Ereignis wurde gesendet"; @@ -2806,6 +2956,9 @@ /* No comment provided by engineer. */ "Unhide profile" = "Verbergen des Profils aufheben"; +/* No comment provided by engineer. */ +"Unit" = "Einheit"; + /* connection info */ "unknown" = "Unbekannt"; @@ -2974,6 +3127,9 @@ /* No comment provided by engineer. */ "WebRTC ICE servers" = "WebRTC ICE-Server"; +/* time unit */ +"weeks" = "Wochen"; + /* No comment provided by engineer. */ "Welcome %@!" = "Willkommen %@!"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index d126b6b2c3..e87a9eeb66 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_italic_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- mensajes de voz de hasta 5 minutos.\n- tiempo personalizado para mensajes temporales.\n- historial de edición."; + /* No comment provided by engineer. */ ", " = ", "; @@ -218,7 +221,7 @@ "1 week" = "una semana"; /* No comment provided by engineer. */ -"1-time link" = "Enlace de un uso"; +"1-time link" = "Enlace un uso"; /* No comment provided by engineer. */ "5 minutes" = "5 minutos"; @@ -309,11 +312,14 @@ "Advanced network settings" = "Configuración avanzada de red"; /* No comment provided by engineer. */ -"All app data is deleted." = "Todos los datos de la aplicación se han eliminado."; +"All app data is deleted." = "Todos los datos de la aplicación se eliminarán."; /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Se eliminarán todos los chats y mensajes. ¡No se puede deshacer!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Al introducirlo todos los datos son borrados."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Todos los miembros del grupo permanecerán conectados."; @@ -399,10 +405,10 @@ "App icon" = "Icono aplicación"; /* No comment provided by engineer. */ -"App passcode" = "Código de acceso a la aplicación"; +"App passcode" = "Código de acceso de la aplicación"; /* No comment provided by engineer. */ -"App passcode is replaced with self-destruct passcode." = "El código de acceso se ha reemplazado por código de autodestrucción."; +"App passcode is replaced with self-destruct passcode." = "El código de acceso será reemplazado por código de autodestrucción."; /* No comment provided by engineer. */ "App version" = "Versión de la aplicación"; @@ -467,6 +473,9 @@ /* No comment provided by engineer. */ "Bad message ID" = "ID de mensaje incorrecto"; +/* No comment provided by engineer. */ +"Better messages" = "Mensajes mejorados"; + /* No comment provided by engineer. */ "bold" = "negrita"; @@ -537,7 +546,7 @@ "Change member role?" = "¿Cambiar el rol del miembro?"; /* authentication reason */ -"Change passcode" = "Cambiar el código de acceso"; +"Change passcode" = "Cambiar código de acceso"; /* No comment provided by engineer. */ "Change receiving address" = "Cambiar servidor de recepción"; @@ -553,7 +562,7 @@ /* authentication reason set passcode view */ -"Change self-destruct passcode" = "Cambiar código de autodestrucción"; +"Change self-destruct passcode" = "Cambiar código autodestrucción"; /* chat item text */ "changed address for you" = "el servidor de envío ha cambiado para tí"; @@ -649,7 +658,7 @@ "Confirm new passphrase…" = "Confirme nueva contraseña…"; /* No comment provided by engineer. */ -"Confirm Passcode" = "Confirmar el código de acceso"; +"Confirm Passcode" = "Confirma Código"; /* No comment provided by engineer. */ "Confirm password" = "Confirmar contraseña"; @@ -808,7 +817,7 @@ "creator" = "creador"; /* No comment provided by engineer. */ -"Current Passcode" = "Código de acceso actual"; +"Current Passcode" = "Código de Acceso"; /* No comment provided by engineer. */ "Current passphrase…" = "Contraseña actual…"; @@ -841,10 +850,10 @@ "Database error" = "Error de la base de datos"; /* No comment provided by engineer. */ -"Database ID" = "ID de la base de datos"; +"Database ID" = "ID de base de datos"; /* copied message info */ -"Database ID: %d" = "ID de la base de datos: %d"; +"Database ID: %d" = "ID de base de datos: %d"; /* No comment provided by engineer. */ "Database IDs and Transport isolation option." = "IDs de la base de datos y opciónes de aislamiento de transporte."; @@ -1003,10 +1012,10 @@ "deleted" = "eliminado"; /* No comment provided by engineer. */ -"Deleted at" = "Eliminado a las"; +"Deleted at" = "Eliminado el"; /* copied message info */ -"Deleted at: %@" = "Eliminado a las: %@"; +"Deleted at: %@" = "Eliminado el: %@"; /* rcv group event chat item */ "deleted group" = "grupo eliminado"; @@ -1060,10 +1069,10 @@ "Disappearing messages are prohibited in this group." = "Los mensajes temporales no están permitidos en este grupo."; /* No comment provided by engineer. */ -"Disappears at" = "Desaparece a las"; +"Disappears at" = "Desaparecerá el"; /* copied message info */ -"Disappears at: %@" = "Desaparece a las: %@"; +"Disappears at: %@" = "Desaparecerá el: %@"; /* server test step */ "Disconnect" = "Desconectar"; @@ -1186,7 +1195,7 @@ "Enter correct passphrase." = "Introduce la contraseña correcta."; /* No comment provided by engineer. */ -"Enter Passcode" = "Introducir código de acceso"; +"Enter Passcode" = "Introduce Código"; /* No comment provided by engineer. */ "Enter passphrase…" = "Introduce la contraseña…"; @@ -1380,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "Archivos y multimedia"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "¡Por fin los tenemos! 🚀"; + /* No comment provided by engineer. */ "For console" = "Para consola"; @@ -1447,7 +1459,7 @@ "Group members can send disappearing messages." = "Los miembros del grupo pueden enviar mensajes temporales."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Los miembros del grupo pueden mandar mensajes de voz."; +"Group members can send voice messages." = "Los miembros del grupo pueden enviar mensajes de voz."; /* notification */ "Group message:" = "Mensaje de grupo:"; @@ -1501,7 +1513,7 @@ "Hide:" = "Ocultar:"; /* copied message info */ -"History" = "Historia"; +"History" = "Historial"; /* time unit */ "hours" = "horas"; @@ -1519,7 +1531,7 @@ "How to use it" = "Guía de uso"; /* No comment provided by engineer. */ -"How to use your servers" = "Cómo usar tus servidores"; +"How to use your servers" = "Cómo usar los servidores"; /* No comment provided by engineer. */ "ICE servers (one per line)" = "Servidores ICE (uno por línea)"; @@ -1534,7 +1546,7 @@ "If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "¡Si introduces este código al abrir la aplicación, todos los datos de la misma se eliminarán de forma irreversible!"; /* No comment provided by engineer. */ -"If you enter your self-destruct passcode while opening the app:" = "Si introduces el código de autodestrucción al abrir la aplicación:"; +"If you enter your self-destruct passcode while opening the app:" = "Si al abrir la aplicación introduces el código de autodestrucción:"; /* No comment provided by engineer. */ "If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "Si necesitas usar el chat ahora pulsa **Hacerlo más tarde** más abajo (se ofrecerá migrar la base de datos cuando se reinicie la aplicación)."; @@ -1582,13 +1594,13 @@ "Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created." = "La función del modo incógnito es proteger la identidad del perfil principal: por cada contacto nuevo se genera un perfil aleatorio."; /* chat list item description */ -"incognito via contact address link" = "Incógnito mediante enlace de dirección del contacto"; +"incognito via contact address link" = "en modo incógnito mediante enlace de dirección del contacto"; /* chat list item description */ -"incognito via group link" = "Incógnito mediante enlace de grupo"; +"incognito via group link" = "en modo incógnito mediante enlace de grupo"; /* chat list item description */ -"incognito via one-time link" = "Incógnito mediante enlace de un uso"; +"incognito via one-time link" = "en modo incógnito mediante enlace de un solo uso"; /* notification */ "Incoming audio call" = "Llamada entrante"; @@ -1612,7 +1624,7 @@ "indirect (%d)" = "indirecta (%d)"; /* chat item action */ -"Info" = "Información"; +"Info" = "Detalles"; /* No comment provided by engineer. */ "Initial role" = "Rol inicial"; @@ -1663,7 +1675,7 @@ "invited" = "ha invitado a"; /* rcv group event chat item */ -"invited %@" = "invitado %@"; +"invited %@" = "ha invitado a %@"; /* chat list item title */ "invited to connect" = "invitado a conectarse"; @@ -1704,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "cursiva"; +/* No comment provided by engineer. */ +"Japanese interface" = "Interfáz en japonés"; + /* No comment provided by engineer. */ "Join" = "Únete"; @@ -1879,10 +1894,10 @@ "moderated" = "moderado"; /* No comment provided by engineer. */ -"Moderated at" = "Moderado a las"; +"Moderated at" = "Moderado el"; /* copied message info */ -"Moderated at: %@" = "Moderado a las: %@"; +"Moderated at: %@" = "Moderado el: %@"; /* No comment provided by engineer. */ "moderated by %@" = "moderado por %@"; @@ -1945,7 +1960,7 @@ "New message" = "mensaje nuevo"; /* No comment provided by engineer. */ -"New Passcode" = "Código de acceso nuevo"; +"New Passcode" = "Código Nuevo"; /* No comment provided by engineer. */ "New passphrase…" = "Contraseña nueva…"; @@ -1974,9 +1989,6 @@ /* No comment provided by engineer. */ "No group!" = "¡Grupo no encontrado!"; -/* No comment provided by engineer. */ -"No message details" = "Sin detalles del mensaje"; - /* No comment provided by engineer. */ "No permission to record voice message" = "Sin permiso para grabar mensajes de voz"; @@ -2030,7 +2042,7 @@ "Onion hosts will be required for connection. Requires enabling VPN." = "Se requieren hosts .onion para la conexión. Requiere activación de la VPN."; /* No comment provided by engineer. */ -"Onion hosts will be used when available. Requires enabling VPN." = "Se usarán hosts .onion cuando estén disponibles. Requiere activación de la VPN."; +"Onion hosts will be used when available. Requires enabling VPN." = "Se usarán hosts .onion si están disponibles. Requiere activación de la VPN."; /* No comment provided by engineer. */ "Onion hosts will not be used." = "No se usarán hosts .onion."; @@ -2171,7 +2183,7 @@ "Please enter the previous password after restoring database backup. This action can not be undone." = "Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer."; /* No comment provided by engineer. */ -"Please remember or store it securely - there is no way to recover a lost passcode!" = "Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código de acceso perdido!"; +"Please remember or store it securely - there is no way to recover a lost passcode!" = "Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código perdido!"; /* No comment provided by engineer. */ "Please report it to the developers." = "Por favor, informa a los desarrolladores."; @@ -2266,6 +2278,9 @@ /* No comment provided by engineer. */ "Read" = "Leer"; +/* No comment provided by engineer. */ +"Read more" = "Saber más"; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Más información en el [Manual de usuario](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)."; @@ -2282,10 +2297,10 @@ "received answer…" = "respuesta recibida…"; /* No comment provided by engineer. */ -"Received at" = "Recibido a las"; +"Received at" = "Recibido el"; /* copied message info */ -"Received at: %@" = "Recibido a las: %@"; +"Received at: %@" = "Recibido el: %@"; /* No comment provided by engineer. */ "received confirmation…" = "confirmación recibida…"; @@ -2294,22 +2309,22 @@ "Received file event" = "Evento de archivo recibido"; /* message info title */ -"Received message" = "Mensaje recibido"; +"Received message" = "Mensaje entrante"; /* No comment provided by engineer. */ "Receiving file will be stopped." = "Se detendrá la recepción del archivo."; /* No comment provided by engineer. */ -"Receiving via" = "Recibes vía"; +"Receiving via" = "Recibiendo vía"; /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Los destinatarios ven la actualizacion mientras escribes."; /* No comment provided by engineer. */ -"Record updated at" = "Registro actualizado a las"; +"Record updated at" = "Registro actualizado"; /* copied message info */ -"Record updated at: %@" = "Registro actualizado a las: %@"; +"Record updated at: %@" = "Registro actualizado: %@"; /* No comment provided by engineer. */ "Reduced battery usage" = "Reducción del uso de la batería"; @@ -2522,7 +2537,7 @@ "Send link previews" = "Enviar previsualizacion de enlaces"; /* No comment provided by engineer. */ -"Send live message" = "Enviar mensaje en vivo"; +"Send live message" = "Mensaje en vivo"; /* No comment provided by engineer. */ "Send notifications" = "Enviar notificaciones"; @@ -2546,19 +2561,19 @@ "Sending file will be stopped." = "Se detendrá el envío del archivo."; /* No comment provided by engineer. */ -"Sending via" = "Envías vía"; +"Sending via" = "Enviando vía"; /* No comment provided by engineer. */ -"Sent at" = "Enviado a las"; +"Sent at" = "Enviado el"; /* copied message info */ -"Sent at: %@" = "Enviado a las: %@"; +"Sent at: %@" = "Enviado el: %@"; /* notification */ "Sent file event" = "Evento de archivo enviado"; /* message info title */ -"Sent message" = "Mensaje enviado"; +"Sent message" = "Mensaje saliente"; /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido."; @@ -2588,7 +2603,7 @@ "Set it instead of system authentication." = "Úsalo en lugar de la autenticación del sistema."; /* No comment provided by engineer. */ -"Set passcode" = "Introduce el código de acceso"; +"Set passcode" = "Código autodestrucción"; /* No comment provided by engineer. */ "Set passphrase to export" = "Escribe la contraseña para exportar"; @@ -2990,7 +3005,7 @@ "Update transport isolation mode?" = "¿Actualizar el modo de aislamiento de transporte?"; /* rcv group event chat item */ -"updated group profile" = "ha actualizado el perfil de grupo"; +"updated group profile" = "ha actualizado el perfil del grupo"; /* No comment provided by engineer. */ "Updating settings will re-connect the client to all servers." = "Al actualizar la configuración el cliente se reconectará a todos los servidores."; @@ -3128,7 +3143,7 @@ "When available" = "Si disponible"; /* No comment provided by engineer. */ -"When people request to connect, you can accept or reject it." = "Cuando alguien solicita conectarse, puedes aceptar o rechazar."; +"When people request to connect, you can accept or reject it." = "Cuando alguien solicite conectarse podrás aceptar o rechazar la solicitud."; /* 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." = "Cuando compartes un perfil incógnito con alguien, este perfil también se usará para los grupos a los que te inviten."; @@ -3230,7 +3245,7 @@ "You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Tú controlas a través de qué servidor(es) **recibes** los mensajes. Tus contactos controlan a través de qué servidor(es) **envías** tus mensajes."; /* No comment provided by engineer. */ -"You could not be verified; please try again." = "No has podido ser verificado. Inténtelo de nuevo."; +"You could not be verified; please try again." = "No has podido ser autenticado. Inténtalo de nuevo."; /* No comment provided by engineer. */ "You have no chats" = "No tienes chats"; @@ -3245,7 +3260,7 @@ "You joined this group" = "Te has unido a este grupo"; /* No comment provided by engineer. */ -"You joined this group. Connecting to inviting group member." = "Te has unido a este grupo. Conectando con miembro del grupo invitado."; +"You joined this group. Connecting to inviting group member." = "Te has unido a este grupo. Conectando con el miembro que emite la invitacíon."; /* snd group event chat item */ "you left" = "has salido"; @@ -3269,7 +3284,7 @@ "you shared one-time link" = "has compartido un enlace de un uso"; /* chat list item description */ -"you shared one-time link incognito" = "has compartido enlace de un uso en modo incógnito"; +"you shared one-time link incognito" = "has compartido enlace de un solo uso en modo incógnito"; /* No comment provided by engineer. */ "You will be connected to group when the group host's device is online, please wait or check later!" = "Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde."; @@ -3305,10 +3320,10 @@ "You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Estás usando un perfil incógnito para este grupo, por tanto para evitar compartir tu perfil principal no se permite invitar a contactos"; /* No comment provided by engineer. */ -"Your %@ servers" = "Tus servidores %@"; +"Your %@ servers" = "Mis servidores %@"; /* No comment provided by engineer. */ -"Your calls" = "Tus llamadas"; +"Your calls" = "Mis llamadas"; /* No comment provided by engineer. */ "Your chat database" = "Base de datos Chat"; @@ -3326,7 +3341,7 @@ "Your chat profiles" = "Mis perfiles"; /* No comment provided by engineer. */ -"Your chats" = "Tus chats"; +"Your chats" = "Mis chats"; /* No comment provided by engineer. */ "Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Tu contacto debe estar en línea para que se complete la conexión.\nPuedes cancelar esta conexión y eliminar el contacto (e intentarlo más tarde con un enlace nuevo)."; @@ -3350,10 +3365,10 @@ "Your current profile" = "Tu perfil actual"; /* No comment provided by engineer. */ -"Your ICE servers" = "Tus servidores ICE"; +"Your ICE servers" = "Mis servidores ICE"; /* No comment provided by engineer. */ -"Your preferences" = "Tus preferencias"; +"Your preferences" = "Mis preferencias"; /* No comment provided by engineer. */ "Your privacy" = "Privacidad"; @@ -3383,8 +3398,8 @@ "Your SimpleX address" = "Mi dirección SimpleX"; /* No comment provided by engineer. */ -"Your SMP servers" = "Tus servidores SMP"; +"Your SMP servers" = "Mis servidores SMP"; /* No comment provided by engineer. */ -"Your XFTP servers" = "Tus servidores XFTP"; +"Your XFTP servers" = "Mis servidores XFTP"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 983f431f46..c9ed230b01 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_italique_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- messages vocaux pouvant durer jusqu'à 5 minutes.\n- délai personnalisé de disparition.\n- l'historique de modification."; + /* No comment provided by engineer. */ ", " = ", "; @@ -88,6 +91,12 @@ /* No comment provided by engineer. */ "%@" = "%@"; +/* No comment provided by engineer. */ +"%@ (current)" = "%@ (actuel)"; + +/* copied message info */ +"%@ (current):" = "%@ (actuel) :"; + /* No comment provided by engineer. */ "%@ / %@" = "%@ / %@"; @@ -308,6 +317,9 @@ /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Toutes les discussions et tous les messages seront supprimés - il est impossible de revenir en arrière !"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Toutes les données sont effacées lorsqu'il est saisi."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Tous les membres du groupe resteront connectés."; @@ -461,6 +473,9 @@ /* No comment provided by engineer. */ "Bad message ID" = "Mauvais ID de message"; +/* No comment provided by engineer. */ +"Better messages" = "Meilleurs messages"; + /* No comment provided by engineer. */ "bold" = "gras"; @@ -810,6 +825,9 @@ /* No comment provided by engineer. */ "Currently maximum supported file size is %@." = "Actuellement, la taille maximale des fichiers supportés est de %@."; +/* dropdown time picker choice */ +"custom" = "personnalisé"; + /* No comment provided by engineer. */ "Custom time" = "Délai personnalisé"; @@ -993,6 +1011,12 @@ /* deleted chat item */ "deleted" = "supprimé"; +/* No comment provided by engineer. */ +"Deleted at" = "Supprimé à"; + +/* copied message info */ +"Deleted at: %@" = "Supprimé à : %@"; + /* rcv group event chat item */ "deleted group" = "groupe supprimé"; @@ -1044,6 +1068,12 @@ /* No comment provided by engineer. */ "Disappearing messages are prohibited in this group." = "Les messages éphémères sont interdits dans ce groupe."; +/* No comment provided by engineer. */ +"Disappears at" = "Disparaît à"; + +/* copied message info */ +"Disappears at: %@" = "Disparaît à : %@"; + /* server test step */ "Disconnect" = "Se déconnecter"; @@ -1077,6 +1107,9 @@ /* integrity error chat item */ "duplicate message" = "message dupliqué"; +/* No comment provided by engineer. */ +"Duration" = "Durée"; + /* No comment provided by engineer. */ "e2e encrypted" = "chiffré de bout en bout"; @@ -1356,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "Fichiers & médias"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "Enfin, les voilà ! 🚀"; + /* No comment provided by engineer. */ "For console" = "Pour la console"; @@ -1476,6 +1512,9 @@ /* No comment provided by engineer. */ "Hide:" = "Cacher :"; +/* copied message info */ +"History" = "Historique"; + /* time unit */ "hours" = "heures"; @@ -1584,6 +1623,9 @@ /* connection level description */ "indirect (%d)" = "indirect (%d)"; +/* chat item action */ +"Info" = "Info"; + /* No comment provided by engineer. */ "Initial role" = "Rôle initial"; @@ -1674,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "italique"; +/* No comment provided by engineer. */ +"Japanese interface" = "Interface en japonais"; + /* No comment provided by engineer. */ "Join" = "Rejoindre"; @@ -1848,6 +1893,12 @@ /* moderated chat item */ "moderated" = "modéré"; +/* No comment provided by engineer. */ +"Moderated at" = "Modéré à"; + +/* copied message info */ +"Moderated at: %@" = "Modéré à : %@"; + /* No comment provided by engineer. */ "moderated by %@" = "modéré par %@"; @@ -1893,6 +1944,9 @@ /* No comment provided by engineer. */ "New database archive" = "Nouvelle archive de base de données"; +/* No comment provided by engineer. */ +"New display name" = "Nouveau nom d'affichage"; + /* No comment provided by engineer. */ "New in %@" = "Nouveautés de la %@"; @@ -2218,9 +2272,15 @@ /* No comment provided by engineer. */ "Rate the app" = "Évaluer l'app"; +/* chat item menu */ +"React..." = "Réagir..."; + /* No comment provided by engineer. */ "Read" = "Lire"; +/* No comment provided by engineer. */ +"Read more" = "En savoir plus"; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Pour en savoir plus, consultez le [Guide de l'utilisateur](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)."; @@ -2236,12 +2296,21 @@ /* No comment provided by engineer. */ "received answer…" = "réponse reçu…"; +/* No comment provided by engineer. */ +"Received at" = "Reçu le"; + +/* copied message info */ +"Received at: %@" = "Reçu le : %@"; + /* No comment provided by engineer. */ "received confirmation…" = "confimation reçu…"; /* notification */ "Received file event" = "Événement de fichier reçu"; +/* message info title */ +"Received message" = "Message reçu"; + /* No comment provided by engineer. */ "Receiving file will be stopped." = "La réception du fichier sera interrompue."; @@ -2251,6 +2320,12 @@ /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Les destinataires voient les mises à jour au fur et à mesure que vous les tapez."; +/* No comment provided by engineer. */ +"Record updated at" = "Enregistrement mis à jour le"; + +/* copied message info */ +"Record updated at: %@" = "Enregistrement mis à jour le : %@"; + /* No comment provided by engineer. */ "Reduced battery usage" = "Réduction de la consommation de batterie"; @@ -2431,6 +2506,9 @@ /* No comment provided by engineer. */ "Security code" = "Code de sécurité"; +/* No comment provided by engineer. */ +"Select" = "Choisir"; + /* No comment provided by engineer. */ "Self-destruct" = "Autodestruction"; @@ -2485,6 +2563,12 @@ /* No comment provided by engineer. */ "Sending via" = "Envoi via"; +/* No comment provided by engineer. */ +"Sent at" = "Envoyé le"; + +/* copied message info */ +"Sent at: %@" = "Envoyé le : %@"; + /* notification */ "Sent file event" = "Événement de fichier envoyé"; @@ -2872,6 +2956,9 @@ /* No comment provided by engineer. */ "Unhide profile" = "Dévoiler le profil"; +/* No comment provided by engineer. */ +"Unit" = "Unité"; + /* connection info */ "unknown" = "inconnu"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index b5a5795255..a4975a404c 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_corsivo_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- messaggi vocali fino a 5 minuti.\n- tempo di scomparsa personalizzato.\n- cronologia delle modifiche."; + /* No comment provided by engineer. */ ", " = ", "; @@ -88,6 +91,12 @@ /* No comment provided by engineer. */ "%@" = "%@"; +/* No comment provided by engineer. */ +"%@ (current)" = "%@ (attuale)"; + +/* copied message info */ +"%@ (current):" = "%@ (attuale):"; + /* No comment provided by engineer. */ "%@ / %@" = "%@ / %@"; @@ -308,6 +317,9 @@ /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Tutte le chat e i messaggi verranno eliminati. Non è reversibile!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Tutti i dati vengono cancellati quando inserito."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Tutti i membri del gruppo resteranno connessi."; @@ -461,6 +473,9 @@ /* No comment provided by engineer. */ "Bad message ID" = "ID del messaggio errato"; +/* No comment provided by engineer. */ +"Better messages" = "Messaggi migliorati"; + /* No comment provided by engineer. */ "bold" = "grassetto"; @@ -996,6 +1011,12 @@ /* deleted chat item */ "deleted" = "eliminato"; +/* No comment provided by engineer. */ +"Deleted at" = "Eliminato il"; + +/* copied message info */ +"Deleted at: %@" = "Eliminato il: %@"; + /* rcv group event chat item */ "deleted group" = "gruppo eliminato"; @@ -1047,6 +1068,12 @@ /* No comment provided by engineer. */ "Disappearing messages are prohibited in this group." = "I messaggi a tempo sono vietati in questo gruppo."; +/* No comment provided by engineer. */ +"Disappears at" = "Scompare il"; + +/* copied message info */ +"Disappears at: %@" = "Scompare il: %@"; + /* server test step */ "Disconnect" = "Disconnetti"; @@ -1080,6 +1107,9 @@ /* integrity error chat item */ "duplicate message" = "messaggio duplicato"; +/* No comment provided by engineer. */ +"Duration" = "Durata"; + /* No comment provided by engineer. */ "e2e encrypted" = "crittografato e2e"; @@ -1359,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "File e multimediali"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "Finalmente le abbiamo! 🚀"; + /* No comment provided by engineer. */ "For console" = "Per console"; @@ -1479,6 +1512,9 @@ /* No comment provided by engineer. */ "Hide:" = "Nascondi:"; +/* copied message info */ +"History" = "Cronologia"; + /* time unit */ "hours" = "ore"; @@ -1587,6 +1623,9 @@ /* connection level description */ "indirect (%d)" = "indiretta (%d)"; +/* chat item action */ +"Info" = "Informazioni"; + /* No comment provided by engineer. */ "Initial role" = "Ruolo iniziale"; @@ -1677,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "corsivo"; +/* No comment provided by engineer. */ +"Japanese interface" = "Interfaccia giapponese"; + /* No comment provided by engineer. */ "Join" = "Entra"; @@ -1851,6 +1893,12 @@ /* moderated chat item */ "moderated" = "moderato"; +/* No comment provided by engineer. */ +"Moderated at" = "Moderato il"; + +/* copied message info */ +"Moderated at: %@" = "Moderato il: %@"; + /* No comment provided by engineer. */ "moderated by %@" = "moderato da %@"; @@ -1896,6 +1944,9 @@ /* No comment provided by engineer. */ "New database archive" = "Nuovo archivio database"; +/* No comment provided by engineer. */ +"New display name" = "Nuovo nome da mostrare"; + /* No comment provided by engineer. */ "New in %@" = "Novità nella %@"; @@ -2221,9 +2272,15 @@ /* No comment provided by engineer. */ "Rate the app" = "Valuta l'app"; +/* chat item menu */ +"React..." = "Reagisci..."; + /* No comment provided by engineer. */ "Read" = "Leggi"; +/* No comment provided by engineer. */ +"Read more" = "Leggi tutto"; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Maggiori informazioni nella [Guida per l'utente](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)."; @@ -2239,6 +2296,12 @@ /* No comment provided by engineer. */ "received answer…" = "risposta ricevuta…"; +/* No comment provided by engineer. */ +"Received at" = "Ricevuto il"; + +/* copied message info */ +"Received at: %@" = "Ricevuto il: %@"; + /* No comment provided by engineer. */ "received confirmation…" = "conferma ricevuta…"; @@ -2257,6 +2320,12 @@ /* No comment provided by engineer. */ "Recipients see updates as you type them." = "I destinatari vedono gli aggiornamenti mentre li digiti."; +/* No comment provided by engineer. */ +"Record updated at" = "Registro aggiornato il"; + +/* copied message info */ +"Record updated at: %@" = "Registro aggiornato il: %@"; + /* No comment provided by engineer. */ "Reduced battery usage" = "Consumo di batteria ridotto"; @@ -2494,6 +2563,12 @@ /* No comment provided by engineer. */ "Sending via" = "Invio tramite"; +/* No comment provided by engineer. */ +"Sent at" = "Inviato il"; + +/* copied message info */ +"Sent at: %@" = "Inviato il: %@"; + /* notification */ "Sent file event" = "Evento file inviato"; @@ -2881,6 +2956,9 @@ /* No comment provided by engineer. */ "Unhide profile" = "Svela profilo"; +/* No comment provided by engineer. */ +"Unit" = "Unità"; + /* connection info */ "unknown" = "sconosciuto"; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index c4722b714d..0b0407856c 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_斜体_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- 最長 5 分間の音声メッセージ。\n- 消えるまでのカスタム時間。\n- 編集履歴。"; + /* No comment provided by engineer. */ ", " = ", "; @@ -303,7 +306,7 @@ "admin" = "管理者"; /* No comment provided by engineer. */ -"Admins can create the links to join groups." = "管理者はグループの参加リンクを発行できます。"; +"Admins can create the links to join groups." = "管理者はグループの参加リンクを生成できます。"; /* No comment provided by engineer. */ "Advanced network settings" = "ネットワーク詳細設定"; @@ -314,6 +317,9 @@ /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "全チャットとメッセージが削除されます(※元に戻せません※)!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "入力するとすべてのデータが消去されます。"; + /* No comment provided by engineer. */ "All group members will remain connected." = "グループ全員の接続が継続します。"; @@ -781,13 +787,13 @@ "Create file" = "ファイルを作成"; /* No comment provided by engineer. */ -"Create group link" = "グループのリンクを発行する"; +"Create group link" = "グループのリンクを生成する"; /* No comment provided by engineer. */ -"Create link" = "リンクを発行する"; +"Create link" = "リンクを生成する"; /* No comment provided by engineer. */ -"Create one-time invitation link" = "使い捨ての招待リンクを発行する"; +"Create one-time invitation link" = "使い捨ての招待リンクを生成する"; /* server test step */ "Create queue" = "キューの作成"; @@ -1234,7 +1240,7 @@ "Error creating group" = "グループの作成エラー"; /* No comment provided by engineer. */ -"Error creating group link" = "グループリンク発行にエラー発生"; +"Error creating group link" = "グループリンク生成にエラー発生"; /* No comment provided by engineer. */ "Error creating profile!" = "プロフィール作成にエラー発生!"; @@ -1372,7 +1378,7 @@ "File will be received when your contact completes uploading it." = "連絡先がアップロードを完了した時点で、ファイルを受信します。"; /* No comment provided by engineer. */ -"File will be received when your contact is online, please wait or check later!" = "連絡先がオンラインになったら受信されます。しばらくお待ちください。"; +"File will be received when your contact is online, please wait or check later!" = "連絡先がオンラインになったら受信されます。しばらくお待ちください!"; /* No comment provided by engineer. */ "File: %@" = "ファイル: %@"; @@ -1531,7 +1537,7 @@ "If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "直接会えない場合は、**ビデオ通話で QR コードを表示する**か、リンクを共有してください。"; /* No comment provided by engineer. */ -"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "アプリを開くときにこのパスコードを入力すると、アプリのすべてのデータが元に戻せないように削除されます。"; +"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "アプリを開くときにこのパスコードを入力すると、アプリのすべてのデータが元に戻せないように削除されます!"; /* No comment provided by engineer. */ "If you enter your self-destruct passcode while opening the app:" = "アプリを開いているときに自己破壊パスコードを入力した場合:"; @@ -1704,6 +1710,9 @@ /* No comment provided by engineer. */ "italic" = "斜体"; +/* No comment provided by engineer. */ +"Japanese interface" = "日本語UI"; + /* No comment provided by engineer. */ "Join" = "参加"; @@ -1974,9 +1983,6 @@ /* No comment provided by engineer. */ "No group!" = "グループが見つかりません!"; -/* No comment provided by engineer. */ -"No message details" = "メッセージの詳細はありません"; - /* No comment provided by engineer. */ "No permission to record voice message" = "音声メッセージを録音する権限がありません"; @@ -2186,7 +2192,7 @@ "Please store passphrase securely, you will NOT be able to change it if you lose it." = "パスフレーズを失くさないように保管してください。失くすと変更できなくなります。"; /* No comment provided by engineer. */ -"Polish interface" = "洗練されたインターフェース"; +"Polish interface" = "ポーランド語UI"; /* server test error */ "Possibly, certificate fingerprint in server address is incorrect" = "サーバアドレスの証明証IDが正しくないかもしれません"; @@ -2266,6 +2272,9 @@ /* No comment provided by engineer. */ "Read" = "読む"; +/* No comment provided by engineer. */ +"Read more" = "続きを読む"; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "詳しくは[ユーザーガイド](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)をご覧ください。"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index 1ae3220067..9d86867ee5 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_cursief_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- spraakberichten tot 5 minuten.\n- aangepaste tijd om te verdwijnen.\n- bewerkingsgeschiedenis."; + /* No comment provided by engineer. */ ", " = ", "; @@ -314,6 +317,9 @@ /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Alle chats en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Alle gegevens worden bij het invoeren gewist."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Alle groepsleden blijven verbonden."; @@ -467,6 +473,9 @@ /* No comment provided by engineer. */ "Bad message ID" = "Onjuiste bericht ID"; +/* No comment provided by engineer. */ +"Better messages" = "Betere berichten"; + /* No comment provided by engineer. */ "bold" = "vetgedrukt"; @@ -1380,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "Bestanden en media"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "Eindelijk, we hebben ze! 🚀"; + /* No comment provided by engineer. */ "For console" = "Voor console"; @@ -1704,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "cursief"; +/* No comment provided by engineer. */ +"Japanese interface" = "Japanse interface"; + /* No comment provided by engineer. */ "Join" = "Word lid van"; @@ -1974,9 +1989,6 @@ /* No comment provided by engineer. */ "No group!" = "Groep niet gevonden!"; -/* No comment provided by engineer. */ -"No message details" = "Geen berichtdetails"; - /* No comment provided by engineer. */ "No permission to record voice message" = "Geen toestemming om spraakbericht op te nemen"; @@ -2266,6 +2278,9 @@ /* No comment provided by engineer. */ "Read" = "Lees"; +/* No comment provided by engineer. */ +"Read more" = "Lees meer"; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Lees meer in de [Gebruikershandleiding](https://simplex.chat/docs/guide/app-settings.html#uw-simplex-contactadres)."; @@ -2282,7 +2297,7 @@ "received answer…" = "antwoord gekregen…"; /* No comment provided by engineer. */ -"Received at" = "Ontvangen om"; +"Received at" = "Ontvangen op"; /* copied message info */ "Received at: %@" = "Ontvangen op: %@"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index 8630170cd5..1982aaafb8 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_kursywa_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- wiadomości głosowe do 5 minut.\n- niestandardowy czas zniknięcia.\n- historia edycji."; + /* No comment provided by engineer. */ ", " = ", "; @@ -314,6 +317,9 @@ /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Wszystkie czaty i wiadomości zostaną usunięte - nie można tego cofnąć!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Wszystkie dane są usuwane po jego wprowadzeniu."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Wszyscy członkowie grupy pozostaną połączeni."; @@ -467,6 +473,9 @@ /* No comment provided by engineer. */ "Bad message ID" = "Zły identyfikator wiadomości"; +/* No comment provided by engineer. */ +"Better messages" = "Lepsze wiadomości"; + /* No comment provided by engineer. */ "bold" = "pogrubiona"; @@ -1380,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "Pliki i media"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "W końcu je mamy! 🚀"; + /* No comment provided by engineer. */ "For console" = "Dla konsoli"; @@ -1704,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "kursywa"; +/* No comment provided by engineer. */ +"Japanese interface" = "Japoński interfejs"; + /* No comment provided by engineer. */ "Join" = "Dołącz"; @@ -1974,9 +1989,6 @@ /* No comment provided by engineer. */ "No group!" = "Nie znaleziono grupy!"; -/* No comment provided by engineer. */ -"No message details" = "Brak szczegółów wiadomości"; - /* No comment provided by engineer. */ "No permission to record voice message" = "Brak uprawnień do nagrywania wiadomości głosowej"; @@ -2266,6 +2278,9 @@ /* No comment provided by engineer. */ "Read" = "Czytaj"; +/* No comment provided by engineer. */ +"Read more" = "Przeczytaj więcej"; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Przeczytaj więcej w [Podręczniku Użytkownika](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)."; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index beabc894a4..d77d910bbb 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -19,6 +19,9 @@ /* No comment provided by engineer. */ "_italic_" = "\\_курсив_"; +/* No comment provided by engineer. */ +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- голосовые сообщения до 5 минут.\n- настройка времени исчезающих сообщений.\n- история редактирования."; + /* No comment provided by engineer. */ ", " = ", "; @@ -88,6 +91,12 @@ /* No comment provided by engineer. */ "%@" = "%@"; +/* No comment provided by engineer. */ +"%@ (current)" = "%@ (текущее)"; + +/* copied message info */ +"%@ (current):" = "%@ (текущее):"; + /* No comment provided by engineer. */ "%@ / %@" = "%@ / %@"; @@ -109,6 +118,9 @@ /* notification title */ "%@ wants to connect!" = "%@ хочет соединиться!"; +/* copied message info */ +"%@:" = "%@:"; + /* time interval */ "%d days" = "%d дней"; @@ -127,6 +139,9 @@ /* integrity error chat item */ "%d skipped message(s)" = "%d пропущенных сообщение(й)"; +/* time interval */ +"%d weeks" = "%d недель"; + /* No comment provided by engineer. */ "%lld" = "%lld"; @@ -181,24 +196,42 @@ /* No comment provided by engineer. */ "`a + b`" = "\\`a + b`"; +/* email text */ +"

Hi!

\n

Connect to me via SimpleX Chat

" = "

Привет!

\n

Соединитесь со мной в SimpleX Chat.

"; + /* No comment provided by engineer. */ "~strike~" = "\\~зачеркнуть~"; +/* No comment provided by engineer. */ +"0s" = "0с"; + /* time interval */ "1 day" = "1 день"; /* time interval */ "1 hour" = "1 час"; +/* No comment provided by engineer. */ +"1 minute" = "1 минута"; + /* time interval */ "1 month" = "1 месяц"; /* time interval */ "1 week" = "1 неделю"; +/* No comment provided by engineer. */ +"1-time link" = "Одноразовая ссылка"; + +/* No comment provided by engineer. */ +"5 minutes" = "5 минут"; + /* No comment provided by engineer. */ "6" = "6"; +/* No comment provided by engineer. */ +"30 seconds" = "30 секунд"; + /* notification title */ "A new contact" = "Новый контакт"; @@ -217,6 +250,9 @@ /* No comment provided by engineer. */ "About SimpleX" = "О SimpleX"; +/* No comment provided by engineer. */ +"About SimpleX address" = "Об адресе SimpleX"; + /* No comment provided by engineer. */ "About SimpleX Chat" = "Информация о SimpleX Chat"; @@ -242,6 +278,9 @@ /* call status */ "accepted call" = "принятый звонок"; +/* 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 preset servers" = "Добавить серверы по умолчанию"; @@ -260,6 +299,9 @@ /* No comment provided by engineer. */ "Add welcome message" = "Добавить приветственное сообщение"; +/* No comment provided by engineer. */ +"Address" = "Адрес"; + /* member role */ "admin" = "админ"; @@ -269,15 +311,27 @@ /* No comment provided by engineer. */ "Advanced network settings" = "Настройки сети"; +/* No comment provided by engineer. */ +"All app data is deleted." = "Все данные приложения будут удалены."; + /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Все чаты и сообщения будут удалены - это нельзя отменить!"; +/* No comment provided by engineer. */ +"All data is erased when it is entered." = "Все данные удаляются при его вводе."; + /* No comment provided by engineer. */ "All group members will remain connected." = "Все члены группы, которые соединились через эту ссылку, останутся в группе."; /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Все сообщения будут удалены - это действие нельзя отменить! Сообщения будут удалены только для Вас."; +/* No comment provided by engineer. */ +"All your contacts will remain connected." = "Все контакты, которые соединились через этот адрес, сохранятся."; + +/* No comment provided by engineer. */ +"All your contacts will remain connected. Profile update will be sent to your contacts." = "Все Ваши контакты сохранятся. Обновленный профиль будет отправлен Вашим контактам."; + /* No comment provided by engineer. */ "Allow" = "Разрешить"; @@ -290,6 +344,12 @@ /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you." = "Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам."; +/* No comment provided by engineer. */ +"Allow message reactions only if your contact allows them." = "Разрешить реакции на сообщения, только если ваш контакт разрешает их."; + +/* No comment provided by engineer. */ +"Allow message reactions." = "Разрешить реакции на сообщения."; + /* No comment provided by engineer. */ "Allow sending direct messages to members." = "Разрешить посылать прямые сообщения членам группы."; @@ -308,6 +368,9 @@ /* No comment provided by engineer. */ "Allow voice messages?" = "Разрешить голосовые сообщения?"; +/* No comment provided by engineer. */ +"Allow your contacts adding message reactions." = "Разрешить контактам добавлять реакции на сообщения."; + /* No comment provided by engineer. */ "Allow your contacts to call you." = "Разрешить Вашим контактам звонить Вам."; @@ -329,6 +392,9 @@ /* No comment provided by engineer. */ "Always use relay" = "Всегда соединяться через relay"; +/* No comment provided by engineer. */ +"An empty chat profile with the provided name is created, and the app opens as usual." = "Будет создан пустой профиль чата с указанным именем, и приложение откроется в обычном режиме."; + /* No comment provided by engineer. */ "Answer call" = "Принять звонок"; @@ -341,6 +407,9 @@ /* No comment provided by engineer. */ "App passcode" = "Код доступа в приложение"; +/* No comment provided by engineer. */ +"App passcode is replaced with self-destruct passcode." = "Код доступа в приложение будет заменен кодом самоуничтожения."; + /* No comment provided by engineer. */ "App version" = "Версия приложения"; @@ -380,6 +449,9 @@ /* No comment provided by engineer. */ "Authentication unavailable" = "Аутентификация недоступна"; +/* No comment provided by engineer. */ +"Auto-accept" = "Автоприем"; + /* No comment provided by engineer. */ "Auto-accept contact requests" = "Автоматически принимать запросы контактов"; @@ -401,9 +473,15 @@ /* No comment provided by engineer. */ "Bad message ID" = "Ошибка ID сообщения"; +/* No comment provided by engineer. */ +"Better messages" = "Улучшенные сообщения"; + /* No comment provided by engineer. */ "bold" = "жирный"; +/* No comment provided by engineer. */ +"Both you and your contact can add message reactions." = "И Вы, и Ваш контакт можете добавлять реакции на сообщения."; + /* No comment provided by engineer. */ "Both you and your contact can irreversibly delete sent messages." = "Вы и Ваш контакт можете необратимо удалять отправленные сообщения."; @@ -479,6 +557,13 @@ /* No comment provided by engineer. */ "Change role" = "Поменять роль"; +/* authentication reason */ +"Change self-destruct mode" = "Изменить режим самоуничтожения"; + +/* authentication reason + set passcode view */ +"Change self-destruct passcode" = "Изменить код самоуничтожения"; + /* chat item text */ "changed address for you" = "поменял(а) адрес для Вас"; @@ -686,6 +771,9 @@ /* No comment provided by engineer. */ "Contacts can mark messages for deletion; you will be able to view them." = "Контакты могут помечать сообщения для удаления; Вы сможете просмотреть их."; +/* No comment provided by engineer. */ +"Continue" = "Продолжить"; + /* chat item action */ "Copy" = "Скопировать"; @@ -695,6 +783,9 @@ /* No comment provided by engineer. */ "Create" = "Создать"; +/* No comment provided by engineer. */ +"Create an address to let people connect with you." = "Создайте адрес, чтобы можно было соединиться с вами."; + /* server test step */ "Create file" = "Создание файла"; @@ -713,6 +804,9 @@ /* No comment provided by engineer. */ "Create secret group" = "Создать скрытую группу"; +/* No comment provided by engineer. */ +"Create SimpleX address" = "Создать адрес SimpleX"; + /* No comment provided by engineer. */ "Create your profile" = "Создать профиль"; @@ -731,6 +825,12 @@ /* No comment provided by engineer. */ "Currently maximum supported file size is %@." = "Максимальный размер файла - %@."; +/* dropdown time picker choice */ +"custom" = "другое"; + +/* No comment provided by engineer. */ +"Custom time" = "Пользовательское время"; + /* No comment provided by engineer. */ "Dark" = "Тёмная"; @@ -752,6 +852,9 @@ /* No comment provided by engineer. */ "Database ID" = "ID базы данных"; +/* copied message info */ +"Database ID: %d" = "ID базы данных: %d"; + /* No comment provided by engineer. */ "Database IDs and Transport isolation option." = "ID базы данных и опция Отдельные транспортные сессии."; @@ -788,6 +891,9 @@ /* No comment provided by engineer. */ "Database will be migrated when the app restarts" = "Данные чата будут мигрированы при перезапуске"; +/* time unit */ +"days" = "дней"; + /* No comment provided by engineer. */ "Decentralized" = "Децентрализованный"; @@ -905,6 +1011,12 @@ /* deleted chat item */ "deleted" = "удалено"; +/* No comment provided by engineer. */ +"Deleted at" = "Удалено"; + +/* copied message info */ +"Deleted at: %@" = "Удалено: %@"; + /* rcv group event chat item */ "deleted group" = "удалил(а) группу"; @@ -944,6 +1056,9 @@ /* authentication reason */ "Disable SimpleX Lock" = "Отключить блокировку SimpleX"; +/* No comment provided by engineer. */ +"Disappearing message" = "Исчезающее сообщение"; + /* chat feature */ "Disappearing messages" = "Исчезающие сообщения"; @@ -953,6 +1068,12 @@ /* No comment provided by engineer. */ "Disappearing messages are prohibited in this group." = "Исчезающие сообщения запрещены в этой группе."; +/* No comment provided by engineer. */ +"Disappears at" = "Исчезает"; + +/* copied message info */ +"Disappears at: %@" = "Исчезает: %@"; + /* server test step */ "Disconnect" = "Разрыв соединения"; @@ -968,6 +1089,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Не используйте SimpleX для экстренных звонков."; +/* No comment provided by engineer. */ +"Don't create address" = "Не создавать адрес"; + /* No comment provided by engineer. */ "Don't show again" = "Не показывать"; @@ -983,6 +1107,9 @@ /* integrity error chat item */ "duplicate message" = "повторное сообщение"; +/* No comment provided by engineer. */ +"Duration" = "Длительность"; + /* No comment provided by engineer. */ "e2e encrypted" = "e2e зашифровано"; @@ -1010,6 +1137,12 @@ /* No comment provided by engineer. */ "Enable periodic notifications?" = "Включить периодические уведомления?"; +/* No comment provided by engineer. */ +"Enable self-destruct" = "Включить код самоуничтожения"; + +/* set passcode view */ +"Enable self-destruct passcode" = "Включить код самоуничтожения"; + /* authentication reason */ "Enable SimpleX Lock" = "Включить блокировку SimpleX"; @@ -1073,6 +1206,12 @@ /* No comment provided by engineer. */ "Enter server manually" = "Ввести сервер вручную"; +/* placeholder */ +"Enter welcome message…" = "Введите приветственное сообщение…"; + +/* placeholder */ +"Enter welcome message… (optional)" = "Введите приветственное сообщение... (опционально)"; + /* No comment provided by engineer. */ "error" = "ошибка"; @@ -1175,6 +1314,9 @@ /* No comment provided by engineer. */ "Error saving user password" = "Ошибка при сохранении пароля пользователя"; +/* No comment provided by engineer. */ +"Error sending email" = "Ошибка отправки email"; + /* No comment provided by engineer. */ "Error sending message" = "Ошибка при отправке сообщения"; @@ -1247,6 +1389,9 @@ /* No comment provided by engineer. */ "Files & media" = "Файлы и медиа"; +/* No comment provided by engineer. */ +"Finally, we have them! 🚀" = "Наконец-то, мы их добавили! 🚀"; + /* No comment provided by engineer. */ "For console" = "Для консоли"; @@ -1301,6 +1446,9 @@ /* No comment provided by engineer. */ "Group links" = "Ссылки групп"; +/* No comment provided by engineer. */ +"Group members can add message reactions." = "Члены группы могут добавлять реакции на сообщения."; + /* No comment provided by engineer. */ "Group members can irreversibly delete sent messages." = "Члены группы могут необратимо удалять отправленные сообщения."; @@ -1364,6 +1512,12 @@ /* No comment provided by engineer. */ "Hide:" = "Скрыть:"; +/* copied message info */ +"History" = "История"; + +/* time unit */ +"hours" = "часов"; + /* No comment provided by engineer. */ "How it works" = "Как это работает"; @@ -1382,9 +1536,18 @@ /* No comment provided by engineer. */ "ICE servers (one per line)" = "ICE серверы (один на строке)"; +/* No comment provided by engineer. */ +"If you can't meet in person, show QR code in a video call, or share the link." = "Если Вы не можете встретиться лично, покажите QR-код во время видеозвонка или поделитесь ссылкой."; + /* No comment provided by engineer. */ "If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Если Вы не можете встретиться лично, Вы можете **сосканировать QR код во время видеозвонка**, или Ваш контакт может отправить Вам ссылку."; +/* No comment provided by engineer. */ +"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Если Вы введете этот код при открытии приложения, все данные приложения будут безвозвратно удалены!"; + +/* No comment provided by engineer. */ +"If you enter your self-destruct passcode while opening the app:" = "Если Вы введёте код самоуничтожения при открытии приложения:"; + /* No comment provided by engineer. */ "If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "Если сейчас Вам нужно использовать чат, нажмите **Отложить** внизу (Вы сможете мигрировать данные чата при следующем запуске приложения)."; @@ -1460,6 +1623,9 @@ /* connection level description */ "indirect (%d)" = "непрямое (%d)"; +/* chat item action */ +"Info" = "Информация"; + /* No comment provided by engineer. */ "Initial role" = "Роль при вступлении"; @@ -1496,6 +1662,9 @@ /* group name */ "invitation to group %@" = "приглашение в группу %@"; +/* No comment provided by engineer. */ +"Invite friends" = "Пригласить друзей"; + /* No comment provided by engineer. */ "Invite members" = "Пригласить членов группы"; @@ -1547,6 +1716,9 @@ /* No comment provided by engineer. */ "italic" = "курсив"; +/* No comment provided by engineer. */ +"Japanese interface" = "Японский интерфейс"; + /* No comment provided by engineer. */ "Join" = "Вступить"; @@ -1571,6 +1743,9 @@ /* No comment provided by engineer. */ "Large file!" = "Большой файл!"; +/* No comment provided by engineer. */ +"Learn more" = "Узнать больше"; + /* No comment provided by engineer. */ "Leave" = "Выйти"; @@ -1583,6 +1758,9 @@ /* rcv group event chat item */ "left" = "покинул(а) группу"; +/* email subject */ +"Let's talk in SimpleX Chat" = "Давайте поговорим в SimpleX Chat"; + /* No comment provided by engineer. */ "Light" = "Светлая"; @@ -1667,6 +1845,15 @@ /* No comment provided by engineer. */ "Message draft" = "Черновик сообщения"; +/* chat feature */ +"Message reactions" = "Реакции на сообщения"; + +/* No comment provided by engineer. */ +"Message reactions are prohibited in this chat." = "Реакции на сообщения в этом чате запрещены."; + +/* No comment provided by engineer. */ +"Message reactions are prohibited in this group." = "Реакции на сообщения запрещены в этой группе."; + /* notification */ "message received" = "получено сообщение"; @@ -1694,6 +1881,9 @@ /* No comment provided by engineer. */ "Migrations: %@" = "Миграции: %@"; +/* time unit */ +"minutes" = "минут"; + /* call status */ "missed call" = "пропущенный звонок"; @@ -1703,9 +1893,18 @@ /* moderated chat item */ "moderated" = "удалено"; +/* No comment provided by engineer. */ +"Moderated at" = "Модерировано"; + +/* copied message info */ +"Moderated at: %@" = "Модерировано: %@"; + /* No comment provided by engineer. */ "moderated by %@" = "удалено %@"; +/* time unit */ +"months" = "месяцев"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Дополнительные улучшения скоро!"; @@ -1745,6 +1944,9 @@ /* No comment provided by engineer. */ "New database archive" = "Новый архив чата"; +/* No comment provided by engineer. */ +"New display name" = "Новое имя"; + /* No comment provided by engineer. */ "New in %@" = "Новое в %@"; @@ -1854,6 +2056,9 @@ /* No comment provided by engineer. */ "Only group owners can enable voice messages." = "Только владельцы группы могут разрешить голосовые сообщения."; +/* No comment provided by engineer. */ +"Only you can add message reactions." = "Только Вы можете добавлять реакции на сообщения."; + /* No comment provided by engineer. */ "Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Только Вы можете необратимо удалять сообщения (Ваш контакт может помечать их на удаление)."; @@ -1866,6 +2071,9 @@ /* No comment provided by engineer. */ "Only you can send voice messages." = "Только Вы можете отправлять голосовые сообщения."; +/* No comment provided by engineer. */ +"Only your contact can add message reactions." = "Только Ваш контакт может добавлять реакции на сообщения."; + /* No comment provided by engineer. */ "Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Только Ваш контакт может необратимо удалять сообщения (Вы можете помечать их на удаление)."; @@ -1893,6 +2101,9 @@ /* No comment provided by engineer. */ "Open-source protocol and code – anybody can run the servers." = "Открытый протокол и код - кто угодно может запустить сервер."; +/* No comment provided by engineer. */ +"Opening database…" = "Открытие базы данных…"; + /* No comment provided by engineer. */ "Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Использование ссылки в браузере может уменьшить конфиденциальность и безопасность соединения. Ссылки на неизвестные сайты будут красными."; @@ -2001,6 +2212,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Адрес сервера по умолчанию"; +/* No comment provided by engineer. */ +"Preview" = "Просмотр"; + /* No comment provided by engineer. */ "Privacy & security" = "Конфиденциальность"; @@ -2019,12 +2233,21 @@ /* No comment provided by engineer. */ "Profile password" = "Пароль профиля"; +/* No comment provided by engineer. */ +"Profile update will be sent to your contacts." = "Обновлённый профиль будет отправлен Вашим контактам."; + /* No comment provided by engineer. */ "Prohibit audio/video calls." = "Запретить аудио/видео звонки."; /* No comment provided by engineer. */ "Prohibit irreversible message deletion." = "Запретить необратимое удаление сообщений."; +/* No comment provided by engineer. */ +"Prohibit message reactions." = "Запретить реакции на сообщения."; + +/* No comment provided by engineer. */ +"Prohibit messages reactions." = "Запретить реакции на сообщения."; + /* No comment provided by engineer. */ "Prohibit sending direct messages to members." = "Запретить посылать прямые сообщения членам группы."; @@ -2049,9 +2272,21 @@ /* No comment provided by engineer. */ "Rate the app" = "Оценить приложение"; +/* chat item menu */ +"React..." = "Реакция..."; + /* No comment provided by engineer. */ "Read" = "Прочитано"; +/* No comment provided by engineer. */ +"Read more" = "Узнать больше"; + +/* No comment provided by engineer. */ +"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Узнать больше в [Руководстве пользователя](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)."; + +/* No comment provided by engineer. */ +"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Узнать больше в [Руководстве пользователя](https://simplex.chat/docs/guide/readme.html#connect-to-friends)."; + /* No comment provided by engineer. */ "Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Узнайте больше из нашего [GitHub репозитория](https://github.com/simplex-chat/simplex-chat#readme)."; @@ -2061,12 +2296,21 @@ /* No comment provided by engineer. */ "received answer…" = "получен ответ…"; +/* No comment provided by engineer. */ +"Received at" = "Получено"; + +/* copied message info */ +"Received at: %@" = "Получено: %@"; + /* No comment provided by engineer. */ "received confirmation…" = "получено подтверждение…"; /* notification */ "Received file event" = "Загрузка файла"; +/* message info title */ +"Received message" = "Полученное сообщение"; + /* No comment provided by engineer. */ "Receiving file will be stopped." = "Приём файла будет прекращён."; @@ -2076,6 +2320,12 @@ /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Получатели видят их в то время как Вы их набираете."; +/* No comment provided by engineer. */ +"Record updated at" = "Запись обновлена"; + +/* copied message info */ +"Record updated at: %@" = "Запись обновлена: %@"; + /* No comment provided by engineer. */ "Reduced battery usage" = "Уменьшенное потребление батареи"; @@ -2190,6 +2440,9 @@ /* No comment provided by engineer. */ "Save archive" = "Сохранить архив"; +/* No comment provided by engineer. */ +"Save auto-accept settings" = "Сохранить настройки автоприема"; + /* No comment provided by engineer. */ "Save group profile" = "Сохранить профиль группы"; @@ -2211,6 +2464,9 @@ /* No comment provided by engineer. */ "Save servers?" = "Сохранить серверы?"; +/* No comment provided by engineer. */ +"Save settings?" = "Сохранить настройки?"; + /* No comment provided by engineer. */ "Save welcome message?" = "Сохранить приветственное сообщение?"; @@ -2235,6 +2491,9 @@ /* network option */ "sec" = "сек"; +/* time unit */ +"seconds" = "секунд"; + /* No comment provided by engineer. */ "secret" = "секрет"; @@ -2247,6 +2506,21 @@ /* No comment provided by engineer. */ "Security code" = "Код безопасности"; +/* No comment provided by engineer. */ +"Select" = "Выбрать"; + +/* No comment provided by engineer. */ +"Self-destruct" = "Самоуничтожение"; + +/* No comment provided by engineer. */ +"Self-destruct passcode" = "Код самоуничтожения"; + +/* No comment provided by engineer. */ +"Self-destruct passcode changed!" = "Код самоуничтожения изменен!"; + +/* No comment provided by engineer. */ +"Self-destruct passcode enabled!" = "Код самоуничтожения включен!"; + /* No comment provided by engineer. */ "Send" = "Отправить"; @@ -2256,6 +2530,9 @@ /* No comment provided by engineer. */ "Send direct message" = "Отправить сообщение"; +/* No comment provided by engineer. */ +"Send disappearing message" = "Отправить исчезающее сообщение"; + /* No comment provided by engineer. */ "Send link previews" = "Отправлять картинки ссылок"; @@ -2286,9 +2563,18 @@ /* No comment provided by engineer. */ "Sending via" = "Отправка через"; +/* No comment provided by engineer. */ +"Sent at" = "Отправлено"; + +/* copied message info */ +"Sent at: %@" = "Отправлено: %@"; + /* notification */ "Sent file event" = "Отправка файла"; +/* message info title */ +"Sent message" = "Отправленное сообщение"; + /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Отправленные сообщения будут удалены через заданное время."; @@ -2316,6 +2602,9 @@ /* No comment provided by engineer. */ "Set it instead of system authentication." = "Установите код вместо системной аутентификации."; +/* No comment provided by engineer. */ +"Set passcode" = "Установить код доступа"; + /* No comment provided by engineer. */ "Set passphrase to export" = "Установите пароль"; @@ -2331,12 +2620,24 @@ /* chat item action */ "Share" = "Поделиться"; +/* No comment provided by engineer. */ +"Share 1-time link" = "Поделиться одноразовой ссылкой"; + +/* No comment provided by engineer. */ +"Share address" = "Поделиться адресом"; + +/* No comment provided by engineer. */ +"Share address with contacts?" = "Поделиться адресом с контактами?"; + /* No comment provided by engineer. */ "Share link" = "Поделиться ссылкой"; /* No comment provided by engineer. */ "Share one-time invitation link" = "Поделиться ссылкой-приглашением"; +/* No comment provided by engineer. */ +"Share with contacts" = "Поделиться с контактами"; + /* No comment provided by engineer. */ "Show calls in phone history" = "Показать звонки в истории телефона"; @@ -2349,6 +2650,12 @@ /* No comment provided by engineer. */ "Show:" = "Показать:"; +/* No comment provided by engineer. */ +"SimpleX address" = "Адрес SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Address" = "Адрес SimpleX"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "Безопасность SimpleX Chat была проверена Trail of Bits."; @@ -2424,6 +2731,12 @@ /* No comment provided by engineer. */ "Stop sending file?" = "Остановить отправку файла?"; +/* No comment provided by engineer. */ +"Stop sharing" = "Прекратить делиться"; + +/* No comment provided by engineer. */ +"Stop sharing address?" = "Прекратить делиться адресом?"; + /* authentication reason */ "Stop SimpleX" = "Остановить SimpleX"; @@ -2577,6 +2890,9 @@ /* No comment provided by engineer. */ "To ask any questions and to receive updates:" = "Чтобы задать вопросы и получать уведомления о новых версиях,"; +/* No comment provided by engineer. */ +"To connect, your contact can scan QR code or use the link in the app." = "Чтобы соединиться с Вами, Ваш контакт может отсканировать QR-код или использовать ссылку в приложении."; + /* No comment provided by engineer. */ "To find the profile used for an incognito connection, tap the contact or group name on top of the chat." = "Чтобы найти инкогнито профиль, используемый в разговоре, нажмите на имя контакта или группы в верхней части чата."; @@ -2640,6 +2956,9 @@ /* No comment provided by engineer. */ "Unhide profile" = "Раскрыть профиль"; +/* No comment provided by engineer. */ +"Unit" = "Единица"; + /* connection info */ "unknown" = "неизвестно"; @@ -2808,6 +3127,9 @@ /* No comment provided by engineer. */ "WebRTC ICE servers" = "WebRTC ICE серверы"; +/* time unit */ +"weeks" = "недель"; + /* No comment provided by engineer. */ "Welcome %@!" = "Здравствуйте %@!"; @@ -2820,6 +3142,9 @@ /* No comment provided by engineer. */ "When available" = "Когда возможно"; +/* No comment provided by engineer. */ +"When people request to connect, you can accept or reject it." = "Когда Вы получите запрос на соединение, Вы можете принять или отклонить его."; + /* 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." = "Когда Вы соединены с контактом инкогнито, тот же самый инкогнито профиль будет использоваться для групп с этим контактом."; @@ -2871,6 +3196,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Вы также можете соединиться, открыв ссылку. Если ссылка откроется в браузере, нажмите кнопку **Open in mobile app**."; +/* No comment provided by engineer. */ +"You can create it later" = "Вы можете создать его позже"; + /* No comment provided by engineer. */ "You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо.\nБлокировка SimpleX должна быть включена."; @@ -2883,6 +3211,9 @@ /* No comment provided by engineer. */ "You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." = "Вы можете поделиться ссылкой или QR кодом - через них можно присоединиться к группе. Вы сможете удалить ссылку, сохранив членов группы, которые через нее соединились."; +/* No comment provided by engineer. */ +"You can share this address with your contacts to let them connect with **%@**." = "Вы можете поделиться этим адресом с Вашими контактами, чтобы они могли соединиться с **%@**."; + /* No comment provided by engineer. */ "You can share your address as a link or QR code - anybody can connect to you." = "Вы можете использовать Ваш адрес как ссылку или как QR код - кто угодно сможет соединиться с Вами."; @@ -3021,6 +3352,12 @@ /* No comment provided by engineer. */ "Your contacts can allow full message deletion." = "Ваши контакты могут разрешить окончательное удаление сообщений."; +/* No comment provided by engineer. */ +"Your contacts in SimpleX will see it.\nYou can change it in Settings." = "Ваши контакты в SimpleX получат этот адрес.\nВы можете изменить это в Настройках."; + +/* No comment provided by engineer. */ +"Your contacts will remain connected." = "Ваши контакты сохранятся."; + /* No comment provided by engineer. */ "Your current chat database will be DELETED and REPLACED with the imported one." = "Текущие данные Вашего чата будет УДАЛЕНЫ и ЗАМЕНЕНЫ импортированными."; @@ -3057,6 +3394,9 @@ /* No comment provided by engineer. */ "Your settings" = "Настройки"; +/* No comment provided by engineer. */ +"Your SimpleX address" = "Ваш адрес SimpleX"; + /* No comment provided by engineer. */ "Your SMP servers" = "Ваши SMP серверы"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index 7c56ddcaf4..7699d8c6e2 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -336,7 +336,7 @@ "Already connected?" = "已连接?"; /* pref value */ -"always" = "一直"; +"always" = "始终"; /* No comment provided by engineer. */ "Always use relay" = "一直使用中继"; @@ -2827,7 +2827,7 @@ "Welcome %@!" = "欢迎%@!"; /* No comment provided by engineer. */ -"Welcome message" = "欢迎信息"; +"Welcome message" = "欢迎消息"; /* No comment provided by engineer. */ "What's new" = "更新内容"; From 579af09816c7b3d8edc44595720fef88b3cfffde Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Mon, 22 May 2023 13:15:06 +0200 Subject: [PATCH 04/15] ci: configure pagefile size for Windows build (#2122) * ci: configure pagefile size for Windows build * change action version * specify maximum * change disk root --------- Co-authored-by: shum --- .github/workflows/build.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4e9bfedab7..46a38d2f47 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,6 +62,14 @@ jobs: cache_path: C:/cabal asset_name: simplex-chat-windows-x86-64 steps: + - name: Configure pagefile (Windows) + if: matrix.os == 'windows-latest' + uses: al-cheb/configure-pagefile-action@v1.3 + with: + minimum-size: 16GB + maximum-size: 16GB + disk-root: "C:" + - name: Clone project uses: actions/checkout@v2 From 9a2efd0ef0ff346aef64627c4601a536ee4d9cd6 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Mon, 22 May 2023 15:49:46 +0200 Subject: [PATCH 05/15] ios: fix showing init view (#2477) * ios: fix showing init view * init with delay --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- apps/ios/Shared/ContentView.swift | 5 +---- apps/ios/Shared/SimpleXApp.swift | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/ios/Shared/ContentView.swift b/apps/ios/Shared/ContentView.swift index 8edc66df43..ccc8d769da 100644 --- a/apps/ios/Shared/ContentView.swift +++ b/apps/ios/Shared/ContentView.swift @@ -18,6 +18,7 @@ struct ContentView: View { @Binding var userAuthorized: Bool? @Binding var canConnectCall: Bool @Binding var lastSuccessfulUnlock: TimeInterval? + @Binding var showInitializationView: Bool @AppStorage(DEFAULT_SHOW_LA_NOTICE) private var prefShowLANotice = false @AppStorage(DEFAULT_LA_NOTICE_SHOWN) private var prefLANoticeShown = false @AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false @@ -27,7 +28,6 @@ struct ContentView: View { @State private var showWhatsNew = false @State private var showChooseLAMode = false @State private var showSetPasscode = false - @State private var showInitializationView = false var body: some View { ZStack { @@ -53,9 +53,6 @@ struct ContentView: View { .onAppear { if prefPerformLA { requestNtfAuthorization() } initAuthenticate() - DispatchQueue.main.asyncAfter(deadline: .now() + 1) { - showInitializationView = true - } } .onChange(of: doAuthenticate) { _ in initAuthenticate() diff --git a/apps/ios/Shared/SimpleXApp.swift b/apps/ios/Shared/SimpleXApp.swift index 5e03b13101..5184808bd7 100644 --- a/apps/ios/Shared/SimpleXApp.swift +++ b/apps/ios/Shared/SimpleXApp.swift @@ -23,6 +23,7 @@ struct SimpleXApp: App { @State private var enteredBackground: TimeInterval? = nil @State private var canConnectCall = false @State private var lastSuccessfulUnlock: TimeInterval? = nil + @State private var showInitializationView = false init() { hs_init(0, nil) @@ -36,14 +37,23 @@ struct SimpleXApp: App { var body: some Scene { return WindowGroup { - ContentView(doAuthenticate: $doAuthenticate, userAuthorized: $userAuthorized, canConnectCall: $canConnectCall, lastSuccessfulUnlock: $lastSuccessfulUnlock) + ContentView( + doAuthenticate: $doAuthenticate, + userAuthorized: $userAuthorized, + canConnectCall: $canConnectCall, + lastSuccessfulUnlock: $lastSuccessfulUnlock, + showInitializationView: $showInitializationView + ) .environmentObject(chatModel) .onOpenURL { url in logger.debug("ContentView.onOpenURL: \(url)") chatModel.appOpenUrl = url } .onAppear() { - initChatAndMigrate() + showInitializationView = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + initChatAndMigrate() + } } .onChange(of: scenePhase) { phase in logger.debug("scenePhase was \(String(describing: scenePhase)), now \(String(describing: phase))") From db55496fc7c1c2f90cdb6aba08a0de3323ba482e Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 22 May 2023 19:25:50 +0300 Subject: [PATCH 06/15] android: show initialization screen on migration (#2478) --- .../main/java/chat/simplex/app/SimplexApp.kt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt index ed2c03b897..0e5af1b6be 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt @@ -36,8 +36,6 @@ external fun chatParseServer(str: String): String external fun chatPasswordHash(pwd: String, salt: String): String class SimplexApp: Application(), LifecycleEventObserver { - lateinit var chatController: ChatController - var isAppOnForeground: Boolean = false val defaultLocale: Locale = Locale.getDefault() @@ -53,11 +51,7 @@ class SimplexApp: Application(), LifecycleEventObserver { val ctrl = if (res is DBMigrationResult.OK) { migrated[1] as Long } else null - if (::chatController.isInitialized) { - chatController.ctrl = ctrl - } else { - chatController = ChatController(ctrl, ntfManager, applicationContext, appPreferences) - } + chatController.ctrl = ctrl chatModel.chatDbEncrypted.value = dbKey != "" chatModel.chatDbStatus.value = res if (res != DBMigrationResult.OK) { @@ -100,15 +94,20 @@ class SimplexApp: Application(), LifecycleEventObserver { AppPreferences(applicationContext) } + val chatController: ChatController by lazy { + ChatController(0L, ntfManager, applicationContext, appPreferences) + } + + override fun onCreate() { super.onCreate() context = this context.getDir("temp", MODE_PRIVATE).deleteRecursively() - runBlocking { + withBGApi { initChatController() - ProcessLifecycleOwner.get().lifecycle.addObserver(this@SimplexApp) runMigrations() } + ProcessLifecycleOwner.get().lifecycle.addObserver(this@SimplexApp) } override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { From c10a4346a9563bdd1cd3f41ff551d1e145090bd4 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Mon, 22 May 2023 18:45:15 +0100 Subject: [PATCH 07/15] 5.1.0: Android 121, iOS 147 --- apps/android/app/build.gradle | 4 ++-- apps/ios/SimpleX.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/android/app/build.gradle b/apps/android/app/build.gradle index 7d45479ecc..80b44bc00a 100644 --- a/apps/android/app/build.gradle +++ b/apps/android/app/build.gradle @@ -13,8 +13,8 @@ android { targetSdk 32 // !!! // skip version code after release to F-Droid, as it uses two version codes - versionCode 120 - versionName "5.1-beta.1" + versionCode 121 + versionName "5.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 89bb1ad562..f4398f3938 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -1470,7 +1470,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 146; + CURRENT_PROJECT_VERSION = 147; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1512,7 +1512,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 146; + CURRENT_PROJECT_VERSION = 147; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1592,7 +1592,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 146; + CURRENT_PROJECT_VERSION = 147; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; @@ -1624,7 +1624,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 146; + CURRENT_PROJECT_VERSION = 147; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; From 36336a3a57998971a41d7243c816a7a27452d036 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Tue, 23 May 2023 00:03:48 +0400 Subject: [PATCH 08/15] android: color set passcode buttons (#2479) Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- .../simplex/app/views/usersettings/PrivacySettings.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt index 020d1d300c..c73bd6e7ce 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt @@ -303,7 +303,10 @@ fun SimplexLockView( LockDelaySelector(remember { laLockDelay.state }) { laLockDelay.set(it) } if (showChangePasscode.value && laMode.value == LAMode.PASSCODE) { SectionItemView({ changeLAPassword() }) { - Text(generalGetString(R.string.la_change_app_passcode)) + Text( + generalGetString(R.string.la_change_app_passcode), + color = MaterialTheme.colors.primary + ) } } } @@ -342,7 +345,10 @@ fun SimplexLockView( } } SectionItemView({ changeSelfDestructPassword() }) { - Text(stringResource(R.string.change_self_destruct_passcode)) + Text( + stringResource(R.string.change_self_destruct_passcode), + color = MaterialTheme.colors.primary + ) } } } From 174e703b4c7a28c56806ee04215243b7c8412d7a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 23 May 2023 09:42:48 +0200 Subject: [PATCH 09/15] rfc: groups (#2364) * rfc: groups * message dissemination --- docs/rfcs/2023-05-02-groups.md | 176 +++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 docs/rfcs/2023-05-02-groups.md diff --git a/docs/rfcs/2023-05-02-groups.md b/docs/rfcs/2023-05-02-groups.md new file mode 100644 index 0000000000..1f3d7ca969 --- /dev/null +++ b/docs/rfcs/2023-05-02-groups.md @@ -0,0 +1,176 @@ +# Groups + +## Problems + +1. The current group design is based on message broadcast by the sender to all group members, requiring a fully connected graph between members. This results in the linear scaling of the traffic for senders, making it not viable for large groups. + +2. As connection handshake is mediated by the introducer, there are multiple steps to establish direct connections between members, and while all these messages are asynchronous thanks to the relays, they require multiple steps, and can take arbitrarily long time to complete. + +3. Group state is incosistent in all parts: group profile, group membership and group messages. While _some_ efforts are made to avoid this inconsistency (pending messages while members are being connected, profile changes only allowed to group owners), there is no conflict resolution strategy, and no mechanism to validate group integrity. In addition to race conditions and slow connections between members that may result in inconsistent state between members, there is also nothing that prevents members from sending different messages to different members - integrity validation is only present withing each connection between members, but not for the whole group. + +## Design goals + +1. Strong consistency of messages, membership and group configuration - with conflict resolution and integrity validation. +2. Availability of past messages, as defined by group policy. This implies the need for multi-hop delivery, and it also that a fully connected graph is not required. +3. Better scaling of sending of the group messages - as `O(log N)` or as `O(log log N)`, at the cost of increasing the cost to receive the messages. It will result on higher average traffic per member with much lower variance of that traffic. +4. Member roles would imply their different weight in conflict resolution and different per-member traffic - groups should be more costly for owners and admins, in terms of traffic, although there may be a separate flag for "high-traffic members". +5. Group integrity validation to ensure the consistent state for all members - message DAG (with support for irreversible deletion, but otherwise immutable), conversation state (mutable), membership roster, group profile and policies/preferences. That implies the requirement for deterministic conflict resolution strategy. +6. Efficient mechanism to catch up with missed messages (e.g., member was offline, or the group delivery was suspended - there are many requests for such features) - via files, with explicit support for history gaps. + +## Design ideas / approaches + +### Abstractions for group state, integrity and conflict resolution + +Group can be considered as a distributed state machinem, that requires some state machine replication protocol to achieve consistency, with the following components of the state: + +#### Events history. + +There are some recent attempts [1], [2] to agree on a single linear history of events, when initially due to a concurrency a state machine history forks into a tree, and then the job of participating nodes to agree on a single linear history of events. This is a general approach in most cryptocurrency blockchains where linear history of transations prevents double spends. + +The consensus about linear history seems costly to achieve and in the context of group communication seems unnecessary in most cases. This is different from cryptocurrency event history, where all events represent the change of ownership in some asset, and therefore there should be a consensus about the sequence of all events. But even in cryptocurrency blockchains this could have been achieved without a single linear history if there were some additional restriction imposed on each asset record that there can be no more than one transaction per asset between some comparatively rare "finalization/commit" records that merge all forks, and no linearity required between these events. In case of cryptocurrency blockchain it would substantially increase throughput of all transactions at the cost of reducing the frequency of transactions with each given asset. + +``` + A (finalized state) + / \ + B C + \ / \ + D E + \ / + F (finalized state) +``` + +The diagram above is a sample of events graph (directed acyclic graph, or DAG) where each event references one or several parents by incuding their identifiers (consisting of peer identifier and sequential message number from this peer) and hashes to validate the integrity of this graph for all peers (Merkle DAG). If each event represents some irreversible action (e.g. transaction with the asset in a blockchain), then only one such event is allowed between finalized states A and F, and if more than one event happens between these states then all such events are rejected. + +The advantage of group communication over blockchain is that there is no strong requirement to have an agreement on the linear history of events, except when events change some parts of group state (see below) in a contradictory way. Most events in the group communication are simple message additions to the conversation history, and while it has to be generally consistently ordered, some inconsistency can be preferable from the point of user experience. + +Consider different approaches to the user experience in the presence of concurrently sent messages. Approach 1 dictates that messages can be only appended to the group history as it is seen by the user, but without gaps in DAG. That means that once the peer appends the message nothing can be appended above it, but the received messages can be inserted in linearised view of message history (this needs to be better formalized what "avoiding gaps in DAG" means, but in general, event parents should be above the child in the linearized history, even if they are received after the child, and the ordering between many parents of the same child, and between many children of the same set of parents, can be determined by some timestamp or some other attribute of these parents or children. It cannot be determined by the child itself, as there can be more than one child referencing the same set of parents, and they would define a different order). + +``` +A B +| X | +C D - both these childs would refer to parents A and B, but they may define different order +``` + +Such user experience is present, for example, in WhatsApp, and its benefit is that a peer is less likely to miss messages added to the past of the message history. + +Approach 2 dictates that all peers should have the same linear history of messages, even if it means inserting messages very early in the conversation history. In case of centralized system this order can be maintained quite easily by using the server timestamp. In case of decentralized system we cannot rely on timestamps at all, as clocks can be out of sync, and timestamp-based ordering (that SimpleX Chat uses now) would contradict parent-is-always-above principle (such violations are experienced in SimpleX Chat as replies to messages are shown above the messages themselves). There are multiple approaches on resolving these conflicts, including sorting messages by their hash. + +The advantage of approach 2 is that events will be in same order for all peers, and in case some members see local peer replies under some messages (that may be unrelated to this reply), all other members, including the local peer. The disadvantage is that messages can be missed. + +Imagine this conversation in both approaches: + +``` +Approach 1: + +Alice view Bob view Charlie view +---------- ---------- ------------ + B: let's make smth +B: let's make smth B: let's make smth +A: I'm in! A: I'm in! C: better let's break smth +C: better let's break smth C: better let's break smth A: I'm in! + + or Bob can see C, A + + +Approach 2: + +Alice view Bob view Charlie view +---------- ---------- ------------ + B: let's make smth +B: let's make smth B: let's make smth + C: better let's break smth C: better let's break smth +C: better let's break smth A: I'm in! A: I'm in! +A: I'm in! + +``` + +Alice clearly agreed to make something, but to Charlie it looks like she agreed to break something, and to Bob it can look either way, depending to the approach to ordering of two children. What is worse in this case, compared to the approach 2, is that Alice is unaware of it, but even if she were aware, she still cannot prove later to what she agreed without access to the parents of the event. + +In case of approach 2 the conversation history changes in a way that it can be missed, but in the end it converges to the same linear view. + +In both cases having only the linear history is insufficient for peers to prove what was the context of their messages, and this context defines the meaning - all peers should have visibility of the actual graph. + +In the presense of such graph visibility, the Approach 1 seems better, as it reduces changes in the linear conversation history, provides a better user experience, and reduces the likelihood of missing the message. + +Irrespective of how the DAG of events is presented and interpreted, DAG itself can be synchronised between members, as in the absense of malicious peers it has no conflicts by design - members can concurrently extend this graph at any time, referencing all peers visible to them at a time. + +Some peers may fail to include all parents visible to them, and that would reduce graph linearity, but it won't by itself create conflicts. This can be addressed by a policy that messages failing to reference parents older than some threshold are rejected, so that group cannot be in a partitioned state indefinitely. + +This graph acts as a proof that messages were delivered. + +#### Group profile. + +Group profile includes all any visible or invisible data about group available to all members, and also all conversation preferences and policies. Currently we only allow modifying the group profile to group owners, to reduce the possibility of the conflicts, without any conflict resolution strategy. + +To achieve consistency of group profile changes the following can be considered: + +1. Profile changes can be split to multiple event types, to reduce the possibility of conflicts. While it doesn't solve the problem of conflict resolution, it makes them less likely, and improves user experience. + +2. Even without splitting profile changes to multiple vent types, the scope of the change can be determined as the diff between the previous and the new state. + +3. Similar idea to having scoped or unscoped "commit" events can be applied to profile changes, so that if two changes happen between commit events, only one of them will be accepted. This requires sending such "commit" events periodically, even in the absense of changes. + +#### Group membership + +This is the list of all members and their permissions. Events adding members do not create conflicts, even if they happen in different branches of the trea. Events removing members and changing members roles can create conflicts, for example in cases when two admin members attempt to remove each other concurrently. + +To resolve conflict, there can be three approaches (that also applies to group profile changes): + +- agree on event ordering. That will make one event succeed, and another rejected. This ordering has to be agreed consistently by all members, so either some consensus protocol is needed, which is complex and slow, or some arbitrary prioritization, e.g. ordering by peer ID, but this seems arbitrary, unfair or revealing additional metadata (e.g. if seniority of peers is determined by the time of joining the group). +- let both conflicting events succeed, when possible. This can be possible when members try to remove each other concurrently, or to downgrade the role. This approach seems bad, as it can leave the group in the unmanageable state (all owners removed), and it is not possible in general case when it is applied to the same member or to group profile. +- let both events fail. This seems the most reasonable approach, but it means that the action either should be delayed until "commit" event (e.g., when the action is destructive, irreversible, or can prevent some other actions before commit - e.g. removing member or role downgrade), or it may need to be reversed, and, possibly, subsequent actions need to be replaced. + +#### Group operation + +So, while most group events can be happening at any time (message additions, updates and deletions), some events require linearization and "proposed"/"accepted"/"committed" states. + +Some sort of consensus protocol is still needed for all membership changes other than member addition, when the members who have appropriate permissions can vote for the change, requiring defined share of the members who can perform this action to accept this change, before it is committed. + +### Scalable message dissemination + +The previous part presented approaches to the consistency of all parts of the group state. It relies on the efficient approach to distibuting each group event to all members of the group. + +The current approach when the event creator simply sends it to all members is not viable: + +- too much traffic for the sender. +- too large delay in message delivery in the period before the new member connected to all members. +- creating a fully connected graph is expensive and not scalable. + +An open question is whether each member in the group should even have the full list of group members and their profile data - for some group sizes it may also be expensive. Even with the client-centric approach to group design it may be enough to have only "high capacity peers" storing the full member list, and the other members only having the knowledge of the active members - who contributed at least one message in the observable history. + +[3] describes an efficient randomized algorithm for disseminating updates between distributed database sites that while doesn't guarantee the full propagation of the update, achieves a very high degree of the probability that all members receives the updates. The algorithm considers mechanics of distribution similar to epidemics, and apply the same approach to estimate the probability. When there is new update, the peer that created this update sends it to other randomly chosen peers with some fixed interval between sending these updates. As soon as a peer receives the update, they start start sending it other randomly chosen peers. In one of the variants of this algorithm, the peers that receive the update provide the feedback to the sender whether they saw this update before or not. If the recipient saw the update, then the sender stops broadcasting it with `1/k` probability. In the "blind" variant, the sender decides to stop broadcasting with `1/k` probability without the feedback. In addition to "feedback"/"blind" variants, there are also "coin" (described)/"counter" variants. In "counter" variant the sender sends the update exactly `k` times. The paper shows that "feedback" has little impact on the dissemination completeness, and that the "counter" is more efficient than "coin". It also shows that the "residue" - the share of the peers that didn't receive the update - is `e ^ (-k)` where `k` is the number of messages each peer sends (in case of "coin" variant - on average). + +The suggestion is that we can apply a similar idea to disseminating the messages (events) in the group. Given that we validate the integrity of the group using Merkle DAG, the peers will be able to detect any missed updates, and request them. Instead of deciding which members to send the updates to we can first decide which members to connect to, and then choose members to receive the updates - randomly in both cases. If we aim to the average number of members **not** receiving updates being 0.1 (that is, one member misses one out of 10 messages, until the next one is sent), then depending on the group size `N` each member should broadcast the message to `k` peers, where `k` is: + +| N | k | +| ---- | --- | +| 100 | ~7 | +| 1000 | ~9 | +| 10k | ~13 | +| 100k | ~14 | +| 1m | ~16 | + +Reducing the group size 10x in above table would reduce probability of one member missing any given message to 1%. + +We can also consider that some members will send a higher number of messages (e.g., group owners/admins or members with high bandwidth devices), but it has to be estimated whether this will make a material impact on the number of messages sent. + +Whether to use "coin" or "feedback" approach can depend on whether delivery receipts are enabled, although that would complicate the algorithm, and might not work well in case of some members have delivery receipts disabled. + +### Achieving consensus for group level events + +A small share of group events can create contraditions in group state: +- removing members +- changing members roles +- changing group profile + +Currently these events are sent to all members as soon as they are created, and members act on these events as soon as they receive them. For group state to be consistent, all members will have to wait until the consensus between group admins is achieved. + +We could delay broadcasts to all members only after the consensus between admins is achieved. We also could have admins using the old "direct mail" approach (using the terminology from [3] - which is the current approach). So one of the options could be to achieve the consensus between group admin and owners before broadcasting updates about group profile and membership to all members. + +### References + +[1] Trees and Turtles: Modular Abstractions for State Machine Replication Protocols. https://arxiv.org/pdf/2304.07850.pdf + +[2] Efficient Replication via Timestamp Stability. https://arxiv.org/pdf/2104.01142.pdf + +[3] Epidemic Algorithms for Replicated Database Maintenance. https://dl.acm.org/doi/pdf/10.1145/43921.43922 From 734b920fdea8c0bb40a978546d7481d4bc6197bb Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 23 May 2023 09:54:56 +0200 Subject: [PATCH 10/15] android: fix translations (#2483) --- apps/android/app/src/main/res/values-es/strings.xml | 2 +- apps/android/app/src/main/res/values-nl/strings.xml | 2 +- apps/android/app/src/main/res/values-pt-rBR/strings.xml | 6 +++--- apps/android/app/src/main/res/values-zh-rCN/strings.xml | 6 +++--- apps/android/app/src/main/res/values-zh-rTW/strings.xml | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml index 202d8f2589..4dcde92857 100644 --- a/apps/android/app/src/main/res/values-es/strings.xml +++ b/apps/android/app/src/main/res/values-es/strings.xml @@ -141,7 +141,7 @@ conectando (invitación de presentación ) conectando (aceptado) conectando (anunciado) - conexión<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"connection ID\" example=\"1\"> + conexión %1$d Conectar mediante enlace / Código QR El contacto y todos los mensajes serán eliminados. ¡No se puede deshacer! Contacto verificado diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index fd98c0b6e8..6d4a34a82b 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -473,7 +473,7 @@ Meer verbeteringen volgen snel! Nodig leden uit Verberg contact en bericht - Om het te gebruiken <b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">batterijoptimalisatie uitschakelen</b> voor <xliff:g xmlns:xliff=\"urn:oasis: names:tc:xliff:document:1.2\" id=\"appName\">SimpleX</xliff:g> in het volgende dialoogvenster. Anders worden de meldingen uitgeschakeld. + Om het te gebruiken batterijoptimalisatie uitschakelen voor SimpleX in het volgende dialoogvenster. Anders worden de meldingen uitgeschakeld. Als u ervoor kiest om te weigeren, wordt de afzender NIET op de hoogte gesteld. Onmiddellijk heeft %1$s uitgenodigd diff --git a/apps/android/app/src/main/res/values-pt-rBR/strings.xml b/apps/android/app/src/main/res/values-pt-rBR/strings.xml index f6a74d6e9d..9df7a3b43c 100644 --- a/apps/android/app/src/main/res/values-pt-rBR/strings.xml +++ b/apps/android/app/src/main/res/values-pt-rBR/strings.xml @@ -687,7 +687,7 @@ VOCÊ MENSAGENS E ARQUIVOS Seu banco de dados de chat - Você removeu<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"member profile\" example=\"alice (Alice)\"> + Você removeu %1$s removido saiu proprietário @@ -794,7 +794,7 @@ Excesso de vídeos! Solicitou receber o vídeo Apenas 10 vídeos podem ser enviados ao mesmo tempo - Seu contato enviou um arquivo maior que o tamanho máximo permitido (<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"maxFileSize\">). + Seu contato enviou um arquivo maior que o tamanho máximo permitido (%1$s). O arquivo será recebido quando seu contato concluir o upload. Alguns servidores falharam o teste: Salvar servidores @@ -893,7 +893,7 @@ Para proteger o fuso horário, os arquivos de imagem/voz usam UTC. formato de mensagem desconhecido via link de grupo - via<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"serverHost\" example=\"smp.simplex.im\"> + via %1$s A menos que seu contato tenha excluído a conexão ou este link já tenha sido usado, pode ser um bug - por favor, relate-o. \nPara se conectar, peça ao seu contato para criar outro link de conexão e verifique se você tem uma conexão de rede estável. O teste falhou na etapa %s. diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index 9eb897557b..78e1e06846 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -117,8 +117,8 @@ 开启音频 已要求接收图片 一个单独的TCP连接(和SOCKS凭证)将被用于,用于您在应用程序中的每个聊天资料 - 每个联系人和群组成员</b> 将使用单独的 TCP 连接(和 SOCKS 凭证)<b>。 -\n<b>请注意</b>:如果您有很多连接,您的电池和流量消耗可能会大大增加,并且某些连接可能会失败。 + 每个联系人和群组成员 将使用单独的 TCP 连接(和 SOCKS 凭证)。 +\n请注意:如果您有很多连接,您的电池和流量消耗可能会大大增加,并且某些连接可能会失败。 返回 添加新联系人:为您的联系人创建一次性二维码。 最长续航 。您只会在应用程序运行时收到通知(无后台服务)。 @@ -950,7 +950,7 @@ %dm %dmth 等待文件中 - 您的联系人发送的文件大于当前支持的最大大小 (<xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"maxFileSize\">%1$s</xliff :g>). + 您的联系人发送的文件大于当前支持的最大大小 (%1$s). 当您的连接请求被接受后,您将可以连接,请稍等或稍后检查! 使用服务器 您的服务器地址 diff --git a/apps/android/app/src/main/res/values-zh-rTW/strings.xml b/apps/android/app/src/main/res/values-zh-rTW/strings.xml index 7c0174ecd6..01e7c2067d 100644 --- a/apps/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rTW/strings.xml @@ -149,7 +149,7 @@ 重複的顯示名稱! 一個單獨的 TCP 連接(和 SOCKS 憑證)將用於每個聯絡人和群組內的成員。 \n請注意:如果你有很多連接,你的電話電量和數據流量的消耗率會大大增加,一些連接有機會會連接失敗。 - 一個單獨的 TCP 連接(和 SOCKS 憑證)將用於<b>每個聊天室的設定<b>。 + 一個單獨的 TCP 連接(和 SOCKS 憑證)將用於 每個聊天室的設定 返回 省電模式運行中,關閉了背景通知服務和定期更新接收訊息。你可以在通知設定內重新啟用。 匿名聊天模式 @@ -366,7 +366,7 @@ 傳送實況訊息 - 這會即時顯示你在輸入中的文字 (掃描或使用剪貼薄貼上) 權限被拒絕! - 為了保護你的私隱,<b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\">SimpleX</xliff:g> 有一個後台通知服務 – 它每天使用你幾 % 的電量。 + 為了保護你的私隱,SimpleX 有一個後台通知服務 – 它每天使用你幾 % 的電量。 定期通知 每十分鐘會檢查一次訊息,最快可設為每分鐘檢查一次 訊息文字 @@ -424,7 +424,7 @@ 顏色 如何使用你的伺服器 使用連結連接 - 💻 桌面版:在應用程式內掃描一個已存在的二維碼,透過 <b>掃描二維碼 <b>。 + 💻 桌面版:在應用程式內掃描一個已存在的二維碼,透過 掃描二維碼 設定 這個二維碼不是一個連結! 建立一次性邀請連結 @@ -879,7 +879,7 @@ \n1. 訊息將在傳送至客戶端後兩天或在伺服器內三十天時過時。 \n2. 訊息解密失敗,因為你或你的聯絡人用了舊的數據庫備份 \n3. 連接被破壞。 - 只有客戶端裝置才會儲存你的個人檔案、聯絡人,群組,所有訊息都會經過<b>兩層的端對端加密<b>。 + 只有客戶端裝置才會儲存你的個人檔案、聯絡人,群組,所有訊息都會經過 兩層的端對端加密 請放置你的密碼於安全的地方,如果你遺失了密碼,將不可能修改你的密碼。 停止聊天室以匯出對話,匯入或刪除對話數據庫。當聊天室停止後你將不能接收或傳送訊息。 你正在使用匿名聊天模式進入此群組 - 為了避免分享你的真實個人檔案,邀請聯絡人是不允許的。 From 0160684004d452848e6f3c1030637fabfd655ff1 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Tue, 23 May 2023 11:19:13 +0300 Subject: [PATCH 11/15] android: periodic notifications and service start fix when database migrates (#2488) * android: periodic notifications and service start fix when database migrates * less timeout --- .../java/chat/simplex/app/SimplexService.kt | 17 +++++++++++++++-- .../app/views/helpers/MessagesFetcherWorker.kt | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt b/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt index 63e31cb226..497dc2ac86 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt @@ -9,9 +9,9 @@ import android.util.Log import androidx.core.app.NotificationCompat import androidx.core.content.ContextCompat import androidx.work.* +import chat.simplex.app.model.ChatController import chat.simplex.app.views.helpers.* -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext +import kotlinx.coroutines.* // based on: // https://robertohuertas.com/2019/06/29/android_foreground_services/ @@ -86,6 +86,7 @@ class SimplexService: Service() { isStartingService = true withApi { val chatController = (application as SimplexApp).chatController + waitDbMigrationEnds(chatController) try { Log.w(TAG, "Starting foreground service") val chatDbStatus = chatController.chatModel.chatDbStatus.value @@ -324,6 +325,18 @@ class SimplexService: Service() { notificationManager.cancel(PASSPHRASE_NOTIFICATION_ID) } + /* + * When the app starts the database is in migration process. It can take from seconds to tens of seconds. + * It happens in background thread, so other places that relies on database should wait til the end of migration + * */ + suspend fun waitDbMigrationEnds(chatController: ChatController) { + var maxWaitTime = 50_000 + while (chatController.chatModel.chatDbStatus.value == null && maxWaitTime > 0) { + delay(50) + maxWaitTime -= 50 + } + } + private fun getPreferences(context: Context): SharedPreferences = context.getSharedPreferences(SHARED_PREFS_ID, Context.MODE_PRIVATE) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/MessagesFetcherWorker.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/MessagesFetcherWorker.kt index 17b856017d..5b18ff5220 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/MessagesFetcherWorker.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/MessagesFetcherWorker.kt @@ -56,6 +56,7 @@ class MessagesFetcherWork( try { withTimeout(durationSeconds * 1000L) { val chatController = (applicationContext as SimplexApp).chatController + SimplexService.waitDbMigrationEnds(chatController) val chatDbStatus = chatController.chatModel.chatDbStatus.value if (chatDbStatus != DBMigrationResult.OK) { Log.w(TAG, "Worker: problem with the database: $chatDbStatus") From c32e45f6862767e9530f4416197a14853456b997 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 23 May 2023 10:25:32 +0200 Subject: [PATCH 12/15] identity RFC (#151) --- rfcs/2021-12-11-identity.md | 82 +++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 rfcs/2021-12-11-identity.md diff --git a/rfcs/2021-12-11-identity.md b/rfcs/2021-12-11-identity.md new file mode 100644 index 0000000000..fc207b6c97 --- /dev/null +++ b/rfcs/2021-12-11-identity.md @@ -0,0 +1,82 @@ +# Identity layer for SimpleX Chat + +## Motivation + +While lack of global identity provides high level of meta-data privacy and there are communication scenarios where not having to use public identity is desirable (e.g., a customer asking a question in online store before making a purchase), many other communication scenarios require identity (e.g., online store itself would benefit from having a public address via which it can be connected to). + +We have already added [user contact addresses]() represented as links/QR codes, but they are impossible to memorize or to say in the conversation - they require digital transmission, while in many scenarios analogue transmission would be more convenient. + +There is already a global addressing system in use - email addresses. Email is the only communication system in existence that is fully decentralized and has a quality called "address portability" - that is, users can keep an address while changing the server provider. It is not true in 100% of cases - e.g. if you have an address in gmail.com domain, you cannot move it to another provider. But if you use Google Mail to host your email address in another domain, e.g. as I do with my evgeny@poberezkin.com address, you can move it to another provider without any restriction - it only requires a simple change in the domain DNS record. + +Email identities have multiple problems though: +- your providers do not only know that you have an identity on the network, they also know everybody who sends you messages. +- you cannot change your address without losing your contacts - you have to tell all your contacts your new address. +- providers cannot guarantee, in most cases, that the sender of the email has the address they claim they have. At best, they can check the sending domain using DKIM and SPKIF, but these measures are not enabled by default, require complex additional configuration and most small users do not configure it correctly. + +The problems with our current user contact address: +- it allows to send traffic directly to user's device (via SMP server), there is no proxy to implement anti-spam/anti-DoS protection. While we can mitigate it by throttling the reception of contact requests on the client side, the attacker can keep the queue full and make the address unreachable. And if we don't throttle, the client can receive unlimited amount of traffic via contact requests and run out of disk space. Having identity server as a proxy allows to manage this problem. + +The identity layer we add to SimpleX Chat has to keep the advantages of email addressing and to solve these problems as well. + +## Product requirements + +- the identity of the user in SimpleX Chat must be the same as the email address they have access to - the identity server should prove it while provisioning the address. +- the email access should not be used to access SimpleX address once it's provisioned. +- the identity server and network observers should not know who sends messages to the user's identity - sender's addresses should be only visible to the recipient. +- changing or deleting address/identity should not make you losing the contacts - we already have this quality with our user contact addresses. +- for every email address user possesses, they should be able to create multiple SimpleX addresses that can be used in different contexts using SMTP `+` extension syntax (TBC what it is called). This extension in case of SimpleX should be meaningful - that is if a given address does not exist, the address should not be reachable. +- Possibly, the user should be able to decide whether the server should screen for known `+` addresses or if it should be screened on the device, where the server only checks the main part of the address or uses some patterns for `+` part. It's a trade-off - screening on the device hides the actual addresses from the identity server, but increases the amount of spam traffic the device has to process, while screening on the server reduces the spam traffic, but reduces user privacy, as the server knows all the sub-addresses. From the UX point of view there would be no difference - the user will not see non-existing `+` extensions, unless they choose to receive connection requests to their main address (that could be put in a separate folder). +- The user should be able to decide whether they want to receive connection requests from users without verified SimpleX addresses (all addresses are verified). +- The senders' addresses should be cryptographically verified by delivering some probe to that address and receiving the reply, transparently to the user, before the connection request is shown to the user. +- Identity server should be accessed via chat clients, it should not have its own separate UI. +- The client of the address owner should be able to periodically confirm that the identity server does not perform MITM attack on the address to see the senders (by substituting the owner's public key for that address). + +Post MVP: +- we should support identity transfer, e.g. if email changes the owner. +- we should have some cool-down period for identity transfer, to the reduce risks of malicious address takeover. + +## Design considerations + +- Identity server should communicate with the clients via SMP protocol +- It probably should use the same message format as we use for chat, but in a different namespace (e.g., `i` - we currently use `x` for chat messages). +- Having received the request to provision the address, it should send an email to this address to verify it, following the best anti-SPAM practices and allowing recipients to opt out of further emails. +- Client should determine which SimpleX identity server to use via some DNS record we decide on - we should support TXT and see if we can register something in IANA for DNS servers that support custom records. +- In case domain does not have registered identity server, client could default to hard-coded identity server we provide, that would have a list of domains we allow creating addresses in. + +## Preliminary protocol design + +It is assumed that identity server has it's own contact address, with the same syntax as user's contact address, but with a different mode, e.g. `identity`. Or, possibly, we should use the same `contact` namespace. TBC + +### Establishing permanent connections with identity server + +This connection is only needed for requesting and managing provisioned addresses - this connection identifies the user to the server. As some actions must be anonymous, they should not be sent via this connection. + +To provision the connection the client would send `INV` agent message, same as when connecting with other users, but without any user profile. + +### Requesting the address + +1. Client sends `i.addr.new ` message to identity server via established permanent connection (`contact_connection_request` will be used by the server to forward connection requests to, `public_signature_key` would be used to confirm the identity to the server on all operations with the address. Possibly we don't need it and can rely on SMP authorization/connections, TBC). `email` can include `+` extension or be catch all. +2. Identity server responds with `i.addr.id ` message to confirm that the request is received and being processed. +3. Unless the main address was already confirmed (e.g. when the client requests additional `+` extension to the previously created address), the identity server will send email to this address with the unique connection request uri that the user should use to confirm this address. Possibly it should have separate mode, e.g. `confirm_address` TBC. +4. Once the user confirms or rejects the address. + - If address is confirmed (see below), the server will: + - create new SMP queue(s) for the address that it would process. + - send `i.addr.conf ` message to confirm that this identity is now associated with the user (including the created queue(s)). Public key in `connection_request_uri` must be the same as the one the user passed to the server, if it is different it means server does not function correctly and this address should not be used. + - if the address is rejected, the server will send `i.addr.rejected `. Servers can have some policies to allow limited number of rejections per confirmed connection, and also block creating the new connections from IP addresses that create too many address requests (and in any case should throttle it per IP address - not MVP problem to solve). + +Once the address is confirmed the chat client will notify the user, and the user can configure in the client which `+` extensions should be allowed (in case catch-all was registered with the server) - not MVP. The user can now share this address with other users. + +### Sending contact requests to the address + +- the sender's client should determine which identity server to use - either via DNS lookup and in case the server is absent, via our identity server. +- the sender's client should send message to the identity server's unsecured public queue. From SMP syntax perspective it should probably be SMP confirmation, TBC, the message itself will be `i.addr.req ` - note that this does not expose sender's identity in any way. +- the identity server should respond with a message queue provisioned specifically for this address with `i.addr.con `, where `connection_request` is the one created specifically for this address and contains recipient's public key. + +The process above can be used by the address owner to periodically verify that the server does not substitute recipient's public key. + +The server should always respond with `i.addr.con ` even if the address is not registered, to avoid address-scanning - the response time should be consistent, so the server would have a pool of queues for such invalid responses. + +- having received this response, the sender would send the message encrypted with the recipient's public key (or derived key from recipient's public key and sender's public key sent together with the message) e.g. `i.addr.hello ` +- the server forwards it to the recipient (the server cannot decrypt this message), with some anti-DDoS filters. +- recipient decrypts the message and repeats the same process with the sender's address. This message would be double encrypted, to avoid sharing recipient's address, in case sender used somebody else's address. +- if the sender used the address they control they would receive the confirmation from the recipient, and would be able to send this confirmation back at which point the recipient user will be notified. From 13267014403c988e26b57c615c4fe24e96c387c9 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Tue, 23 May 2023 12:43:18 +0400 Subject: [PATCH 13/15] mobile: remove file on apiSendMessage error (#2487) --- .../main/java/chat/simplex/app/views/chat/ComposeView.kt | 8 ++++++-- .../Shared/Views/Chat/ComposeMessage/ComposeView.swift | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt index 3b770e55f6..d00548f755 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt @@ -376,8 +376,12 @@ fun ComposeView( live = live, ttl = ttl ) - if (aChatItem != null) chatModel.addChatItem(cInfo, aChatItem.chatItem) - return aChatItem?.chatItem + if (aChatItem != null) { + chatModel.addChatItem(cInfo, aChatItem.chatItem) + return aChatItem.chatItem + } + if (file != null) removeFile(context, file) + return null } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift index f853103b4d..a261471a51 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift @@ -726,6 +726,9 @@ struct ComposeView: View { } return chatItem } + if let file = file { + removeFile(file) + } return nil } From e65dcf51b081df862d18433770405be7eaca92e1 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Tue, 23 May 2023 10:48:08 +0200 Subject: [PATCH 14/15] rfc: community moderation (#2489) --- {rfcs => docs/rfcs}/2021-12-11-identity.md | 0 docs/rfcs/2023-05-22-groups-moderation.md | 28 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) rename {rfcs => docs/rfcs}/2021-12-11-identity.md (100%) create mode 100644 docs/rfcs/2023-05-22-groups-moderation.md diff --git a/rfcs/2021-12-11-identity.md b/docs/rfcs/2021-12-11-identity.md similarity index 100% rename from rfcs/2021-12-11-identity.md rename to docs/rfcs/2021-12-11-identity.md diff --git a/docs/rfcs/2023-05-22-groups-moderation.md b/docs/rfcs/2023-05-22-groups-moderation.md new file mode 100644 index 0000000000..c92b284b61 --- /dev/null +++ b/docs/rfcs/2023-05-22-groups-moderation.md @@ -0,0 +1,28 @@ +# Groups/Community moderation and participation + +## Problem + +There are a lot of advantages to the anonymous participation in communities, and our users are really excited about it. +Users can express yourself freely without fear of being judged, and without these opinions having impact on their employment and/or relationships. The positive effects of anonymous participation can already be seen on Reddit, even though on Reddit users usually have a single identity and global platform-wide reputation (aka karma) - the engagement and polarity of views expressed on Reddit is much higher than in platforms with a single real-life identity. Participating in different communities under different identities gives people additional choices, of not being associated with some discussions, and yet participating in them. Quoting Oscar Wilde: "Give a man a mask and he’ll tell you the truth." + +But anonymous participation comes with a large downside: people are able to abuse anonymity, by posting inappropriate content and comments, spamming group, and making community inappropriate to all other members. That is what happened with Usenet - its growth killed it. Currently we have basic moderation capabilities allowing admins to remove messages of the members and prevent them from sending messages, but for groups with the public link nothing stops them from joining again with a different identity. The only current solution is to make all new members joining without posting permissions, and then manually grant them to the trusted users, but it doesn't scale well to large groups. + +## Solution + +There are two possible solutions: +- rely on members reputation score, that will be calculated based on their actions and community reactions. Similar approaches are used in Reddit and in Habr.com (a Russian IT community). When a member joins a community, they are assigned 0 or some low score that either prevents posting completely or allows very limited posting. As the member participation is seen by the community as positive (e.g., more positive than negative reactions), the reputation score would grow allowing more participation (longer posts, image posts, more frequent posts, etc.). Community rules can allow transferring some of the reputation score to the new members, so members joining by recommendation can have higher initial score (Reddit doesn't allow it, Habr.com does), but if group admins/owners block a member such reputation transfers should also be blocked. +- for public groups that are registered with the discovery / search servers, these search servers can employ these policies as a condition: + - discovery server must be granted administrative rights to be able to moderate messages and block members. + - an advertised link to join the group should be controlled by discovery server (so that the group owners can't make discovery server see a content that is different from the actual group content). + - group policy within the acceptable range should be required (e.g. reputation scoring, limited participation for the new members, depending on group size, etc.). + - discovery server would run language and image recognition models to detect inappropriate content and remove it automatically - what is appropriate would be determined by the group policy. + +These approaches are not mutually exclusive, most likely they need to be combined. + +As the group design remains decentralized, some members can obviously modify the code of the client software to post content in violation of their current permissions. But as the same restrictions would be applied by other clients, they simply won't see this content, and the scoring mechanics can further penalize it. + +Both solutions rely on group state being consistent, so some of the improvements for group consistency from [the previous RFC](./2023-05-02-groups.md) are required for them to work reliably. + +The actual scoring mechanics require formalization. The initial point can be made the same as on some combination of Reddit and Habr.com ideas, and then tweaked to take into account that the reputation scores are community-wide and group-wide. + +Once SimpleX adds [identity layer](./2021-12-11-identity.md), the discovery server can start supporting the reputation scoring for the identity across multiple communities for people who opt in into it. From bcbfc1758e9e2eb4d451f143457cfa1a7ea51b78 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Tue, 23 May 2023 13:51:23 +0400 Subject: [PATCH 15/15] core: catch errors on archive import (#2486) * core: catch errors on archive import * return list * refactor * rename * rename * refactor * Update src/Simplex/Chat/Archive.hs Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> * fix syntax * refactor * CRArchiveImported --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- src/Simplex/Chat.hs | 7 +++++-- src/Simplex/Chat/Archive.hs | 32 +++++++++++++++++++++----------- src/Simplex/Chat/Controller.hs | 1 + src/Simplex/Chat/View.hs | 13 +++++++------ 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 6a40d51908..54d7bddbfa 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -448,7 +448,10 @@ processChatCommand = \case ts <- liftIO getCurrentTime let filePath = "simplex-chat." <> formatTime defaultTimeLocale "%FT%H%M%SZ" ts <> ".zip" processChatCommand $ APIExportArchive $ ArchiveConfig filePath Nothing Nothing - APIImportArchive cfg -> withStoreChanged $ importArchive cfg + APIImportArchive cfg -> checkChatStopped $ do + fileErrs <- importArchive cfg + setStoreChanged + pure $ CRArchiveImported fileErrs APIDeleteStorage -> withStoreChanged deleteStorage APIStorageEncryption cfg -> withStoreChanged $ sqlCipherExport cfg ExecChatStoreSQL query -> CRSQLResult <$> withStore' (`execSQL` query) @@ -1276,7 +1279,7 @@ processChatCommand = \case chatRef <- getChatRef user chatName let mc = MCText msg processChatCommand $ APIUpdateChatItem chatRef chatItemId live mc - ReactToMessage add reaction chatName msg -> withUser $ \user -> do + ReactToMessage add reaction chatName msg -> withUser $ \user -> do chatRef <- getChatRef user chatName chatItemId <- getChatItemIdByText user chatRef msg processChatCommand $ APIChatItemReaction chatRef chatItemId add reaction diff --git a/src/Simplex/Chat/Archive.hs b/src/Simplex/Chat/Archive.hs index fab53753c4..d05fccfcf7 100644 --- a/src/Simplex/Chat/Archive.hs +++ b/src/Simplex/Chat/Archive.hs @@ -48,7 +48,7 @@ exportArchive cfg@ArchiveConfig {archivePath, disableCompression} = let method = if disableCompression == Just True then Z.Store else Z.Deflate Z.createArchive archivePath $ Z.packDirRecur method Z.mkEntrySelector dir -importArchive :: ChatMonad m => ArchiveConfig -> m () +importArchive :: ChatMonad m => ArchiveConfig -> m [(Maybe String, ChatError)] importArchive cfg@ArchiveConfig {archivePath} = withTempDir cfg "simplex-chat." $ \dir -> do Z.withArchive archivePath $ Z.unpackInto dir @@ -57,26 +57,36 @@ importArchive cfg@ArchiveConfig {archivePath} = backup agentDb copyFile (dir archiveChatDbFile) chatDb copyFile (dir archiveAgentDbFile) agentDb - let filesDir = dir archiveFilesFolder - forM_ filesPath $ \fp -> - whenM (doesDirectoryExist filesDir) $ - copyDirectoryFiles filesDir fp + copyFiles dir filesPath `catchError` \e -> pure [(Nothing, e)] where backup f = whenM (doesFileExist f) $ copyFile f $ f <> ".bak" + copyFiles dir filesPath = do + let filesDir = dir archiveFilesFolder + case filesPath of + Just fp -> + ifM + (doesDirectoryExist filesDir) + (copyDirectoryFiles filesDir fp) + (pure []) + _ -> pure [] -withTempDir :: ChatMonad m => ArchiveConfig -> (String -> (FilePath -> m ()) -> m ()) +withTempDir :: ChatMonad m => ArchiveConfig -> (String -> (FilePath -> m a) -> m a) withTempDir cfg = case parentTempDirectory (cfg :: ArchiveConfig) of Just tmpDir -> withTempDirectory tmpDir _ -> withSystemTempDirectory -copyDirectoryFiles :: MonadIO m => FilePath -> FilePath -> m () +copyDirectoryFiles :: ChatMonad m => FilePath -> FilePath -> m [(Maybe String, ChatError)] copyDirectoryFiles fromDir toDir = do createDirectoryIfMissing False toDir fs <- listDirectory fromDir - forM_ fs $ \f -> do - let fn = takeFileName f - f' = fromDir fn - whenM (doesFileExist f') $ copyFile f' $ toDir fn + foldM copyFileCatchError [] fs + where + copyFileCatchError fileErrs f = + (copyDirectoryFile f $> fileErrs) `catchError` \e -> pure ((Just f, e) : fileErrs) + copyDirectoryFile f = do + let fn = takeFileName f + f' = fromDir fn + whenM (doesFileExist f') $ copyFile f' $ toDir fn deleteStorage :: ChatMonad m => m () deleteStorage = do diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 5ec15ee6c5..6a73432c10 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -524,6 +524,7 @@ data ChatResponse | CRMessageError {user :: User, severity :: Text, errorMessage :: Text} | CRChatCmdError {user_ :: Maybe User, chatError :: ChatError} | CRChatError {user_ :: Maybe User, chatError :: ChatError} + | CRArchiveImported {fileErrors :: [(Maybe String, ChatError)]} | CRTimedAction {action :: String, durationMilliseconds :: Int64} deriving (Show, Generic) diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 88f11256f1..25a4b55ca8 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -49,7 +49,7 @@ import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Encoding import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (dropPrefix, taggedObjectJSON) -import Simplex.Messaging.Protocol (AProtoServerWithAuth (..), AProtocolType, ProtocolServer (..), ProtoServerWithAuth, ProtocolTypeI, SProtocolType (..)) +import Simplex.Messaging.Protocol (AProtoServerWithAuth (..), AProtocolType, ProtoServerWithAuth, ProtocolServer (..), ProtocolTypeI, SProtocolType (..)) import qualified Simplex.Messaging.Protocol as SMP import Simplex.Messaging.Transport.Client (TransportHost (..)) import Simplex.Messaging.Util (bshow, tshow) @@ -248,6 +248,7 @@ responseToView user_ ChatConfig {logLevel, showReactions, testView} liveItems ts CRMessageError u prefix err -> ttyUser u [plain prefix <> ": " <> plain err | prefix == "error" || logLevel <= CLLWarning] CRChatCmdError u e -> ttyUserPrefix' u $ viewChatError logLevel e CRChatError u e -> ttyUser' u $ viewChatError logLevel e + CRArchiveImported fileErrs -> if null fileErrs then ["ok"] else ["archive import file errors: " <> plain (show fileErrs)] CRTimedAction _ _ -> [] where ttyUser :: User -> [StyledString] -> [StyledString] @@ -833,8 +834,8 @@ viewUserPrivacy User {userId} User {userId = userId', localDisplayName = n', sho viewUserServers :: AUserProtoServers -> Bool -> [StyledString] viewUserServers (AUPS UserProtoServers {serverProtocol = p, protoServers, presetServers}) testView = - customServers <> - if testView + customServers + <> if testView then [] else [ "", @@ -842,9 +843,9 @@ viewUserServers (AUPS UserProtoServers {serverProtocol = p, protoServers, preset "use " <> highlight (srvCmd <> " ") <> " to configure " <> pName <> " servers", "use " <> highlight (srvCmd <> " default") <> " to remove configured " <> pName <> " servers and use presets" ] - <> case p of - SPSMP -> ["(chat option " <> highlight' "-s" <> " (" <> highlight' "--server" <> ") has precedence over saved SMP servers for chat session)"] - SPXFTP -> ["(chat option " <> highlight' "-xftp-servers" <> " has precedence over saved XFTP servers for chat session)"] + <> case p of + SPSMP -> ["(chat option " <> highlight' "-s" <> " (" <> highlight' "--server" <> ") has precedence over saved SMP servers for chat session)"] + SPXFTP -> ["(chat option " <> highlight' "-xftp-servers" <> " has precedence over saved XFTP servers for chat session)"] where srvCmd = "/" <> strEncode p pName = protocolName p