From c488c4fcd52c5716fbf7b4bcab86262575dc8d35 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 1 Dec 2024 19:09:53 +0000 Subject: [PATCH 01/22] 6.2-beta.3: ios 249, android 254, desktop 78 --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 36 +++++++++++----------- apps/multiplatform/gradle.properties | 8 ++--- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 4fd5527ea7..31917f1ab9 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -148,11 +148,11 @@ 6419EC562AB8BC8B004A607A /* ContextInvitingContactMemberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */; }; 6419EC582AB97507004A607A /* CIMemberCreatedContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */; }; 642BA82D2CE50495005E9412 /* NewServerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 642BA82C2CE50495005E9412 /* NewServerView.swift */; }; - 642BA8332CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa.a */; }; + 642BA8332CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */; }; 642BA8342CEB3D4B005E9412 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA82F2CEB3D4B005E9412 /* libffi.a */; }; 642BA8352CEB3D4B005E9412 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA8302CEB3D4B005E9412 /* libgmp.a */; }; 642BA8362CEB3D4B005E9412 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA8312CEB3D4B005E9412 /* libgmpxx.a */; }; - 642BA8372CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa-ghc9.6.3.a */; }; + 642BA8372CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */; }; 6432857C2925443C00FBE5C8 /* GroupPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6432857B2925443C00FBE5C8 /* GroupPreferencesView.swift */; }; 643B3B4E2CCFD6400083A2CF /* OperatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643B3B4D2CCFD6400083A2CF /* OperatorView.swift */; }; 6440CA00288857A10062C672 /* CIEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6440C9FF288857A10062C672 /* CIEventView.swift */; }; @@ -496,11 +496,11 @@ 6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextInvitingContactMemberView.swift; sourceTree = ""; }; 6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIMemberCreatedContactView.swift; sourceTree = ""; }; 642BA82C2CE50495005E9412 /* NewServerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewServerView.swift; sourceTree = ""; }; - 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa.a"; sourceTree = ""; }; + 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a"; sourceTree = ""; }; 642BA82F2CEB3D4B005E9412 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; 642BA8302CEB3D4B005E9412 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; 642BA8312CEB3D4B005E9412 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa-ghc9.6.3.a"; sourceTree = ""; }; + 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a"; sourceTree = ""; }; 6432857B2925443C00FBE5C8 /* GroupPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupPreferencesView.swift; sourceTree = ""; }; 643B3B4D2CCFD6400083A2CF /* OperatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperatorView.swift; sourceTree = ""; }; 6440C9FF288857A10062C672 /* CIEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIEventView.swift; sourceTree = ""; }; @@ -672,8 +672,8 @@ CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */, 642BA8342CEB3D4B005E9412 /* libffi.a in Frameworks */, 642BA8352CEB3D4B005E9412 /* libgmp.a in Frameworks */, - 642BA8372CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa-ghc9.6.3.a in Frameworks */, - 642BA8332CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa.a in Frameworks */, + 642BA8372CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a in Frameworks */, + 642BA8332CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a in Frameworks */, 642BA8362CEB3D4B005E9412 /* libgmpxx.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -754,8 +754,8 @@ 642BA82F2CEB3D4B005E9412 /* libffi.a */, 642BA8302CEB3D4B005E9412 /* libgmp.a */, 642BA8312CEB3D4B005E9412 /* libgmpxx.a */, - 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa-ghc9.6.3.a */, - 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.2-5kRGnUsa36hjwDTjUoXRa.a */, + 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */, + 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */, ); path = Libraries; sourceTree = ""; @@ -1931,7 +1931,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1980,7 +1980,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -2021,7 +2021,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2041,7 +2041,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2066,7 +2066,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -2103,7 +2103,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -2140,7 +2140,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2191,7 +2191,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2242,7 +2242,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -2276,7 +2276,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 248; + CURRENT_PROJECT_VERSION = 249; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index 08056080ea..0893c75520 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -24,11 +24,11 @@ android.nonTransitiveRClass=true kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.jvm.target=11 -android.version_name=6.2-beta.2 -android.version_code=253 +android.version_name=6.2-beta.3 +android.version_code=254 -desktop.version_name=6.2-beta.2 -desktop.version_code=77 +desktop.version_name=6.2-beta.3 +desktop.version_code=78 kotlin.version=1.9.23 gradle.plugin.version=8.2.0 From 5f01dc1a3f6b922a3025a60f933942ea2fe4294d Mon Sep 17 00:00:00 2001 From: Evgeny Date: Mon, 2 Dec 2024 14:01:23 +0000 Subject: [PATCH 02/22] core: support business addresses and chats (#5272) * core: support business addresses and chats * types * connect plan, add link type * ios: toggle on address UI * make compile * todo * fix migration * types * comments * fix * remove * fix schema * comment * simplify * remove diff * comment * comment * diff * acceptBusinessJoinRequestAsync wip * comment * update * simplify types * remove business * wip * read/write columns * createBusinessRequestGroup * remove comments * read/write business_address column * validate that business address is not set to be incognito * replace contact card * update simplexmq * refactor * event when accepting business address request * sendGroupAutoReply * delete contact request earlier * test, fix * refactor * refactor2 --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- .../Views/UserSettings/UserAddressView.swift | 37 +++- apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 + apps/ios/SimpleXChat/APITypes.swift | 4 +- cabal.project | 2 +- docs/rfcs/2024-11-28-business-address.md | 29 +++ scripts/nix/sha256map.nix | 2 +- simplex-chat.cabal | 1 + src/Simplex/Chat.hs | 165 +++++++++++++----- src/Simplex/Chat/Bot.hs | 2 +- src/Simplex/Chat/Controller.hs | 2 + .../Migrations/M20241128_business_chats.hs | 22 +++ src/Simplex/Chat/Migrations/chat_schema.sql | 5 +- src/Simplex/Chat/Protocol.hs | 7 +- src/Simplex/Chat/Store/Connections.hs | 2 +- src/Simplex/Chat/Store/Groups.hs | 90 ++++++++-- src/Simplex/Chat/Store/Migrations.hs | 4 +- src/Simplex/Chat/Store/Profiles.hs | 31 ++-- src/Simplex/Chat/Types.hs | 39 ++++- src/Simplex/Chat/Types/Preferences.hs | 27 +++ src/Simplex/Chat/View.hs | 14 +- tests/ChatTests/Profiles.hs | 47 ++++- tests/ChatTests/Utils.hs | 3 + tests/ProtocolTests.hs | 12 +- 23 files changed, 454 insertions(+), 97 deletions(-) create mode 100644 docs/rfcs/2024-11-28-business-address.md create mode 100644 src/Simplex/Chat/Migrations/M20241128_business_chats.hs diff --git a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift index 28301c5ddb..6bc3a221b2 100644 --- a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift @@ -16,6 +16,8 @@ struct UserAddressView: View { @EnvironmentObject var theme: AppTheme @State var shareViaProfile = false @State var autoCreate = false + @State private var aas = AutoAcceptState() + @State private var savedAAS = AutoAcceptState() @State private var showMailView = false @State private var mailViewResult: Result? = nil @State private var alert: UserAddressAlert? @@ -55,7 +57,15 @@ struct UserAddressView: View { if chatModel.userAddress == nil, autoCreate { createAddress() } + if let userAddress = chatModel.userAddress { + aas = AutoAcceptState(userAddress: userAddress) + savedAAS = aas + } } + .onChange(of: aas.enable) { aasEnabled in + if !aasEnabled { aas = AutoAcceptState() } + } + } private func userAddressView() -> some View { @@ -135,10 +145,23 @@ struct UserAddressView: View { // if MFMailComposeViewController.canSendMail() { // shareViaEmailButton(userAddress) // } + settingsRow("hand.wave", color: theme.colors.secondary) { + Toggle("Business address", isOn: $aas.business) + .onChange(of: aas.business) { ba in + if ba { + aas.enable = true + aas.incognito = false + } + } + } addressSettingsButton(userAddress) } header: { Text("For social media") .foregroundColor(theme.colors.secondary) + } footer: { + if aas.business { + Text("Add your team members to the conversations").foregroundColor(theme.colors.secondary) + } } Section { @@ -276,11 +299,13 @@ struct UserAddressView: View { private struct AutoAcceptState: Equatable { var enable = false var incognito = false + var business = false var welcomeText = "" - init(enable: Bool = false, incognito: Bool = false, welcomeText: String = "") { + init(enable: Bool = false, incognito: Bool = false, business: Bool = false, welcomeText: String = "") { self.enable = enable self.incognito = incognito + self.business = business self.welcomeText = welcomeText } @@ -288,6 +313,7 @@ private struct AutoAcceptState: Equatable { if let aa = userAddress.autoAccept { enable = true incognito = aa.acceptIncognito + business = aa.businessAddress == true if let msg = aa.autoReply { welcomeText = msg.text } else { @@ -296,6 +322,7 @@ private struct AutoAcceptState: Equatable { } else { enable = false incognito = false + business = false welcomeText = "" } } @@ -305,7 +332,7 @@ private struct AutoAcceptState: Equatable { var autoReply: MsgContent? = nil let s = welcomeText.trimmingCharacters(in: .whitespacesAndNewlines) if s != "" { autoReply = .text(s) } - return AutoAccept(acceptIncognito: incognito, autoReply: autoReply) + return AutoAccept(businessAddress: business, acceptIncognito: incognito, autoReply: autoReply) } return nil } @@ -373,7 +400,7 @@ struct UserAddressSettingsView: View { List { Section { shareWithContactsButton() - autoAcceptToggle() + autoAcceptToggle().disabled(aas.business) } if aas.enable { @@ -450,7 +477,9 @@ struct UserAddressSettingsView: View { private func autoAcceptSection() -> some View { Section { - acceptIncognitoToggle() + if !aas.business { + acceptIncognitoToggle() + } welcomeMessageEditor() saveAASButton() .disabled(aas == savedAAS) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 31917f1ab9..7e5a48013b 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -229,6 +229,7 @@ D741547A29AF90B00022400A /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547929AF90B00022400A /* PushKit.framework */; }; D77B92DC2952372200A5A1CC /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = D77B92DB2952372200A5A1CC /* SwiftyGif */; }; D7F0E33929964E7E0068AF69 /* LZString in Frameworks */ = {isa = PBXBuildFile; productRef = D7F0E33829964E7E0068AF69 /* LZString */; }; + E504516F2CFA3BFB00DE3F74 /* ContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = E504516E2CFA3BFB00DE3F74 /* ContextMenu.swift */; }; E51CC1E62C62085600DB91FE /* OneHandUICard.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51CC1E52C62085600DB91FE /* OneHandUICard.swift */; }; E5DCF8DB2C56FAC1007928CC /* SimpleXChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; }; E5DCF9712C590272007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF96F2C590272007928CC /* Localizable.strings */; }; @@ -575,6 +576,7 @@ D741547729AF89AF0022400A /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; D741547929AF90B00022400A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/PushKit.framework; sourceTree = DEVELOPER_DIR; }; D7AA2C3429A936B400737B40 /* MediaEncryption.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = MediaEncryption.playground; path = Shared/MediaEncryption.playground; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + E504516E2CFA3BFB00DE3F74 /* ContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextMenu.swift; sourceTree = ""; }; E51CC1E52C62085600DB91FE /* OneHandUICard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OneHandUICard.swift; sourceTree = ""; }; E5DCF9702C590272007928CC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; E5DCF9722C590274007928CC /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; @@ -791,6 +793,7 @@ 5C971E1F27AEBF7000C8A3CE /* Helpers */ = { isa = PBXGroup; children = ( + E504516E2CFA3BFB00DE3F74 /* ContextMenu.swift */, 5C971E2027AEBF8300C8A3CE /* ChatInfoImage.swift */, 5C7505A427B679EE00BE3227 /* NavLinkPlain.swift */, 5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */, @@ -1445,6 +1448,7 @@ CE984D4B2C36C5D500E3AEFF /* ChatItemClipShape.swift in Sources */, 64D0C2C629FAC1EC00B38D5F /* AddContactLearnMore.swift in Sources */, 5C3A88D127DF57800060F1C2 /* FramedItemView.swift in Sources */, + E504516F2CFA3BFB00DE3F74 /* ContextMenu.swift in Sources */, 5C65F343297D45E100B67AF3 /* VersionView.swift in Sources */, 64F1CC3B28B39D8600CD1FB1 /* IncognitoHelp.swift in Sources */, 5CB0BA90282713D900B3292C /* SimpleXInfo.swift in Sources */, diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 83c74178ba..954022c312 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -2103,10 +2103,12 @@ public struct UserContactLink: Decodable, Hashable { } public struct AutoAccept: Codable, Hashable { + public var businessAddress: Bool? // make not nullable public var acceptIncognito: Bool public var autoReply: MsgContent? - public init(acceptIncognito: Bool, autoReply: MsgContent? = nil) { + public init(businessAddress: Bool, acceptIncognito: Bool, autoReply: MsgContent? = nil) { + self.businessAddress = businessAddress self.acceptIncognito = acceptIncognito self.autoReply = autoReply } diff --git a/cabal.project b/cabal.project index 2246cfeb1d..b89dc764cb 100644 --- a/cabal.project +++ b/cabal.project @@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: 601620bdde612ebdd33da2637d99b15ff32170c9 + tag: 38ad3c046e1bd5eb1ffe696dd24b10dd69001ba2 source-repository-package type: git diff --git a/docs/rfcs/2024-11-28-business-address.md b/docs/rfcs/2024-11-28-business-address.md new file mode 100644 index 0000000000..e41c904457 --- /dev/null +++ b/docs/rfcs/2024-11-28-business-address.md @@ -0,0 +1,29 @@ +# Business address + +## Problem + +When business uses a communication system for support and other business scenarios, it's important for the customer: +- to be able to talk to multiple people in the business, and know who they are. +- potentially, add friends or relatives to the conversation if this is about a group purchase. + +It's important for the business: +- to have bot accept incoming requests. +- to be able to add other people to the coversation, as transfer and as escalation. + +This is how all messaging support system works, and how WeChat business accounts work, but no messenger provides it. + +## Solution + +Make current contact addresses to support business mode. We already have all the elements for that. + +- connection requests will be accepted automatically (non-optionally), and auto-reply will be sent (if provided). +- the request sender will be made member, can be made admin later manually. +- the new group with the customer will be created on each request instead of direct conversation. + +Group will function differently from a normal group: +- Show business name and avatar to customer, customer name and avatar to business. +- Use different icon for customer and for the business if the avatar is not provided. +- Possibly, a sub-icon on business avatar for customers. +- Members added by business are marked as business, by customer as customer (not MVP). + +This functionality allows to develop support bots that automatically reply, potentially answer some questions, and add support agents as required, who can escalate further. diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 72d2ddd59b..7a812dbc6e 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."601620bdde612ebdd33da2637d99b15ff32170c9" = "0lgiphb9sf5i29d378pah24mhf7m8df75jk6asvw8ns527g4amj1"; + "https://github.com/simplex-chat/simplexmq.git"."38ad3c046e1bd5eb1ffe696dd24b10dd69001ba2" = "0nq2a2lklbxpc049zjxa5w8c63l9l9nf08jb7pny42nmah0mlc20"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 1b1a0b9753..4e339fc5da 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -153,6 +153,7 @@ library Simplex.Chat.Migrations.M20241023_chat_item_autoincrement_id Simplex.Chat.Migrations.M20241027_server_operators Simplex.Chat.Migrations.M20241125_indexes + Simplex.Chat.Migrations.M20241128_business_chats Simplex.Chat.Mobile Simplex.Chat.Mobile.File Simplex.Chat.Mobile.Shared diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index cc7fc992fb..92ec04d11b 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -2065,6 +2065,8 @@ processChatCommand' vr = \case SetProfileAddress onOff -> withUser $ \User {userId} -> processChatCommand $ APISetProfileAddress userId onOff APIAddressAutoAccept userId autoAccept_ -> withUserId userId $ \user -> do + forM_ autoAccept_ $ \AutoAccept {businessAddress, acceptIncognito} -> + when (businessAddress && acceptIncognito) $ throwChatError $ CECommandError "requests to business address cannot be accepted incognito" contactLink <- withFastStore (\db -> updateUserAddressAutoAccept db user autoAccept_) pure $ CRUserContactLinkUpdated user contactLink AddressAutoAccept autoAccept_ -> withUser $ \User {userId} -> @@ -3007,7 +3009,7 @@ processChatCommand' vr = \case groupMemberId <- getGroupMemberIdByName db user groupId groupMemberName pure (groupId, groupMemberId) sendGrpInvitation :: User -> Contact -> GroupInfo -> GroupMember -> ConnReqInvitation -> CM () - sendGrpInvitation user ct@Contact {contactId, localDisplayName} gInfo@GroupInfo {groupId, groupProfile, membership} GroupMember {groupMemberId, memberId, memberRole = memRole} cReq = do + sendGrpInvitation user ct@Contact {contactId, localDisplayName} gInfo@GroupInfo {groupId, groupProfile, membership, businessChat} GroupMember {groupMemberId, memberId, memberRole = memRole} cReq = do currentMemCount <- withStore' $ \db -> getGroupCurrentMembersCount db user gInfo let GroupMember {memberRole = userRole, memberId = userMemberId} = membership groupInv = @@ -3016,6 +3018,7 @@ processChatCommand' vr = \case invitedMember = MemberIdRole memberId memRole, connRequest = cReq, groupProfile, + businessChat, groupLinkId = Nothing, groupSize = Just currentMemCount } @@ -3972,12 +3975,14 @@ acceptContactRequestAsync user cReq@UserContactRequest {agentInvitationId = Agen acceptGroupJoinRequestAsync :: User -> GroupInfo -> UserContactRequest -> GroupMemberRole -> Maybe IncognitoProfile -> CM GroupMember acceptGroupJoinRequestAsync user - gInfo@GroupInfo {groupProfile, membership} + gInfo@GroupInfo {groupProfile, membership, businessChat} ucr@UserContactRequest {agentInvitationId = AgentInvId invId, cReqChatVRange} gLinkMemRole incognitoProfile = do gVar <- asks random - (groupMemberId, memberId) <- withStore $ \db -> createAcceptedMember db gVar user gInfo ucr gLinkMemRole + (groupMemberId, memberId) <- withStore $ \db -> do + liftIO $ deleteContactRequestRec db user ucr + createAcceptedMember db gVar user gInfo ucr gLinkMemRole currentMemCount <- withStore' $ \db -> getGroupCurrentMembersCount db user gInfo let Profile {displayName} = profileToSendOnAccept user incognitoProfile True GroupMember {memberRole = userRole, memberId = userMemberId} = membership @@ -3988,6 +3993,7 @@ acceptGroupJoinRequestAsync fromMemberName = displayName, invitedMember = MemberIdRole memberId gLinkMemRole, groupProfile, + businessChat, groupSize = Just currentMemCount } subMode <- chatReadVar subscriptionMode @@ -3998,6 +4004,43 @@ acceptGroupJoinRequestAsync liftIO $ createAcceptedMemberConnection db user connIds chatV ucr groupMemberId subMode getGroupMemberById db vr user groupMemberId +acceptBusinessJoinRequestAsync :: User -> UserContactRequest -> CM GroupInfo +acceptBusinessJoinRequestAsync + user + ucr@UserContactRequest {agentInvitationId = AgentInvId invId, cReqChatVRange} = do + vr <- chatVersionRange + gVar <- asks random + let userProfile@Profile {displayName, preferences} = profileToSendOnAccept user Nothing True + groupPreferences = maybe defaultBusinessGroupPrefs businessGroupPrefs preferences + (gInfo, clientMember) <- withStore $ \db -> do + liftIO $ deleteContactRequestRec db user ucr + createBusinessRequestGroup db vr gVar user ucr groupPreferences + let GroupInfo {membership} = gInfo + GroupMember {memberRole = userRole, memberId = userMemberId} = membership + GroupMember {groupMemberId, memberId} = clientMember + msg = + XGrpLinkInv $ + GroupLinkInvitation + { fromMember = MemberIdRole userMemberId userRole, + fromMemberName = displayName, + invitedMember = MemberIdRole memberId GRMember, + groupProfile = businessGroupProfile userProfile groupPreferences, + -- This refers to the "title member" that defines the group name and profile. + -- This coincides with fromMember to be current user when accepting the connecting user, + -- but it will be different when inviting somebody else. + businessChat = Just $ BusinessChatInfo userMemberId BCBusiness, + groupSize = Just 1 + } + subMode <- chatReadVar subscriptionMode + let chatV = vr `peerConnChatVersion` cReqChatVRange + connIds <- agentAcceptContactAsync user True invId msg subMode PQSupportOff chatV + withStore' $ \db -> createAcceptedMemberConnection db user connIds chatV ucr groupMemberId subMode + pure gInfo + where + businessGroupProfile :: Profile -> GroupPreferences -> GroupProfile + businessGroupProfile Profile {displayName, fullName, image} groupPreferences = + GroupProfile {displayName, fullName, description = Nothing, image, groupPreferences = Just groupPreferences} + profileToSendOnAccept :: User -> Maybe IncognitoProfile -> Bool -> Profile profileToSendOnAccept user ip = userProfileToSend user (getIncognitoProfile <$> ip) Nothing where @@ -4683,15 +4726,14 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = CONF confId pqSupport _ connInfo -> do conn' <- processCONFpqSupport conn pqSupport -- [incognito] send saved profile + (conn'', inGroup) <- saveConnInfo conn' connInfo incognitoProfile <- forM customUserProfileId $ \profileId -> withStore (\db -> getProfileById db userId profileId) - let profileToSend = userProfileToSend user (fromLocalProfile <$> incognitoProfile) Nothing False - conn'' <- saveConnInfo conn' connInfo + let profileToSend = userProfileToSend user (fromLocalProfile <$> incognitoProfile) Nothing inGroup -- [async agent commands] no continuation needed, but command should be asynchronous for stability allowAgentConnectionAsync user conn'' confId $ XInfo profileToSend INFO pqSupport connInfo -> do processINFOpqSupport conn pqSupport - _conn' <- saveConnInfo conn connInfo - pure () + void $ saveConnInfo conn connInfo MSG meta _msgFlags _msgBody -> -- We are not saving message (saveDirectRcvMSG) as contact hasn't been created yet, -- chat item is also not created here @@ -4806,6 +4848,16 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = let p = userProfileToSend user (fromLocalProfile <$> incognitoProfile) (Just ct') False allowAgentConnectionAsync user conn'' confId $ XInfo p void $ withStore' $ \db -> resetMemberContactFields db ct' + XGrpLinkInv glInv -> do + -- XGrpLinkInv here means we are connecting via business contact card, so we replace contact with group + (gInfo, host) <- withStore $ \db -> do + liftIO $ deleteContactCardKeepConn db connId ct + createGroupInvitedViaLink db vr user conn'' glInv + -- [incognito] send saved profile + incognitoProfile <- forM customUserProfileId $ \pId -> withStore (\db -> getProfileById db userId pId) + let profileToSend = userProfileToSend user (fromLocalProfile <$> incognitoProfile) Nothing True + allowAgentConnectionAsync user conn'' confId $ XInfo profileToSend + toView $ CRBusinessLinkConnecting user gInfo host ct _ -> messageError "CONF for existing contact must have x.grp.mem.info or x.info" INFO pqSupport connInfo -> do processINFOpqSupport conn pqSupport @@ -4936,7 +4988,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = _ -> pure () processGroupMessage :: AEvent e -> ConnectionEntity -> Connection -> GroupInfo -> GroupMember -> CM () - processGroupMessage agentMsg connEntity conn@Connection {connId, connectionCode} gInfo@GroupInfo {groupId, groupProfile, membership, chatSettings} m = case agentMsg of + processGroupMessage agentMsg connEntity conn@Connection {connId, connChatVersion, connectionCode} gInfo@GroupInfo {groupId, groupProfile, membership, chatSettings} m = case agentMsg of INV (ACR _ cReq) -> withCompletedCommand conn agentMsg $ \CommandData {cmdFunction} -> case cReq of @@ -4977,6 +5029,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = invitedMember = MemberIdRole memberId memRole, connRequest = cReq, groupProfile, + businessChat = Nothing, groupLinkId = groupLinkId, groupSize = Just currentMemCount } @@ -5049,6 +5102,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = void . sendGroupMessage user gInfo members . XGrpMemNew $ memberInfo m sendIntroductions members when (groupFeatureAllowed SGFHistory gInfo) sendHistory + when (connChatVersion < batchSend2Version) $ sendGroupAutoReply members where sendXGrpLinkMem = do let profileMode = ExistingIncognito <$> incognitoMembershipProfile gInfo @@ -5311,9 +5365,12 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = OK -> -- [async agent commands] continuation on receiving OK when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> pure () - JOINED _ -> + JOINED sqSecured -> -- [async agent commands] continuation on receiving JOINED - when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> pure () + when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> + when sqSecured $ do + members <- withStore' $ \db -> getGroupMembers db vr user gInfo + when (connChatVersion >= batchSend2Version) $ sendGroupAutoReply members QCONT -> do continued <- continueSending connEntity conn when continued $ sendPendingGroupMessages user m conn @@ -5341,6 +5398,23 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = updateGroupItemsErrorStatus db msgId groupMemberId newStatus = do itemIds <- getChatItemIdsByAgentMsgId db connId msgId forM_ itemIds $ \itemId -> updateGroupMemSndStatus' db itemId groupMemberId newStatus + sendGroupAutoReply members = autoReplyMC >>= mapM_ send + where + autoReplyMC = do + let GroupInfo {businessChat} = gInfo + GroupMember {memberId = joiningMemberId} = m + case businessChat of + Just BusinessChatInfo {memberId, chatType = BCCustomer} + | joiningMemberId == memberId -> useReply <$> withStore (`getUserAddress` user) + where + useReply UserContactLink {autoAccept} = case autoAccept of + Just AutoAccept {businessAddress, autoReply} | businessAddress -> autoReply + _ -> Nothing + _ -> pure Nothing + send mc = do + msg <- sendGroupMessage' user gInfo members (XMsgNew $ MCSimple (extMsgContent mc Nothing)) + ci <- saveSndChatItem user (CDGroupSnd gInfo) msg (CISndMsgContent mc) + toView $ CRNewChatItems user [AChatItem SCTGroup SMDSnd (GroupChat gInfo) ci] agentMsgDecryptError :: AgentCryptoError -> (MsgDecryptError, Word32) agentMsgDecryptError = \case @@ -5525,26 +5599,37 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = CORContact contact -> toView $ CRContactRequestAlreadyAccepted user contact CORRequest cReq -> do ucl <- withStore $ \db -> getUserContactLinkById db userId userContactLinkId - let (UserContactLink {autoAccept}, groupId_, gLinkMemRole) = ucl + let (UserContactLink {connReqContact, autoAccept}, groupId_, gLinkMemRole) = ucl + isSimplexTeam = sameConnReqContact connReqContact adminContactReq + v = maxVersion chatVRange case autoAccept of - Just AutoAccept {acceptIncognito} -> case groupId_ of - Nothing -> do - -- [incognito] generate profile to send, create connection with incognito profile - incognitoProfile <- if acceptIncognito then Just . NewIncognito <$> liftIO generateRandomProfile else pure Nothing - ct <- acceptContactRequestAsync user cReq incognitoProfile True reqPQSup - toView $ CRAcceptingContactRequest user ct - Just groupId -> do - gInfo <- withStore $ \db -> getGroupInfo db vr user groupId - let profileMode = ExistingIncognito <$> incognitoMembershipProfile gInfo - if maxVersion chatVRange >= groupFastLinkJoinVersion - then do - mem <- acceptGroupJoinRequestAsync user gInfo cReq gLinkMemRole profileMode - createInternalChatItem user (CDGroupRcv gInfo mem) (CIRcvGroupEvent RGEInvitedViaGroupLink) Nothing - toView $ CRAcceptingGroupJoinRequestMember user gInfo mem - else do - -- TODO v5.7 remove old API (or v6.0?) - ct <- acceptContactRequestAsync user cReq profileMode False PQSupportOff - toView $ CRAcceptingGroupJoinRequest user gInfo ct + Just AutoAccept {acceptIncognito, businessAddress} + | businessAddress -> + if v < groupFastLinkJoinVersion || (isSimplexTeam && v < businessChatsVersion) + then do + ct <- acceptContactRequestAsync user cReq Nothing True reqPQSup + toView $ CRAcceptingContactRequest user ct + else do + gInfo <- acceptBusinessJoinRequestAsync user cReq + toView $ CRAcceptingBusinessRequest user gInfo + | otherwise -> case groupId_ of + Nothing -> do + -- [incognito] generate profile to send, create connection with incognito profile + incognitoProfile <- if acceptIncognito then Just . NewIncognito <$> liftIO generateRandomProfile else pure Nothing + ct <- acceptContactRequestAsync user cReq incognitoProfile True reqPQSup + toView $ CRAcceptingContactRequest user ct + Just groupId -> do + gInfo <- withStore $ \db -> getGroupInfo db vr user groupId + let profileMode = ExistingIncognito <$> incognitoMembershipProfile gInfo + if v >= groupFastLinkJoinVersion + then do + mem <- acceptGroupJoinRequestAsync user gInfo cReq gLinkMemRole profileMode + createInternalChatItem user (CDGroupRcv gInfo mem) (CIRcvGroupEvent RGEInvitedViaGroupLink) Nothing + toView $ CRAcceptingGroupJoinRequestMember user gInfo mem + else do + -- TODO v5.7 remove old API (or v6.0?) + ct <- acceptContactRequestAsync user cReq profileMode False PQSupportOff + toView $ CRAcceptingGroupJoinRequest user gInfo ct _ -> toView $ CRReceivedContactRequest user cReq memberCanSend :: GroupMember -> CM () -> CM () @@ -6353,9 +6438,9 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = xInfoMember gInfo m p' brokerTs = void $ processMemberProfileUpdate gInfo m p' True (Just brokerTs) xGrpLinkMem :: GroupInfo -> GroupMember -> Connection -> Profile -> CM () - xGrpLinkMem gInfo@GroupInfo {membership} m@GroupMember {groupMemberId, memberCategory} Connection {viaGroupLink} p' = do + xGrpLinkMem gInfo@GroupInfo {membership, businessChat} m@GroupMember {groupMemberId, memberCategory} Connection {viaGroupLink} p' = do xGrpLinkMemReceived <- withStore $ \db -> getXGrpLinkMemReceived db groupMemberId - if viaGroupLink && isNothing (memberContactId m) && memberCategory == GCHostMember && not xGrpLinkMemReceived + if (viaGroupLink || isJust businessChat) && isNothing (memberContactId m) && memberCategory == GCHostMember && not xGrpLinkMemReceived then do m' <- processMemberProfileUpdate gInfo m p' False Nothing withStore' $ \db -> setXGrpLinkMemReceived db groupMemberId True @@ -6652,7 +6737,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = toView $ CRContactAndMemberAssociated user c2 g m1 c2' pure c2' - saveConnInfo :: Connection -> ConnInfo -> CM Connection + saveConnInfo :: Connection -> ConnInfo -> CM (Connection, Bool) saveConnInfo activeConn connInfo = do ChatMessage {chatVRange, chatMsgEvent} <- parseChatMessage activeConn connInfo conn' <- updatePeerChatVRange activeConn chatVRange @@ -6661,13 +6746,13 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = let contactUsed = connDirect activeConn ct <- withStore $ \db -> createDirectContact db user conn' p contactUsed toView $ CRContactConnecting user ct - pure conn' + pure (conn', False) XGrpLinkInv glInv -> do (gInfo, host) <- withStore $ \db -> createGroupInvitedViaLink db vr user conn' glInv toView $ CRGroupLinkConnecting user gInfo host - pure conn' + pure (conn', True) -- TODO show/log error, other events in SMP confirmation - _ -> pure conn' + _ -> pure (conn', False) xGrpMemNew :: GroupInfo -> GroupMember -> MemberInfo -> RcvMessage -> UTCTime -> CM () xGrpMemNew gInfo m memInfo@(MemberInfo memId memRole _ _) msg brokerTs = do @@ -8683,11 +8768,11 @@ chatCommandP = dbKeyP = nonEmptyKey <$?> strP nonEmptyKey k@(DBEncryptionKey s) = if BA.null s then Left "empty key" else Right k dbEncryptionConfig currentKey newKey = DBEncryptionConfig {currentKey, newKey, keepKey = Just False} - autoAcceptP = - ifM - onOffP - (Just <$> (AutoAccept <$> (" incognito=" *> onOffP <|> pure False) <*> optional (A.space *> msgContentP))) - (pure Nothing) + autoAcceptP = ifM onOffP (Just <$> (businessAA <|> addressAA)) (pure Nothing) + where + addressAA = AutoAccept False <$> (" incognito=" *> onOffP <|> pure False) <*> autoReply + businessAA = AutoAccept True <$> (" business" *> pure False) <*> autoReply + autoReply = optional (A.space *> msgContentP) rcCtrlAddressP = RCCtrlAddress <$> ("addr=" *> strP) <*> (" iface=" *> (jsonP <|> text1P)) text1P = safeDecodeUtf8 <$> A.takeTill (== ' ') char_ = optional . A.char diff --git a/src/Simplex/Chat/Bot.hs b/src/Simplex/Chat/Bot.hs index 8c0978a98f..2f7e2f2abd 100644 --- a/src/Simplex/Chat/Bot.hs +++ b/src/Simplex/Chat/Bot.hs @@ -56,7 +56,7 @@ initializeBotAddress' logAddress cc = do where showBotAddress uri = do when logAddress $ putStrLn $ "Bot's contact address is: " <> B.unpack (strEncode uri) - void $ sendChatCmd cc $ AddressAutoAccept $ Just AutoAccept {acceptIncognito = False, autoReply = Nothing} + void $ sendChatCmd cc $ AddressAutoAccept $ Just AutoAccept {businessAddress = False, acceptIncognito = False, autoReply = Nothing} sendMessage :: ChatController -> Contact -> Text -> IO () sendMessage cc ct = sendComposedMessage cc ct Nothing . MCText diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index d208efce77..0ab3ba5652 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -639,6 +639,7 @@ data ChatResponse | CRContactRequestRejected {user :: User, contactRequest :: UserContactRequest} | CRUserAcceptedGroupSent {user :: User, groupInfo :: GroupInfo, hostContact :: Maybe Contact} | CRGroupLinkConnecting {user :: User, groupInfo :: GroupInfo, hostMember :: GroupMember} + | CRBusinessLinkConnecting {user :: User, groupInfo :: GroupInfo, hostMember :: GroupMember, fromContact :: Contact} | CRUserDeletedMember {user :: User, groupInfo :: GroupInfo, member :: GroupMember} | CRGroupsList {user :: User, groups :: [(GroupInfo, GroupSummary)]} | CRSentGroupInvitation {user :: User, groupInfo :: GroupInfo, contact :: Contact, member :: GroupMember} @@ -665,6 +666,7 @@ data ChatResponse | CRUserContactLinkDeleted {user :: User} | CRReceivedContactRequest {user :: User, contactRequest :: UserContactRequest} | CRAcceptingContactRequest {user :: User, contact :: Contact} + | CRAcceptingBusinessRequest {user :: User, groupInfo :: GroupInfo} | CRContactAlreadyExists {user :: User, contact :: Contact} | CRContactRequestAlreadyAccepted {user :: User, contact :: Contact} | CRLeftMemberUser {user :: User, groupInfo :: GroupInfo} diff --git a/src/Simplex/Chat/Migrations/M20241128_business_chats.hs b/src/Simplex/Chat/Migrations/M20241128_business_chats.hs new file mode 100644 index 0000000000..f068b1bd81 --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20241128_business_chats.hs @@ -0,0 +1,22 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20241128_business_chats where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20241128_business_chats :: Query +m20241128_business_chats = + [sql| +ALTER TABLE user_contact_links ADD business_address INTEGER DEFAULT 0; +ALTER TABLE groups ADD COLUMN business_member_id BLOB NULL; +ALTER TABLE groups ADD COLUMN business_chat TEXT NULL; +|] + +down_m20241128_business_chats :: Query +down_m20241128_business_chats = + [sql| +ALTER TABLE user_contact_links DROP COLUMN business_address; +ALTER TABLE groups DROP COLUMN business_member_id; +ALTER TABLE groups DROP COLUMN business_chat; +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 6f944157c1..460b348b4d 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -127,7 +127,9 @@ CREATE TABLE groups( via_group_link_uri_hash BLOB, user_member_profile_sent_at TEXT, custom_data BLOB, - ui_themes TEXT, -- received + ui_themes TEXT, + business_member_id BLOB NULL, + business_chat TEXT NULL, -- received FOREIGN KEY(user_id, local_display_name) REFERENCES display_names(user_id, local_display_name) ON DELETE CASCADE @@ -309,6 +311,7 @@ CREATE TABLE user_contact_links( auto_accept_incognito INTEGER DEFAULT 0 CHECK(auto_accept_incognito NOT NULL), group_link_id BLOB, group_link_member_role TEXT NULL, + business_address INTEGER DEFAULT 0, UNIQUE(user_id, local_display_name) ); CREATE TABLE contact_requests( diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index ea39293b9f..8afefdc850 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -66,12 +66,13 @@ import Simplex.Messaging.Version hiding (version) -- 7 - update member profiles (1/15/2024) -- 8 - compress messages and PQ e2e encryption (2024-03-08) -- 9 - batch sending in direct connections (2024-07-24) +-- 10 - business chats (2024-11-29) -- This should not be used directly in code, instead use `maxVersion chatVRange` from ChatConfig. -- This indirection is needed for backward/forward compatibility testing. -- Testing with real app versions is still needed, as tests use the current code with different version ranges, not the old code. currentChatVersion :: VersionChat -currentChatVersion = VersionChat 9 +currentChatVersion = VersionChat 10 -- This should not be used directly in code, instead use `chatVRange` from ChatConfig (see comment above) supportedChatVRange :: VersionRangeChat @@ -110,6 +111,10 @@ pqEncryptionCompressionVersion = VersionChat 8 batchSend2Version :: VersionChat batchSend2Version = VersionChat 9 +-- supports differentiating business chats when joining contact addresses +businessChatsVersion :: VersionChat +businessChatsVersion = VersionChat 10 + agentToChatVersion :: VersionSMPA -> VersionChat agentToChatVersion v | v < pqdrSMPAgentVersion = initialChatVersion diff --git a/src/Simplex/Chat/Store/Connections.hs b/src/Simplex/Chat/Store/Connections.hs index 2c7543f08a..fe52c6d7b7 100644 --- a/src/Simplex/Chat/Store/Connections.hs +++ b/src/Simplex/Chat/Store/Connections.hs @@ -123,7 +123,7 @@ getConnectionEntity db vr user@User {userId, userContactId} agentConnId = do -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index 142c702f77..b07adf407b 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -30,6 +30,7 @@ module Simplex.Chat.Store.Groups getGroupAndMember, createNewGroup, createGroupInvitation, + deleteContactCardKeepConn, createGroupInvitedViaLink, setViaGroupLinkHash, setGroupInvitationChatItemId, @@ -62,6 +63,7 @@ module Simplex.Chat.Store.Groups createNewContactMemberAsync, createAcceptedMember, createAcceptedMemberConnection, + createBusinessRequestGroup, getContactViaMember, setNewContactMemberConnRequest, getMemberInvitation, @@ -153,19 +155,20 @@ import Simplex.Messaging.Util (eitherToMaybe, ($>>=), (<$$>)) import Simplex.Messaging.Version import UnliftIO.STM -type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime, Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow +type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime, Maybe MemberId, Maybe BusinessChatType, Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow type GroupMemberRow = ((Int64, Int64, MemberId, VersionChat, VersionChat, GroupMemberRole, GroupMemberCategory, GroupMemberStatus, Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, ContactName, Maybe ContactId, ProfileId, ProfileId, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Preferences)) type MaybeGroupMemberRow = ((Maybe Int64, Maybe Int64, Maybe MemberId, Maybe VersionChat, Maybe VersionChat, Maybe GroupMemberRole, Maybe GroupMemberCategory, Maybe GroupMemberStatus, Maybe Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, Maybe ContactName, Maybe ContactId, Maybe ProfileId, Maybe ProfileId, Maybe ContactName, Maybe Text, Maybe ImageData, Maybe ConnReqContact, Maybe LocalAlias, Maybe Preferences)) toGroupInfo :: VersionRangeChat -> Int64 -> GroupInfoRow -> GroupInfo -toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, description, image, hostConnCustomUserProfileId, enableNtfs_, sendRcpts, favorite, groupPreferences) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt, uiThemes, customData) :. userMemberRow) = +toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, description, image, hostConnCustomUserProfileId, enableNtfs_, sendRcpts, favorite, groupPreferences) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt, businessMemberId, businessChatType, uiThemes, customData) :. userMemberRow) = let membership = (toGroupMember userContactId userMemberRow) {memberChatVRange = vr} chatSettings = ChatSettings {enableNtfs = fromMaybe MFAll enableNtfs_, sendRcpts, favorite} fullGroupPreferences = mergeGroupPreferences groupPreferences groupProfile = GroupProfile {displayName, fullName, description, image, groupPreferences} - in GroupInfo {groupId, localDisplayName, groupProfile, fullGroupPreferences, membership, hostConnCustomUserProfileId, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt, uiThemes, customData} + businessChat = BusinessChatInfo <$> businessMemberId <*> businessChatType + in GroupInfo {groupId, localDisplayName, groupProfile, businessChat, fullGroupPreferences, membership, hostConnCustomUserProfileId, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt, uiThemes, customData} toGroupMember :: Int64 -> GroupMemberRow -> GroupMember toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages, memberRestriction_) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, preferences)) = @@ -276,7 +279,7 @@ getGroupAndMember db User {userId, userContactId} groupMemberId vr = -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, @@ -342,6 +345,7 @@ createNewGroup db vr gVar user@User {userId} groupProfile incognitoProfile = Exc { groupId, localDisplayName = ldn, groupProfile, + businessChat = Nothing, fullGroupPreferences, membership, hostConnCustomUserProfileId = Nothing, @@ -357,7 +361,7 @@ createNewGroup db vr gVar user@User {userId} groupProfile incognitoProfile = Exc -- | creates a new group record for the group the current user was invited to, or returns an existing one createGroupInvitation :: DB.Connection -> VersionRangeChat -> User -> Contact -> GroupInvitation -> Maybe ProfileId -> ExceptT StoreError IO (GroupInfo, GroupMemberId) createGroupInvitation _ _ _ Contact {localDisplayName, activeConn = Nothing} _ _ = throwError $ SEContactNotReady localDisplayName -createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activeConn = Just Connection {customUserProfileId, peerChatVRange}} GroupInvitation {fromMember, invitedMember, connRequest, groupProfile} incognitoProfileId = do +createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activeConn = Just Connection {customUserProfileId, peerChatVRange}} GroupInvitation {fromMember, invitedMember, connRequest, groupProfile, businessChat} incognitoProfileId = do liftIO getInvitationGroupId_ >>= \case Nothing -> createGroupInvitation_ Just gId -> do @@ -395,10 +399,10 @@ createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activ [sql| INSERT INTO groups (group_profile_id, local_display_name, inv_queue_info, host_conn_custom_user_profile_id, user_id, enable_ntfs, - created_at, updated_at, chat_ts, user_member_profile_sent_at) - VALUES (?,?,?,?,?,?,?,?,?,?) + created_at, updated_at, chat_ts, user_member_profile_sent_at, business_member_id, business_chat) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?) |] - (profileId, localDisplayName, connRequest, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) + ((profileId, localDisplayName, connRequest, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) :. businessChatTuple businessChat) insertedRowId db let hostVRange = adjustedMemberVRange vr peerChatVRange GroupMember {groupMemberId} <- createContactMemberInv_ db user groupId Nothing contact fromMember GCHostMember GSMemInvited IBUnknown Nothing currentTs hostVRange @@ -409,6 +413,7 @@ createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activ { groupId, localDisplayName, groupProfile, + businessChat = Nothing, fullGroupPreferences, membership, hostConnCustomUserProfileId = customUserProfileId, @@ -423,6 +428,11 @@ createGroupInvitation db vr user@User {userId} contact@Contact {contactId, activ groupMemberId ) +businessChatTuple :: Maybe BusinessChatInfo -> (Maybe MemberId, Maybe BusinessChatType) +businessChatTuple = \case + Just BusinessChatInfo {memberId, chatType} -> (Just memberId, Just chatType) + Nothing -> (Nothing, Nothing) + adjustedMemberVRange :: VersionRangeChat -> VersionRangeChat -> VersionRangeChat adjustedMemberVRange chatVR vr@(VersionRange minV maxV) = let maxV' = min maxV (maxVersion chatVR) @@ -497,13 +507,19 @@ createContactMemberInv_ db User {userId, userContactId} groupId invitedByGroupMe ) pure $ Right incognitoLdn +deleteContactCardKeepConn :: DB.Connection -> Int64 -> Contact -> IO () +deleteContactCardKeepConn db connId Contact {contactId, profile = LocalProfile {profileId}} = do + DB.execute db "UPDATE connections SET contact_id = NULL WHERE connection_id = ?" (Only connId) + DB.execute db "DELETE FROM contacts WHERE contact_id = ?" (Only contactId) + DB.execute db "DELETE FROM contact_profiles WHERE contact_profile_id = ?" (Only profileId) + createGroupInvitedViaLink :: DB.Connection -> VersionRangeChat -> User -> Connection -> GroupLinkInvitation -> ExceptT StoreError IO (GroupInfo, GroupMember) createGroupInvitedViaLink db vr user@User {userId, userContactId} Connection {connId, customUserProfileId} - GroupLinkInvitation {fromMember, fromMemberName, invitedMember, groupProfile} = do + GroupLinkInvitation {fromMember, fromMemberName, invitedMember, groupProfile, businessChat} = do currentTs <- liftIO getCurrentTime groupId <- insertGroup_ currentTs hostMemberId <- insertHost_ currentTs groupId @@ -527,10 +543,10 @@ createGroupInvitedViaLink [sql| INSERT INTO groups (group_profile_id, local_display_name, host_conn_custom_user_profile_id, user_id, enable_ntfs, - created_at, updated_at, chat_ts, user_member_profile_sent_at) - VALUES (?,?,?,?,?,?,?,?,?) + created_at, updated_at, chat_ts, user_member_profile_sent_at, business_member_id, business_chat) + VALUES (?,?,?,?,?,?,?,?,?,?,?) |] - (profileId, localDisplayName, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) + ((profileId, localDisplayName, customUserProfileId, userId, True, currentTs, currentTs, currentTs, currentTs) :. businessChatTuple businessChat) insertedRowId db insertHost_ currentTs groupId = do let fromMemberProfile = profileFromName fromMemberName @@ -637,7 +653,7 @@ getUserGroupDetails db vr User {userId, userContactId} _contactId_ search_ = SELECT g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, mu.group_member_id, g.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences FROM groups g @@ -879,9 +895,7 @@ createAcceptedMember User {userId, userContactId} GroupInfo {groupId, membership} UserContactRequest {cReqChatVRange, localDisplayName, profileId} - memberRole = do - liftIO $ - DB.execute db "DELETE FROM contact_requests WHERE user_id = ? AND local_display_name = ?" (userId, localDisplayName) + memberRole = createWithRandomId gVar $ \memId -> do createdAt <- liftIO getCurrentTime insertMember_ (MemberId memId) createdAt @@ -917,6 +931,46 @@ createAcceptedMemberConnection Connection {connId} <- createConnection_ db userId ConnMember (Just groupMemberId) agentConnId ConnNew chatV cReqChatVRange Nothing (Just userContactLinkId) Nothing 0 createdAt subMode PQSupportOff setCommandConnId db user cmdId connId +createBusinessRequestGroup :: DB.Connection -> VersionRangeChat -> TVar ChaChaDRG -> User -> UserContactRequest -> GroupPreferences -> ExceptT StoreError IO (GroupInfo, GroupMember) +createBusinessRequestGroup + db + vr + gVar + user@User {userId} + ucr@UserContactRequest {profile} + groupPreferences = do + currentTs <- liftIO getCurrentTime + groupInfo <- insertGroup_ currentTs + (groupMemberId, memberId) <- createAcceptedMember db gVar user groupInfo ucr GRMember + liftIO $ setBusinessMemberId groupInfo memberId + acceptedMember <- getGroupMemberById db vr user groupMemberId + pure (groupInfo, acceptedMember) + where + insertGroup_ currentTs = ExceptT $ do + let Profile {displayName, fullName, image} = profile + withLocalDisplayName db userId displayName $ \localDisplayName -> runExceptT $ do + groupId <- liftIO $ do + DB.execute + db + "INSERT INTO group_profiles (display_name, full_name, image, user_id, preferences, created_at, updated_at) VALUES (?,?,?,?,?,?,?)" + (displayName, fullName, image, userId, groupPreferences, currentTs, currentTs) + profileId <- insertedRowId db + DB.execute + db + [sql| + INSERT INTO groups + (group_profile_id, local_display_name, user_id, enable_ntfs, + created_at, updated_at, chat_ts, user_member_profile_sent_at, business_chat) + VALUES (?,?,?,?,?,?,?,?,?) + |] + (profileId, localDisplayName, userId, True, currentTs, currentTs, currentTs, currentTs, BCCustomer) + insertedRowId db + memberId <- liftIO $ encodedRandomBytes gVar 12 + void $ createContactMemberInv_ db user groupId Nothing user (MemberIdRole (MemberId memberId) GROwner) GCUserMember GSMemCreator IBUser Nothing currentTs vr + getGroupInfo db vr user groupId + setBusinessMemberId GroupInfo {groupId} businessMemberId = do + DB.execute db "UPDATE groups SET business_member_id = ? WHERE group_id = ?" (businessMemberId, groupId) + getContactViaMember :: DB.Connection -> VersionRangeChat -> User -> GroupMember -> ExceptT StoreError IO Contact getContactViaMember db vr user@User {userId} GroupMember {groupMemberId} = do contactId <- @@ -1315,7 +1369,7 @@ getViaGroupMember db vr User {userId, userContactId} Contact {contactId} = -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, @@ -1411,7 +1465,7 @@ getGroupInfo db vr User {userId, userContactId} groupId = -- GroupInfo g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.ui_themes, g.custom_data, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, -- GroupMember - membership mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, diff --git a/src/Simplex/Chat/Store/Migrations.hs b/src/Simplex/Chat/Store/Migrations.hs index 9a91c7f970..6654dec034 100644 --- a/src/Simplex/Chat/Store/Migrations.hs +++ b/src/Simplex/Chat/Store/Migrations.hs @@ -117,6 +117,7 @@ import Simplex.Chat.Migrations.M20241010_contact_requests_contact_id import Simplex.Chat.Migrations.M20241023_chat_item_autoincrement_id import Simplex.Chat.Migrations.M20241027_server_operators import Simplex.Chat.Migrations.M20241125_indexes +import Simplex.Chat.Migrations.M20241128_business_chats import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..)) schemaMigrations :: [(String, Query, Maybe Query)] @@ -233,7 +234,8 @@ schemaMigrations = ("20241010_contact_requests_contact_id", m20241010_contact_requests_contact_id, Just down_m20241010_contact_requests_contact_id), ("20241023_chat_item_autoincrement_id", m20241023_chat_item_autoincrement_id, Just down_m20241023_chat_item_autoincrement_id), ("20241027_server_operators", m20241027_server_operators, Just down_m20241027_server_operators), - ("20241125_indexes", m20241125_indexes, Just down_m20241125_indexes) + ("20241125_indexes", m20241125_indexes, Just down_m20241125_indexes), + ("20241128_business_chats", m20241128_business_chats, Just down_m20241128_business_chats) ] -- | The list of migrations in ascending order by date diff --git a/src/Simplex/Chat/Store/Profiles.hs b/src/Simplex/Chat/Store/Profiles.hs index ec657fd6f7..e88cf39feb 100644 --- a/src/Simplex/Chat/Store/Profiles.hs +++ b/src/Simplex/Chat/Store/Profiles.hs @@ -445,7 +445,8 @@ data UserContactLink = UserContactLink deriving (Show) data AutoAccept = AutoAccept - { acceptIncognito :: IncognitoEnabled, + { businessAddress :: Bool, -- possibly, it can be wrapped together with acceptIncognito, or AutoAccept made sum type + acceptIncognito :: IncognitoEnabled, autoReply :: Maybe MsgContent } deriving (Show) @@ -454,10 +455,10 @@ $(J.deriveJSON defaultJSON ''AutoAccept) $(J.deriveJSON defaultJSON ''UserContactLink) -toUserContactLink :: (ConnReqContact, Bool, IncognitoEnabled, Maybe MsgContent) -> UserContactLink -toUserContactLink (connReq, autoAccept, acceptIncognito, autoReply) = +toUserContactLink :: (ConnReqContact, Bool, Bool, IncognitoEnabled, Maybe MsgContent) -> UserContactLink +toUserContactLink (connReq, autoAccept, businessAddress, acceptIncognito, autoReply) = UserContactLink connReq $ - if autoAccept then Just AutoAccept {acceptIncognito, autoReply} else Nothing + if autoAccept then Just AutoAccept {businessAddress, acceptIncognito, autoReply} else Nothing getUserAddress :: DB.Connection -> User -> ExceptT StoreError IO UserContactLink getUserAddress db User {userId} = @@ -465,7 +466,7 @@ getUserAddress db User {userId} = DB.query db [sql| - SELECT conn_req_contact, auto_accept, auto_accept_incognito, auto_reply_msg_content + SELECT conn_req_contact, auto_accept, business_address, auto_accept_incognito, auto_reply_msg_content FROM user_contact_links WHERE user_id = ? AND local_display_name = '' AND group_id IS NULL |] @@ -477,7 +478,7 @@ getUserContactLinkById db userId userContactLinkId = DB.query db [sql| - SELECT conn_req_contact, auto_accept, auto_accept_incognito, auto_reply_msg_content, group_id, group_link_member_role + SELECT conn_req_contact, auto_accept, business_address, auto_accept_incognito, auto_reply_msg_content, group_id, group_link_member_role FROM user_contact_links WHERE user_id = ? AND user_contact_link_id = ? @@ -490,7 +491,7 @@ getUserContactLinkByConnReq db User {userId} (cReqSchema1, cReqSchema2) = DB.query db [sql| - SELECT conn_req_contact, auto_accept, auto_accept_incognito, auto_reply_msg_content + SELECT conn_req_contact, auto_accept, business_address, auto_accept_incognito, auto_reply_msg_content FROM user_contact_links WHERE user_id = ? AND conn_req_contact IN (?,?) |] @@ -522,13 +523,13 @@ updateUserAddressAutoAccept db user@User {userId} autoAccept = do db [sql| UPDATE user_contact_links - SET auto_accept = ?, auto_accept_incognito = ?, auto_reply_msg_content = ? + SET auto_accept = ?, business_address = ?, auto_accept_incognito = ?, auto_reply_msg_content = ? WHERE user_id = ? AND local_display_name = '' AND group_id IS NULL |] (ucl :. Only userId) ucl = case autoAccept of - Just AutoAccept {acceptIncognito, autoReply} -> (True, acceptIncognito, autoReply) - _ -> (False, False, Nothing) + Just AutoAccept {businessAddress, acceptIncognito, autoReply} -> (True, businessAddress, acceptIncognito, autoReply) + _ -> (False, False, False, Nothing) getProtocolServers :: forall p. ProtocolTypeI p => DB.Connection -> SProtocolType p -> User -> IO [UserServer p] getProtocolServers db p User {userId} = @@ -589,7 +590,7 @@ getServerOperators db = do let conditionsAction = usageConditionsAction ops currentConditions now pure ServerOperatorConditions {serverOperators = ops, currentConditions, conditionsAction} -getUserServers :: DB.Connection -> User -> ExceptT StoreError IO ([Maybe ServerOperator], [UserServer 'PSMP], [UserServer 'PXFTP]) +getUserServers :: DB.Connection -> User -> ExceptT StoreError IO ([Maybe ServerOperator], [UserServer 'PSMP], [UserServer 'PXFTP]) getUserServers db user = (,,) <$> (map Just . serverOperators <$> getServerOperators db) @@ -620,7 +621,8 @@ getUpdateServerOperators db presetOps newUser = do mapM_ insertConditions condsToAdd latestAcceptedConds_ <- getLatestAcceptedConditions db ops <- updatedServerOperators presetOps <$> getServerOperators_ db - forM ops $ traverse $ mapM $ \(ASO _ op) -> -- traverse for tuple, mapM for Maybe + forM ops $ traverse $ mapM $ \(ASO _ op) -> + -- traverse for tuple, mapM for Maybe case operatorId op of DBNewEntity -> do op' <- insertOperator op @@ -765,8 +767,9 @@ acceptConditions db condId opIds acceptedAt = do liftIO $ forM_ operators $ \op -> acceptConditions_ db op conditionsCommit ts where getServerOperator_ opId = - ExceptT $ firstRow toServerOperator (SEOperatorNotFound opId) $ - DB.query db (serverOperatorQuery <> " WHERE server_operator_id = ?") (Only opId) + ExceptT $ + firstRow toServerOperator (SEOperatorNotFound opId) $ + DB.query db (serverOperatorQuery <> " WHERE server_operator_id = ?") (Only opId) acceptConditions_ :: DB.Connection -> ServerOperator -> Text -> Maybe UTCTime -> IO () acceptConditions_ db ServerOperator {operatorId, operatorTag} conditionsCommit acceptedAt = diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index 36bf9edb52..cc98b4101d 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -52,7 +52,7 @@ import Simplex.Messaging.Agent.Protocol (ACorrId, AEventTag (..), AEvtTag (..), import Simplex.Messaging.Crypto.File (CryptoFileArgs (..)) import Simplex.Messaging.Crypto.Ratchet (PQEncryption (..), PQSupport, pattern PQEncOff) import Simplex.Messaging.Encoding.String -import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, enumJSON, fromTextField_, sumTypeJSON, taggedObjectJSON) +import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, enumJSON, fromTextField_, sumTypeJSON) import Simplex.Messaging.Util (safeDecodeUtf8, (<$?>)) import Simplex.Messaging.Version import Simplex.Messaging.Version.Internal @@ -371,6 +371,7 @@ data GroupInfo = GroupInfo { groupId :: GroupId, localDisplayName :: GroupName, groupProfile :: GroupProfile, + businessChat :: Maybe BusinessChatInfo, fullGroupPreferences :: FullGroupPreferences, membership :: GroupMember, hostConnCustomUserProfileId :: Maybe ProfileId, @@ -384,6 +385,24 @@ data GroupInfo = GroupInfo } deriving (Eq, Show) +data BusinessChatType + = BCBusiness -- used on the customer side + | BCCustomer -- used on the business side + deriving (Eq, Show) + +instance TextEncoding BusinessChatType where + textEncode = \case + BCBusiness -> "business" + BCCustomer -> "customer" + textDecode = \case + "business" -> Just BCBusiness + "customer" -> Just BCCustomer + _ -> Nothing + +instance FromField BusinessChatType where fromField = fromTextField_ textDecode + +instance ToField BusinessChatType where toField = toField . textEncode + groupName' :: GroupInfo -> GroupName groupName' GroupInfo {localDisplayName = g} = g @@ -598,6 +617,7 @@ data GroupInvitation = GroupInvitation invitedMember :: MemberIdRole, connRequest :: ConnReqInvitation, groupProfile :: GroupProfile, + businessChat :: Maybe BusinessChatInfo, groupLinkId :: Maybe GroupLinkId, groupSize :: Maybe Int } @@ -608,6 +628,7 @@ data GroupLinkInvitation = GroupLinkInvitation fromMemberName :: ContactName, invitedMember :: MemberIdRole, groupProfile :: GroupProfile, + businessChat :: Maybe BusinessChatInfo, groupSize :: Maybe Int } deriving (Eq, Show) @@ -632,6 +653,12 @@ data MemberInfo = MemberInfo } deriving (Eq, Show) +data BusinessChatInfo = BusinessChatInfo + { memberId :: MemberId, + chatType :: BusinessChatType + } + deriving (Eq, Show) + memberInfo :: GroupMember -> MemberInfo memberInfo GroupMember {memberId, memberRole, memberProfile, activeConn} = MemberInfo @@ -1696,6 +1723,10 @@ $(JQ.deriveJSON (enumJSON $ dropPrefix "MF") ''MsgFilter) $(JQ.deriveJSON defaultJSON ''ChatSettings) +$(JQ.deriveJSON (enumJSON $ dropPrefix "BC") ''BusinessChatType) + +$(JQ.deriveJSON defaultJSON ''BusinessChatInfo) + $(JQ.deriveJSON defaultJSON ''GroupInfo) $(JQ.deriveJSON defaultJSON ''Group) @@ -1706,18 +1737,18 @@ instance FromField MsgFilter where fromField = fromIntField_ msgFilterIntP instance ToField MsgFilter where toField = toField . msgFilterInt -$(JQ.deriveJSON (taggedObjectJSON $ dropPrefix "CRData") ''CReqClientData) +$(JQ.deriveJSON defaultJSON ''CReqClientData) $(JQ.deriveJSON defaultJSON ''MemberIdRole) +$(JQ.deriveJSON defaultJSON ''MemberInfo) + $(JQ.deriveJSON defaultJSON ''GroupInvitation) $(JQ.deriveJSON defaultJSON ''GroupLinkInvitation) $(JQ.deriveJSON defaultJSON ''IntroInvitation) -$(JQ.deriveJSON defaultJSON ''MemberInfo) - $(JQ.deriveJSON defaultJSON ''MemberRestrictions) $(JQ.deriveJSON defaultJSON ''GroupMemberRef) diff --git a/src/Simplex/Chat/Types/Preferences.hs b/src/Simplex/Chat/Types/Preferences.hs index bccfd4bdce..8465caeee0 100644 --- a/src/Simplex/Chat/Types/Preferences.hs +++ b/src/Simplex/Chat/Types/Preferences.hs @@ -390,6 +390,33 @@ defaultGroupPrefs = emptyGroupPrefs :: GroupPreferences emptyGroupPrefs = GroupPreferences Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing +businessGroupPrefs :: Preferences -> GroupPreferences +businessGroupPrefs Preferences {timedMessages, fullDelete, reactions, voice} = + defaultBusinessGroupPrefs + { timedMessages = Just TimedMessagesGroupPreference {enable = maybe FEOff enableFeature timedMessages, ttl = maybe Nothing prefParam timedMessages}, + fullDelete = Just FullDeleteGroupPreference {enable = maybe FEOff enableFeature fullDelete}, + reactions = Just ReactionsGroupPreference {enable = maybe FEOn enableFeature reactions}, + voice = Just VoiceGroupPreference {enable = maybe FEOff enableFeature voice, role = Nothing} + } + where + enableFeature :: FeatureI f => FeaturePreference f -> GroupFeatureEnabled + enableFeature p = case getField @"allow" p of + FANo -> FEOff + _ -> FEOn + +defaultBusinessGroupPrefs :: GroupPreferences +defaultBusinessGroupPrefs = + GroupPreferences + { timedMessages = Just $ TimedMessagesGroupPreference FEOff Nothing, + directMessages = Just $ DirectMessagesGroupPreference FEOff Nothing, + fullDelete = Just $ FullDeleteGroupPreference FEOff, + reactions = Just $ ReactionsGroupPreference FEOn, + voice = Just $ VoiceGroupPreference FEOff Nothing, + files = Just $ FilesGroupPreference FEOn Nothing, + simplexLinks = Just $ SimplexLinksGroupPreference FEOn Nothing, + history = Just $ HistoryGroupPreference FEOn + } + data TimedMessagesPreference = TimedMessagesPreference { allow :: FeatureAllowed, ttl :: Maybe Int diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 093d750a42..4458f8ee7b 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -204,12 +204,14 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRContactDeletedByContact u c -> ttyUser u [ttyFullContact c <> " deleted contact with you"] CRChatCleared u chatInfo -> ttyUser u $ viewChatCleared chatInfo CRAcceptingContactRequest u c -> ttyUser u $ viewAcceptingContactRequest c + CRAcceptingBusinessRequest u g -> ttyUser u $ viewAcceptingBusinessRequest g CRContactAlreadyExists u c -> ttyUser u [ttyFullContact c <> ": contact already exists"] CRContactRequestAlreadyAccepted u c -> ttyUser u [ttyFullContact c <> ": sent you a duplicate contact request, but you are already connected, no action needed"] CRUserContactLinkCreated u cReq -> ttyUser u $ connReqContact_ "Your new chat address is created!" cReq CRUserContactLinkDeleted u -> ttyUser u viewUserContactLinkDeleted CRUserAcceptedGroupSent u _g _ -> ttyUser u [] -- [ttyGroup' g <> ": joining the group..."] CRGroupLinkConnecting u g _ -> ttyUser u [ttyGroup' g <> ": joining the group..."] + CRBusinessLinkConnecting u g _ _ -> ttyUser u [ttyGroup' g <> ": joining the group..."] CRUserDeletedMember u g m -> ttyUser u [ttyGroup' g <> ": you removed " <> ttyMember m <> " from the group"] CRLeftMemberUser u g -> ttyUser u $ [ttyGroup' g <> ": you left the group"] <> groupPreserved g CRUnknownMemberCreated u g fwdM um -> ttyUser u [ttyGroup' g <> ": " <> ttyMember fwdM <> " forwarded a message from an unknown member, creating unknown member record " <> ttyMember um] @@ -979,9 +981,14 @@ simplexChatContact (CRContactUri crData) = CRContactUri crData {crScheme = simpl autoAcceptStatus_ :: Maybe AutoAccept -> [StyledString] autoAcceptStatus_ = \case - Just AutoAccept {acceptIncognito, autoReply} -> - ("auto_accept on" <> if acceptIncognito then ", incognito" else "") + Just AutoAccept {businessAddress, acceptIncognito, autoReply} -> + ("auto_accept on" <> aaInfo) : maybe [] ((["auto reply:"] <>) . ttyMsgContent) autoReply + where + aaInfo + | businessAddress = ", business" + | acceptIncognito = ", incognito" + | otherwise = "" _ -> ["auto_accept off"] groupLink_ :: StyledString -> GroupInfo -> ConnReqContact -> GroupMemberRole -> [StyledString] @@ -1017,6 +1024,9 @@ viewAcceptingContactRequest ct | contactReady ct = [ttyFullContact ct <> ": accepting contact request, you can send messages to contact"] | otherwise = [ttyFullContact ct <> ": accepting contact request..."] +viewAcceptingBusinessRequest :: GroupInfo -> [StyledString] +viewAcceptingBusinessRequest g = [ttyFullGroup g <> ": accepting business address request..."] + viewReceivedContactRequest :: ContactName -> Profile -> [StyledString] viewReceivedContactRequest c Profile {fullName} = [ ttyFullName c fullName <> " wants to connect to you!", diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index 3ff8808541..b2db679f29 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -47,6 +47,8 @@ chatProfileTests = do it "delete connection requests when contact link deleted" testDeleteConnectionRequests it "auto-reply message" testAutoReplyMessage it "auto-reply message in incognito" testAutoReplyMessageInIncognito + describe "business address" $ do + it "create and connect via business address" testBusinessAddress describe "contact address connection plan" $ do it "contact address ok to connect; known contact" testPlanAddressOkKnown it "own contact address" testPlanAddressOwn @@ -677,6 +679,49 @@ testAutoReplyMessageInIncognito = testChat2 aliceProfile bobProfile $ alice <## "use /i bob to print out this incognito profile again" ] +testBusinessAddress :: HasCallStack => FilePath -> IO () +testBusinessAddress = testChat3 businessProfile aliceProfile {fullName = "Alice @ Biz"} bobProfile $ + \biz alice bob -> do + biz ##> "/ad" + cLink <- getContactLink biz True + biz ##> "/auto_accept on business" + biz <## "auto_accept on, business" + bob ##> ("/c " <> cLink) + bob <## "connection request sent!" + biz <## "#bob_1 (Bob): accepting business address request..." + biz <## "#bob_1: bob joined the group" + bob <## "#biz: joining the group..." + bob <## "#biz: you joined the group" + biz #> "#bob_1 hi" + bob <# "#biz biz_1> hi" + bob #> "#biz hello" + biz <# "#bob_1 bob> hello" + connectUsers biz alice + biz <##> alice + biz ##> "/a #bob_1 alice" + biz <## "invitation to join the group #bob_1 sent to alice" + alice <## "#bob (Bob): biz invites you to join the group as member" + alice <## "use /j bob to accept" + alice ##> "/j bob" + concurrentlyN_ + [ do + alice <## "#bob: you joined the group" + alice <### [WithTime "#bob biz> hi [>>]", WithTime "#bob bob_1> hello [>>]"] + alice <## "#bob: member bob_1 (Bob) is connected", + biz <## "#bob_1: alice joined the group", + do + bob <## "#biz: biz_1 added alice (Alice @ Biz) to the group (connecting...)" + bob <## "#biz: new member alice is connected" + ] + alice #> "#bob hey" + concurrently_ + (bob <# "#biz alice> hey") + (biz <# "#bob_1 alice> hey") + bob #> "#biz hey there" + concurrently_ + (alice <# "#bob bob_1> hey there") + (biz <# "#bob_1 bob> hey there") + testPlanAddressOkKnown :: HasCallStack => FilePath -> IO () testPlanAddressOkKnown = testChat2 aliceProfile bobProfile $ @@ -2380,7 +2425,7 @@ testSetUITheme = a <## "you've shared main profile with this contact" a <## "connection not verified, use /code command to see security code" a <## "quantum resistant end-to-end encryption" - a <## "peer chat protocol version range: (Version 1, Version 9)" + a <## "peer chat protocol version range: (Version 1, Version 10)" groupInfo a = do a <## "group ID: 1" a <## "current members: 1" diff --git a/tests/ChatTests/Utils.hs b/tests/ChatTests/Utils.hs index 8c022d5bfd..6459522134 100644 --- a/tests/ChatTests/Utils.hs +++ b/tests/ChatTests/Utils.hs @@ -64,6 +64,9 @@ cathProfile = Profile {displayName = "cath", fullName = "Catherine", image = Not danProfile :: Profile danProfile = Profile {displayName = "dan", fullName = "Daniel", image = Nothing, contactLink = Nothing, preferences = defaultPrefs} +businessProfile :: Profile +businessProfile = Profile {displayName = "biz", fullName = "Biz Inc", image = Nothing, contactLink = Nothing, preferences = defaultPrefs} + it :: HasCallStack => String -> (FilePath -> Expectation) -> SpecWith (Arg (FilePath -> Expectation)) it name test = Hspec.it name $ \tmp -> timeout t (test tmp) >>= maybe (error "test timed out") pure diff --git a/tests/ProtocolTests.hs b/tests/ProtocolTests.hs index f64efe108f..2eb946d731 100644 --- a/tests/ProtocolTests.hs +++ b/tests/ProtocolTests.hs @@ -133,7 +133,7 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do "{\"v\":\"1\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello\",\"type\":\"text\"}}}" ##==## ChatMessage chatInitialVRange (Just $ SharedMsgId "\1\2\3\4") (XMsgNew (MCSimple (extMsgContent (MCText "hello") Nothing))) it "x.msg.new chat message with chat version range" $ - "{\"v\":\"1-9\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello\",\"type\":\"text\"}}}" + "{\"v\":\"1-10\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello\",\"type\":\"text\"}}}" ##==## ChatMessage supportedChatVRange (Just $ SharedMsgId "\1\2\3\4") (XMsgNew (MCSimple (extMsgContent (MCText "hello") Nothing))) it "x.msg.new quote" $ "{\"v\":\"1\",\"msgId\":\"AQIDBA==\",\"event\":\"x.msg.new\",\"params\":{\"content\":{\"text\":\"hello to you too\",\"type\":\"text\"},\"quote\":{\"content\":{\"text\":\"hello there!\",\"type\":\"text\"},\"msgRef\":{\"msgId\":\"BQYHCA==\",\"sent\":true,\"sentAt\":\"1970-01-01T00:00:01.000000001Z\"}}}}" @@ -232,10 +232,10 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do ==# XContact testProfile Nothing it "x.grp.inv" $ "{\"v\":\"1\",\"event\":\"x.grp.inv\",\"params\":{\"groupInvitation\":{\"connRequest\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"invitedMember\":{\"memberRole\":\"member\",\"memberId\":\"BQYHCA==\"},\"groupProfile\":{\"fullName\":\"Team\",\"displayName\":\"team\",\"groupPreferences\":{\"reactions\":{\"enable\":\"on\"},\"voice\":{\"enable\":\"on\"}}},\"fromMember\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\"}}}}" - #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, groupLinkId = Nothing, groupSize = Nothing} + #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, businessChat = Nothing, groupLinkId = Nothing, groupSize = Nothing} it "x.grp.inv with group link id" $ "{\"v\":\"1\",\"event\":\"x.grp.inv\",\"params\":{\"groupInvitation\":{\"connRequest\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"invitedMember\":{\"memberRole\":\"member\",\"memberId\":\"BQYHCA==\"},\"groupProfile\":{\"fullName\":\"Team\",\"displayName\":\"team\",\"groupPreferences\":{\"reactions\":{\"enable\":\"on\"},\"voice\":{\"enable\":\"on\"}}},\"fromMember\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\"}, \"groupLinkId\":\"AQIDBA==\"}}}" - #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, groupLinkId = Just $ GroupLinkId "\1\2\3\4", groupSize = Nothing} + #==# XGrpInv GroupInvitation {fromMember = MemberIdRole (MemberId "\1\2\3\4") GRAdmin, invitedMember = MemberIdRole (MemberId "\5\6\7\8") GRMember, connRequest = testConnReq, groupProfile = testGroupProfile, businessChat = Nothing, groupLinkId = Just $ GroupLinkId "\1\2\3\4", groupSize = Nothing} it "x.grp.acpt without incognito profile" $ "{\"v\":\"1\",\"event\":\"x.grp.acpt\",\"params\":{\"memberId\":\"AQIDBA==\"}}" #==# XGrpAcpt (MemberId "\1\2\3\4") @@ -243,13 +243,13 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do "{\"v\":\"1\",\"event\":\"x.grp.mem.new\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemNew MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} it "x.grp.mem.new with member chat version range" $ - "{\"v\":\"1\",\"event\":\"x.grp.mem.new\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-9\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" + "{\"v\":\"1\",\"event\":\"x.grp.mem.new\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-10\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemNew MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} it "x.grp.mem.intro" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} Nothing it "x.grp.mem.intro with member chat version range" $ - "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-9\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" + "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-10\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} Nothing it "x.grp.mem.intro with member restrictions" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberRestrictions\":{\"restriction\":\"blocked\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" @@ -264,7 +264,7 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do "{\"v\":\"1\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"directConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemFwd MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} IntroInvitation {groupConnReq = testConnReq, directConnReq = Just testConnReq} it "x.grp.mem.fwd with member chat version range and w/t directConnReq" $ - "{\"v\":\"1\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-9\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" + "{\"v\":\"1\",\"event\":\"x.grp.mem.fwd\",\"params\":{\"memberIntro\":{\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D2-3%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-10\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" #==# XGrpMemFwd MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} IntroInvitation {groupConnReq = testConnReq, directConnReq = Nothing} it "x.grp.mem.info" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.info\",\"params\":{\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}" From 5a59fdd91c01fe1b420d7e45f5b467207b14f05e Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 2 Dec 2024 22:28:58 +0700 Subject: [PATCH 03/22] android, desktop: fix Can't represent a width ... and a height ... in Constraints (#5293) --- .../common/views/chat/item/FramedItemView.kt | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt index c2df11a8ea..e955428031 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt @@ -23,7 +23,7 @@ import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.res.MR -import kotlin.math.min +import kotlin.math.ceil @Composable fun FramedItemView( @@ -330,23 +330,16 @@ const val CHAT_IMAGE_LAYOUT_ID = "chatImage" const val CHAT_BUBBLE_LAYOUT_ID = "chatBubble" const val CHAT_COMPOSE_LAYOUT_ID = "chatCompose" const val CONSOLE_COMPOSE_LAYOUT_ID = "consoleCompose" -/** - * Equal to [androidx.compose.ui.unit.Constraints.MaxFocusMask], which is 0x3FFFF - 1 - * Other values make a crash `java.lang.IllegalArgumentException: Can't represent a width of 123456 and height of 9909 in Constraints` - * See [androidx.compose.ui.unit.Constraints.createConstraints] - * */ -const val MAX_SAFE_WIDTH = 0x3FFFF - 1 /** - * Limiting max value for height + width in order to not crash the app, see [androidx.compose.ui.unit.Constraints.createConstraints] - * */ -private fun maxSafeHeight(width: Int) = when { // width bits + height bits should be <= 31 - width < 0x1FFF /*MaxNonFocusMask*/ -> 0x3FFFF - 1 /* MaxFocusMask */ // 13 bits width + 18 bits height - width < 0x7FFF /*MinNonFocusMask*/ -> 0xFFFF - 1 /* MinFocusMask */ // 15 bits width + 16 bits height - width < 0xFFFF /*MinFocusMask*/ -> 0x7FFF - 1 /* MinFocusMask */ // 16 bits width + 15 bits height - width < 0x3FFFF /*MaxFocusMask*/ -> 0x1FFF - 1 /* MaxNonFocusMask */ // 18 bits width + 13 bits height - else -> 0x1FFF // shouldn't happen since width is limited already -} + * Compose shows "Can't represent a width of ... and height ... in Constraints" even when using built-in method for measuring max + * available size. It seems like padding around such layout prevents showing them in parent layout when such child layouts are placed. + * So calculating the expected padding here based on the values Compose printed in the exception (removing some pixels from + * [Constraints.fitPrioritizingHeight] result makes it working well) +*/ +private fun horizontalPaddingAroundCustomLayouts(density: Float): Int = + // currently, it's 18. Doubling it just to cover possible changes in the future + 36 * ceil(density).toInt() @Composable fun PriorityLayout( @@ -365,11 +358,15 @@ fun PriorityLayout( if (it.layoutId == priorityLayoutId) imagePlaceable!! else - it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: min(MAX_SAFE_WIDTH, constraints.maxWidth))) } + it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: constraints.maxWidth)) } // Limit width for every other element to width of important element and height for a sum of all elements. - val width = imagePlaceable?.measuredWidth ?: min(MAX_SAFE_WIDTH, placeables.maxOf { it.width }) - val height = minOf(maxSafeHeight(width), placeables.sumOf { it.height }) - layout(width, height) { + val width = imagePlaceable?.measuredWidth ?: placeables.maxOf { it.width } + val height = placeables.sumOf { it.height } + val adjustedConstraints = Constraints.fitPrioritizingHeight(constraints.minWidth, width, constraints.minHeight, height) + layout( + if (width > adjustedConstraints.maxWidth) adjustedConstraints.maxWidth - horizontalPaddingAroundCustomLayouts(density) else adjustedConstraints.maxWidth, + adjustedConstraints.maxHeight + ) { var y = 0 placeables.forEach { it.place(0, y) @@ -396,10 +393,14 @@ fun DependentLayout( if (it.layoutId == mainLayoutId) mainPlaceable!! else - it.measure(constraints.copy(minWidth = mainPlaceable?.width ?: 0, maxWidth = min(MAX_SAFE_WIDTH, constraints.maxWidth))) } - val width = mainPlaceable?.measuredWidth ?: min(MAX_SAFE_WIDTH, placeables.maxOf { it.width }) - val height = minOf(maxSafeHeight(width), placeables.sumOf { it.height }) - layout(width, height) { + it.measure(constraints.copy(minWidth = mainPlaceable?.width ?: 0, maxWidth = constraints.maxWidth)) } + val width = mainPlaceable?.measuredWidth ?: placeables.maxOf { it.width } + val height = placeables.sumOf { it.height } + val adjustedConstraints = Constraints.fitPrioritizingHeight(constraints.minWidth, width, constraints.minHeight, height) + layout( + if (width > adjustedConstraints.maxWidth) adjustedConstraints.maxWidth - horizontalPaddingAroundCustomLayouts(density) else adjustedConstraints.maxWidth, + adjustedConstraints.maxHeight + ) { var y = 0 placeables.forEach { it.place(0, y) From f6b611aa30655ab61ac37c69b3fa961434e4fc7b Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 2 Dec 2024 22:58:21 +0700 Subject: [PATCH 04/22] android, desktop: check existence before deleting database (#5298) --- .../chat/simplex/common/views/database/DatabaseView.kt | 5 ++++- .../chat/simplex/common/views/helpers/DatabaseUtils.kt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt index 8185122089..af40aa2e70 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt @@ -719,13 +719,16 @@ private fun deleteChatAlert(onConfirm: () -> Unit) { } private suspend fun deleteChat(m: ChatModel, progressIndicator: MutableState) { + if (!DatabaseUtils.hasAtLeastOneDatabase(dataDir.absolutePath)) { + return + } progressIndicator.value = true try { deleteChatAsync(m) operationEnded(m, progressIndicator) { AlertManager.shared.showAlertMsg(generalGetString(MR.strings.chat_database_deleted), generalGetString(MR.strings.restart_the_app_to_create_a_new_chat_profile)) } - } catch (e: Error) { + } catch (e: Throwable) { operationEnded(m, progressIndicator) { AlertManager.shared.showAlertMsg(generalGetString(MR.strings.error_deleting_database), e.toString()) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt index c621f186cd..4827e6ae61 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/DatabaseUtils.kt @@ -39,7 +39,7 @@ object DatabaseUtils { } } - private fun hasAtLeastOneDatabase(rootDir: String): Boolean = + fun hasAtLeastOneDatabase(rootDir: String): Boolean = File(rootDir + File.separator + chatDatabaseFileName).exists() || File(rootDir + File.separator + agentDatabaseFileName).exists() fun hasOnlyOneDatabase(rootDir: String): Boolean = From a62ce9168e227bbf159f83f2b3361ddef0b556c0 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 2 Dec 2024 20:30:05 +0400 Subject: [PATCH 05/22] core: fix names created for business request group and member (#5296) --- src/Simplex/Chat.hs | 4 ++-- src/Simplex/Chat/Store/Groups.hs | 40 +++++++++++++++++++++++++------- tests/ChatTests/Profiles.hs | 18 +++++++------- 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 92ec04d11b..7a48914abf 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -4007,13 +4007,13 @@ acceptGroupJoinRequestAsync acceptBusinessJoinRequestAsync :: User -> UserContactRequest -> CM GroupInfo acceptBusinessJoinRequestAsync user - ucr@UserContactRequest {agentInvitationId = AgentInvId invId, cReqChatVRange} = do + ucr@UserContactRequest {contactRequestId, agentInvitationId = AgentInvId invId, cReqChatVRange} = do vr <- chatVersionRange gVar <- asks random let userProfile@Profile {displayName, preferences} = profileToSendOnAccept user Nothing True groupPreferences = maybe defaultBusinessGroupPrefs businessGroupPrefs preferences (gInfo, clientMember) <- withStore $ \db -> do - liftIO $ deleteContactRequestRec db user ucr + liftIO $ deleteContactRequest db user contactRequestId createBusinessRequestGroup db vr gVar user ucr groupPreferences let GroupInfo {membership} = gInfo GroupMember {memberRole = userRole, memberId = userMemberId} = membership diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index b07adf407b..bb5252ddb0 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -155,7 +155,7 @@ import Simplex.Messaging.Util (eitherToMaybe, ($>>=), (<$$>)) import Simplex.Messaging.Version import UnliftIO.STM -type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime, Maybe MemberId, Maybe BusinessChatType, Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow +type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime, Maybe MemberId, Maybe BusinessChatType, Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow type GroupMemberRow = ((Int64, Int64, MemberId, VersionChat, VersionChat, GroupMemberRole, GroupMemberCategory, GroupMemberStatus, Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, ContactName, Maybe ContactId, ProfileId, ProfileId, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Preferences)) @@ -936,18 +936,17 @@ createBusinessRequestGroup db vr gVar - user@User {userId} - ucr@UserContactRequest {profile} + user@User {userId, userContactId} + UserContactRequest {cReqChatVRange, profile = Profile {displayName, fullName, image, contactLink, preferences}} groupPreferences = do currentTs <- liftIO getCurrentTime groupInfo <- insertGroup_ currentTs - (groupMemberId, memberId) <- createAcceptedMember db gVar user groupInfo ucr GRMember + (groupMemberId, memberId) <- insertClientMember_ currentTs groupInfo liftIO $ setBusinessMemberId groupInfo memberId - acceptedMember <- getGroupMemberById db vr user groupMemberId - pure (groupInfo, acceptedMember) + clientMember <- getGroupMemberById db vr user groupMemberId + pure (groupInfo, clientMember) where - insertGroup_ currentTs = ExceptT $ do - let Profile {displayName, fullName, image} = profile + insertGroup_ currentTs = ExceptT $ withLocalDisplayName db userId displayName $ \localDisplayName -> runExceptT $ do groupId <- liftIO $ do DB.execute @@ -968,6 +967,31 @@ createBusinessRequestGroup memberId <- liftIO $ encodedRandomBytes gVar 12 void $ createContactMemberInv_ db user groupId Nothing user (MemberIdRole (MemberId memberId) GROwner) GCUserMember GSMemCreator IBUser Nothing currentTs vr getGroupInfo db vr user groupId + VersionRange minV maxV = cReqChatVRange + insertClientMember_ currentTs GroupInfo {groupId, membership} = ExceptT $ do + withLocalDisplayName db userId displayName $ \localDisplayName -> runExceptT $ do + liftIO $ + DB.execute + db + "INSERT INTO contact_profiles (display_name, full_name, image, contact_link, user_id, preferences, created_at, updated_at) VALUES (?,?,?,?,?,?,?,?)" + (displayName, fullName, image, contactLink, userId, preferences, currentTs, currentTs) + profileId <- liftIO $ insertedRowId db + createWithRandomId gVar $ \memId -> do + DB.execute + db + [sql| + INSERT INTO group_members + ( group_id, member_id, member_role, member_category, member_status, invited_by, invited_by_group_member_id, + user_id, local_display_name, contact_id, contact_profile_id, created_at, updated_at, + peer_chat_min_version, peer_chat_max_version) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + |] + ( (groupId, MemberId memId, GRMember, GCInviteeMember, GSMemAccepted, fromInvitedBy userContactId IBUser, groupMemberId' membership) + :. (userId, localDisplayName, Nothing :: (Maybe Int64), profileId, currentTs, currentTs) + :. (minV, maxV) + ) + groupMemberId <- liftIO $ insertedRowId db + pure (groupMemberId, MemberId memId) setBusinessMemberId GroupInfo {groupId} businessMemberId = do DB.execute db "UPDATE groups SET business_member_id = ? WHERE group_id = ?" (businessMemberId, groupId) diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index b2db679f29..3ffe57ba2e 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -688,18 +688,18 @@ testBusinessAddress = testChat3 businessProfile aliceProfile {fullName = "Alice biz <## "auto_accept on, business" bob ##> ("/c " <> cLink) bob <## "connection request sent!" - biz <## "#bob_1 (Bob): accepting business address request..." - biz <## "#bob_1: bob joined the group" + biz <## "#bob (Bob): accepting business address request..." + biz <## "#bob: bob_1 joined the group" bob <## "#biz: joining the group..." bob <## "#biz: you joined the group" - biz #> "#bob_1 hi" + biz #> "#bob hi" bob <# "#biz biz_1> hi" bob #> "#biz hello" - biz <# "#bob_1 bob> hello" + biz <# "#bob bob_1> hello" connectUsers biz alice biz <##> alice - biz ##> "/a #bob_1 alice" - biz <## "invitation to join the group #bob_1 sent to alice" + biz ##> "/a #bob alice" + biz <## "invitation to join the group #bob sent to alice" alice <## "#bob (Bob): biz invites you to join the group as member" alice <## "use /j bob to accept" alice ##> "/j bob" @@ -708,7 +708,7 @@ testBusinessAddress = testChat3 businessProfile aliceProfile {fullName = "Alice alice <## "#bob: you joined the group" alice <### [WithTime "#bob biz> hi [>>]", WithTime "#bob bob_1> hello [>>]"] alice <## "#bob: member bob_1 (Bob) is connected", - biz <## "#bob_1: alice joined the group", + biz <## "#bob: alice joined the group", do bob <## "#biz: biz_1 added alice (Alice @ Biz) to the group (connecting...)" bob <## "#biz: new member alice is connected" @@ -716,11 +716,11 @@ testBusinessAddress = testChat3 businessProfile aliceProfile {fullName = "Alice alice #> "#bob hey" concurrently_ (bob <# "#biz alice> hey") - (biz <# "#bob_1 alice> hey") + (biz <# "#bob alice> hey") bob #> "#biz hey there" concurrently_ (alice <# "#bob bob_1> hey there") - (biz <# "#bob_1 bob> hey there") + (biz <# "#bob bob_1> hey there") testPlanAddressOkKnown :: HasCallStack => FilePath -> IO () testPlanAddressOkKnown = From 665501026dde8542898418f45afbef14fda5f414 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 2 Dec 2024 23:32:04 +0700 Subject: [PATCH 06/22] android: show info for Xiaomi users about autostart restrictions (#5295) * android: show info for Xiaomi users about autostart restrictions * text and placement * update strings --------- Co-authored-by: Evgeny Poberezkin --- .../src/main/java/chat/simplex/app/SimplexApp.kt | 2 ++ .../src/main/java/chat/simplex/app/SimplexService.kt | 8 +++++++- .../kotlin/chat/simplex/common/platform/Platform.kt | 1 + .../views/usersettings/NotificationsSettingsView.kt | 10 ++++++++-- .../src/commonMain/resources/MR/base/strings.xml | 5 +++-- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt index f46ed4775f..0ebd9ca2c6 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt @@ -332,6 +332,8 @@ class SimplexApp: Application(), LifecycleEventObserver { NetworkObserver.shared.restartNetworkObserver() } + override fun androidIsXiaomiDevice(): Boolean = setOf("xiaomi", "redmi", "poco").contains(Build.BRAND.lowercase()) + @SuppressLint("SourceLockedOrientationActivity") @Composable override fun androidLockPortraitOrientation() { diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt index ce3f0825b8..33799087a7 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt @@ -497,6 +497,12 @@ class SimplexService: Service() { Modifier.padding(bottom = 8.dp) ) Text(annotatedStringResource(MR.strings.turn_off_battery_optimization)) + + if (platform.androidIsXiaomiDevice() && (mode == NotificationsMode.PERIODIC || mode == NotificationsMode.SERVICE)) { + Text(annotatedStringResource(MR.strings.xiaomi_ignore_battery_optimization), + Modifier.padding(top = 8.dp) + ) + } } }, dismissButton = { @@ -623,7 +629,7 @@ class SimplexService: Service() { fun isBackgroundAllowed(): Boolean = isIgnoringBatteryOptimizations() && !isBackgroundRestricted() - fun isIgnoringBatteryOptimizations(): Boolean { + private fun isIgnoringBatteryOptimizations(): Boolean { val powerManager = androidAppContext.getSystemService(Application.POWER_SERVICE) as PowerManager return powerManager.isIgnoringBatteryOptimizations(androidAppContext.packageName) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt index 23ab450cb6..e0a9e22f71 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Platform.kt @@ -26,6 +26,7 @@ interface PlatformInterface { fun androidPictureInPictureAllowed(): Boolean = true fun androidCallEnded() {} fun androidRestartNetworkObserver() {} + fun androidIsXiaomiDevice(): Boolean = false val androidApiLevel: Int? get() = null @Composable fun androidLockPortraitOrientation() {} suspend fun androidAskToAllowBackgroundCalls(): Boolean = true diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt index 60bde83c17..66b518e9aa 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NotificationsSettingsView.kt @@ -1,11 +1,10 @@ package chat.simplex.common.views.usersettings import SectionBottomSpacer +import SectionTextFooter import SectionView import SectionViewSelectable import androidx.compose.foundation.layout.* -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier @@ -16,6 +15,7 @@ import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.text.style.TextOverflow import chat.simplex.common.model.* import chat.simplex.common.platform.* +import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.common.views.helpers.* import chat.simplex.res.MR import kotlin.collections.ArrayList @@ -77,6 +77,9 @@ fun NotificationsSettingsLayout( color = MaterialTheme.colors.secondary ) } + if (platform.androidIsXiaomiDevice() && (notificationsMode.value == NotificationsMode.PERIODIC || notificationsMode.value == NotificationsMode.SERVICE)) { + SectionTextFooter(stringResource(MR.strings.xiaomi_ignore_battery_optimization)) + } } SectionBottomSpacer() } @@ -91,6 +94,9 @@ fun NotificationsModeView( ColumnWithScrollBar { AppBarTitle(stringResource(MR.strings.settings_notifications_mode_title).lowercase().capitalize(Locale.current)) SectionViewSelectable(null, notificationsMode, modes, onNotificationsModeSelected) + if (platform.androidIsXiaomiDevice() && (notificationsMode.value == NotificationsMode.PERIODIC || notificationsMode.value == NotificationsMode.SERVICE)) { + SectionTextFooter(stringResource(MR.strings.xiaomi_ignore_battery_optimization)) + } } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 1c036d76b2..c390096ee2 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -191,9 +191,9 @@ Instant notifications Instant notifications! Instant notifications are disabled! - SimpleX background service – it uses a few percent of the battery per day.]]> + SimpleX runs in background instead of using push notifications.]]> It can be disabled via settings – notifications will still be shown while the app is running.]]> - allow SimpleX to run in background in the next dialog. Otherwise, the notifications will be disabled.]]> + Allow it in the next dialog to receive notifications instantly.]]> Battery optimization is active, turning off background service and periodic requests for new messages. You can re-enable them via settings. Periodic notifications Periodic notifications are disabled! @@ -210,6 +210,7 @@ To receive notifications, please, enter the database passphrase Can\'t initialize the database The database is not working correctly. Tap to learn more + Xiaomi devices: please enable Autostart in the system settings for notifications to work.]]> SimpleX Chat service From a588e7003d79ff540c8ea4c4c3915c0814274dd1 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 2 Dec 2024 23:33:22 +0700 Subject: [PATCH 07/22] android: alert round corners (#5299) Co-authored-by: Evgeny Poberezkin --- .../java/chat/simplex/app/SimplexService.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt index 33799087a7..3b9f2ade26 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt @@ -10,6 +10,8 @@ import android.os.* import android.os.SystemClock import android.provider.Settings import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CornerSize +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier @@ -462,7 +464,8 @@ class SimplexService: Service() { }, confirmButton = { TextButton(onClick = AlertManager.shared::hideAlert) { Text(stringResource(MR.strings.ok)) } - } + }, + shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) } @@ -510,7 +513,8 @@ class SimplexService: Service() { }, confirmButton = { TextButton(onClick = ignoreOptimization) { Text(stringResource(MR.strings.turn_off_battery_optimization_button)) } - } + }, + shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) } @@ -552,7 +556,8 @@ class SimplexService: Service() { }, confirmButton = { TextButton(onClick = unrestrict) { Text(stringResource(MR.strings.turn_off_system_restriction_button)) } - } + }, + shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) } @@ -579,7 +584,8 @@ class SimplexService: Service() { }, confirmButton = { TextButton(onClick = unrestrict) { Text(stringResource(MR.strings.turn_off_system_restriction_button)) } - } + }, + shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) val scope = rememberCoroutineScope() DisposableEffect(Unit) { @@ -623,7 +629,8 @@ class SimplexService: Service() { }, confirmButton = { TextButton(onClick = AlertManager.shared::hideAlert) { Text(stringResource(MR.strings.ok)) } - } + }, + shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) } From bc960001310cb454ceddc3650a6d155721d48988 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 2 Dec 2024 21:40:22 +0400 Subject: [PATCH 08/22] ios: support business addresses and chats (#5300) * ios: support business addresses and chats * improve * words * fix --------- Co-authored-by: Evgeny Poberezkin --- apps/ios/Shared/Model/SimpleXAPI.swift | 7 +++ .../Views/Chat/Group/GroupChatInfoView.swift | 24 ++++++---- .../Chat/Group/GroupPreferencesView.swift | 6 +-- .../Views/Chat/Group/GroupWelcomeView.swift | 2 +- .../Views/UserSettings/UserAddressView.swift | 42 +++++++++--------- apps/ios/SimpleX.xcodeproj/project.pbxproj | 44 +++++++++---------- apps/ios/SimpleXChat/APITypes.swift | 12 ++++- apps/ios/SimpleXChat/ChatTypes.swift | 13 +++++- apps/ios/SimpleXChat/ChatUtils.swift | 7 ++- 9 files changed, 96 insertions(+), 61 deletions(-) diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 459ece32da..5f29a848ef 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -2014,6 +2014,13 @@ func processReceivedMsg(_ res: ChatResponse) async { m.removeChat(hostConn.id) } } + case let .businessLinkConnecting(user, groupInfo, hostMember, fromContact): + if !active(user) { return } + + await MainActor.run { + m.updateGroup(groupInfo) + m.removeChat(fromContact.id) + } case let .joinedGroupMemberConnecting(user, groupInfo, _, member): if active(user) { await MainActor.run { diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift index 59df52df9f..89f0fcbedf 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift @@ -81,10 +81,10 @@ struct GroupChatInfoView: View { .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)) Section { - if groupInfo.canEdit { + if groupInfo.isOwner && groupInfo.businessChat == nil { editGroupButton() } - if groupInfo.groupProfile.description != nil || groupInfo.canEdit { + if groupInfo.groupProfile.description != nil || (groupInfo.isOwner && groupInfo.businessChat == nil) { addOrEditWelcomeMessage() } groupPreferencesButton($groupInfo) @@ -107,7 +107,9 @@ struct GroupChatInfoView: View { Section(header: Text("\(members.count + 1) members").foregroundColor(theme.colors.secondary)) { if groupInfo.canAddMembers { - groupLinkButton() + if groupInfo.businessChat == nil { + groupLinkButton() + } if (chat.chatInfo.incognito) { Label("Invite members", systemImage: "plus") .foregroundColor(Color(uiColor: .tertiaryLabel)) @@ -276,10 +278,15 @@ struct GroupChatInfoView: View { } private func addMembersButton() -> some View { - NavigationLink { + let label: LocalizedStringKey = switch groupInfo.businessChat?.chatType { + case .customer: "Add team members" + case .business: "Add friends" + case .none: "Invite members" + } + return NavigationLink { addMembersDestinationView() } label: { - Label("Invite members", systemImage: "plus") + Label(label, systemImage: "plus") } } @@ -625,21 +632,22 @@ struct GroupChatInfoView: View { } func groupPreferencesButton(_ groupInfo: Binding, _ creatingGroup: Bool = false) -> some View { - NavigationLink { + let label: LocalizedStringKey = groupInfo.wrappedValue.businessChat == nil ? "Group preferences" : "Chat preferences" + return NavigationLink { GroupPreferencesView( groupInfo: groupInfo, preferences: groupInfo.wrappedValue.fullGroupPreferences, currentPreferences: groupInfo.wrappedValue.fullGroupPreferences, creatingGroup: creatingGroup ) - .navigationBarTitle("Group preferences") + .navigationBarTitle(label) .modifier(ThemedBackground(grouped: true)) .navigationBarTitleDisplayMode(.large) } label: { if creatingGroup { Text("Set group preferences") } else { - Label("Group preferences", systemImage: "switch.2") + Label(label, systemImage: "switch.2") } } } diff --git a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift index 2b0d05375b..bbbbe4d4c3 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift @@ -38,7 +38,7 @@ struct GroupPreferencesView: View { featureSection(.simplexLinks, $preferences.simplexLinks.enable, $preferences.simplexLinks.role) featureSection(.history, $preferences.history.enable) - if groupInfo.canEdit { + if groupInfo.isOwner { Section { Button("Reset") { preferences = currentPreferences } Button(saveText) { savePreferences() } @@ -77,7 +77,7 @@ struct GroupPreferencesView: View { let color: Color = enableFeature.wrappedValue == .on ? .green : theme.colors.secondary let icon = enableFeature.wrappedValue == .on ? feature.iconFilled : feature.icon let timedOn = feature == .timedMessages && enableFeature.wrappedValue == .on - if groupInfo.canEdit { + if groupInfo.isOwner { let enable = Binding( get: { enableFeature.wrappedValue == .on }, set: { on, _ in enableFeature.wrappedValue = on ? .on : .off } @@ -123,7 +123,7 @@ struct GroupPreferencesView: View { } } } footer: { - Text(feature.enableDescription(enableFeature.wrappedValue, groupInfo.canEdit)) + Text(feature.enableDescription(enableFeature.wrappedValue, groupInfo.isOwner)) .foregroundColor(theme.colors.secondary) } .onChange(of: enableFeature.wrappedValue) { enabled in diff --git a/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift b/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift index 9a9002f9dc..8dfc32f6ea 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupWelcomeView.swift @@ -23,7 +23,7 @@ struct GroupWelcomeView: View { var body: some View { VStack { - if groupInfo.canEdit { + if groupInfo.isOwner && groupInfo.businessChat == nil { editorView() .modifier(BackButton(disabled: Binding.constant(false)) { if welcomeTextUnchanged() { diff --git a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift index 6bc3a221b2..7965215b49 100644 --- a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift @@ -57,21 +57,17 @@ struct UserAddressView: View { if chatModel.userAddress == nil, autoCreate { createAddress() } - if let userAddress = chatModel.userAddress { - aas = AutoAcceptState(userAddress: userAddress) - savedAAS = aas - } } - .onChange(of: aas.enable) { aasEnabled in - if !aasEnabled { aas = AutoAcceptState() } - } - } private func userAddressView() -> some View { List { if let userAddress = chatModel.userAddress { existingAddressView(userAddress) + .onAppear { + aas = AutoAcceptState(userAddress: userAddress) + savedAAS = aas + } } else { Section { createAddressButton() @@ -145,13 +141,14 @@ struct UserAddressView: View { // if MFMailComposeViewController.canSendMail() { // shareViaEmailButton(userAddress) // } - settingsRow("hand.wave", color: theme.colors.secondary) { + settingsRow("briefcase", color: theme.colors.secondary) { Toggle("Business address", isOn: $aas.business) .onChange(of: aas.business) { ba in if ba { aas.enable = true aas.incognito = false } + saveAAS($aas, $savedAAS) } } addressSettingsButton(userAddress) @@ -160,7 +157,8 @@ struct UserAddressView: View { .foregroundColor(theme.colors.secondary) } footer: { if aas.business { - Text("Add your team members to the conversations").foregroundColor(theme.colors.secondary) + Text("Add your team members to the conversations.") + .foregroundColor(theme.colors.secondary) } } @@ -313,7 +311,7 @@ private struct AutoAcceptState: Equatable { if let aa = userAddress.autoAccept { enable = true incognito = aa.acceptIncognito - business = aa.businessAddress == true + business = aa.businessAddress if let msg = aa.autoReply { welcomeText = msg.text } else { @@ -382,7 +380,7 @@ struct UserAddressSettingsView: View { title: NSLocalizedString("Auto-accept settings", comment: "alert title"), message: NSLocalizedString("Settings were changed.", comment: "alert message"), buttonTitle: NSLocalizedString("Save", comment: "alert button"), - buttonAction: saveAAS, + buttonAction: { saveAAS($aas, $savedAAS) }, cancelButton: true ) } @@ -470,7 +468,7 @@ struct UserAddressSettingsView: View { settingsRow("checkmark", color: theme.colors.secondary) { Toggle("Auto-accept", isOn: $aas.enable) .onChange(of: aas.enable) { _ in - saveAAS() + saveAAS($aas, $savedAAS) } } } @@ -519,22 +517,24 @@ struct UserAddressSettingsView: View { private func saveAASButton() -> some View { Button { keyboardVisible = false - saveAAS() + saveAAS($aas, $savedAAS) } label: { Text("Save") } } +} - private func saveAAS() { - Task { - do { - if let address = try await userAddressAutoAccept(aas.autoAccept) { +private func saveAAS(_ aas: Binding, _ savedAAS: Binding) { + Task { + do { + if let address = try await userAddressAutoAccept(aas.wrappedValue.autoAccept) { + await MainActor.run { ChatModel.shared.userAddress = address - savedAAS = aas + savedAAS.wrappedValue = aas.wrappedValue } - } catch let error { - logger.error("userAddressAutoAccept error: \(responseError(error))") } + } catch let error { + logger.error("userAddressAutoAccept error: \(responseError(error))") } } } diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 7e5a48013b..8d4e4fe5c4 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -148,11 +148,6 @@ 6419EC562AB8BC8B004A607A /* ContextInvitingContactMemberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */; }; 6419EC582AB97507004A607A /* CIMemberCreatedContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */; }; 642BA82D2CE50495005E9412 /* NewServerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 642BA82C2CE50495005E9412 /* NewServerView.swift */; }; - 642BA8332CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */; }; - 642BA8342CEB3D4B005E9412 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA82F2CEB3D4B005E9412 /* libffi.a */; }; - 642BA8352CEB3D4B005E9412 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA8302CEB3D4B005E9412 /* libgmp.a */; }; - 642BA8362CEB3D4B005E9412 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA8312CEB3D4B005E9412 /* libgmpxx.a */; }; - 642BA8372CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */; }; 6432857C2925443C00FBE5C8 /* GroupPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6432857B2925443C00FBE5C8 /* GroupPreferencesView.swift */; }; 643B3B4E2CCFD6400083A2CF /* OperatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643B3B4D2CCFD6400083A2CF /* OperatorView.swift */; }; 6440CA00288857A10062C672 /* CIEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6440C9FF288857A10062C672 /* CIEventView.swift */; }; @@ -171,6 +166,11 @@ 647F090E288EA27B00644C40 /* GroupMemberInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 647F090D288EA27B00644C40 /* GroupMemberInfoView.swift */; }; 648010AB281ADD15009009B9 /* CIFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648010AA281ADD15009009B9 /* CIFileView.swift */; }; 648679AB2BC96A74006456E7 /* ChatItemForwardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */; }; + 649B28DD2CFE07CF00536B68 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28D82CFE07CF00536B68 /* libffi.a */; }; + 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */; }; + 649B28DF2CFE07CF00536B68 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DA2CFE07CF00536B68 /* libgmpxx.a */; }; + 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */; }; + 649B28E12CFE07CF00536B68 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DC2CFE07CF00536B68 /* libgmp.a */; }; 649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; }; 649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; }; 64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */; }; @@ -229,7 +229,6 @@ D741547A29AF90B00022400A /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547929AF90B00022400A /* PushKit.framework */; }; D77B92DC2952372200A5A1CC /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = D77B92DB2952372200A5A1CC /* SwiftyGif */; }; D7F0E33929964E7E0068AF69 /* LZString in Frameworks */ = {isa = PBXBuildFile; productRef = D7F0E33829964E7E0068AF69 /* LZString */; }; - E504516F2CFA3BFB00DE3F74 /* ContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = E504516E2CFA3BFB00DE3F74 /* ContextMenu.swift */; }; E51CC1E62C62085600DB91FE /* OneHandUICard.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51CC1E52C62085600DB91FE /* OneHandUICard.swift */; }; E5DCF8DB2C56FAC1007928CC /* SimpleXChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; }; E5DCF9712C590272007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF96F2C590272007928CC /* Localizable.strings */; }; @@ -497,11 +496,6 @@ 6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextInvitingContactMemberView.swift; sourceTree = ""; }; 6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIMemberCreatedContactView.swift; sourceTree = ""; }; 642BA82C2CE50495005E9412 /* NewServerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewServerView.swift; sourceTree = ""; }; - 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a"; sourceTree = ""; }; - 642BA82F2CEB3D4B005E9412 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 642BA8302CEB3D4B005E9412 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 642BA8312CEB3D4B005E9412 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a"; sourceTree = ""; }; 6432857B2925443C00FBE5C8 /* GroupPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupPreferencesView.swift; sourceTree = ""; }; 643B3B4D2CCFD6400083A2CF /* OperatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperatorView.swift; sourceTree = ""; }; 6440C9FF288857A10062C672 /* CIEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIEventView.swift; sourceTree = ""; }; @@ -521,6 +515,11 @@ 648010AA281ADD15009009B9 /* CIFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIFileView.swift; sourceTree = ""; }; 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemForwardingView.swift; sourceTree = ""; }; 6493D667280ED77F007A76FB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 649B28D82CFE07CF00536B68 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a"; sourceTree = ""; }; + 649B28DA2CFE07CF00536B68 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a"; sourceTree = ""; }; + 649B28DC2CFE07CF00536B68 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeImageView.swift; sourceTree = ""; }; 649BCDA12805D6EF00C3A862 /* CIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIImageView.swift; sourceTree = ""; }; 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextItemView.swift; sourceTree = ""; }; @@ -576,7 +575,6 @@ D741547729AF89AF0022400A /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; }; D741547929AF90B00022400A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/PushKit.framework; sourceTree = DEVELOPER_DIR; }; D7AA2C3429A936B400737B40 /* MediaEncryption.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = MediaEncryption.playground; path = Shared/MediaEncryption.playground; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - E504516E2CFA3BFB00DE3F74 /* ContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextMenu.swift; sourceTree = ""; }; E51CC1E52C62085600DB91FE /* OneHandUICard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OneHandUICard.swift; sourceTree = ""; }; E5DCF9702C590272007928CC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; E5DCF9722C590274007928CC /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = ""; }; @@ -669,14 +667,14 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 649B28DF2CFE07CF00536B68 /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, + 649B28E12CFE07CF00536B68 /* libgmp.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, + 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a in Frameworks */, CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */, - 642BA8342CEB3D4B005E9412 /* libffi.a in Frameworks */, - 642BA8352CEB3D4B005E9412 /* libgmp.a in Frameworks */, - 642BA8372CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a in Frameworks */, - 642BA8332CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a in Frameworks */, - 642BA8362CEB3D4B005E9412 /* libgmpxx.a in Frameworks */, + 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a in Frameworks */, + 649B28DD2CFE07CF00536B68 /* libffi.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -753,11 +751,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 642BA82F2CEB3D4B005E9412 /* libffi.a */, - 642BA8302CEB3D4B005E9412 /* libgmp.a */, - 642BA8312CEB3D4B005E9412 /* libgmpxx.a */, - 642BA8322CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */, - 642BA82E2CEB3D4B005E9412 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */, + 649B28D82CFE07CF00536B68 /* libffi.a */, + 649B28DC2CFE07CF00536B68 /* libgmp.a */, + 649B28DA2CFE07CF00536B68 /* libgmpxx.a */, + 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B-ghc9.6.3.a */, + 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.2.0.3-ELfYrsBTXJJ5vBEIgQ1y2B.a */, ); path = Libraries; sourceTree = ""; @@ -793,7 +791,6 @@ 5C971E1F27AEBF7000C8A3CE /* Helpers */ = { isa = PBXGroup; children = ( - E504516E2CFA3BFB00DE3F74 /* ContextMenu.swift */, 5C971E2027AEBF8300C8A3CE /* ChatInfoImage.swift */, 5C7505A427B679EE00BE3227 /* NavLinkPlain.swift */, 5CC1C99427A6CF7F000D9FF6 /* ShareSheet.swift */, @@ -1448,7 +1445,6 @@ CE984D4B2C36C5D500E3AEFF /* ChatItemClipShape.swift in Sources */, 64D0C2C629FAC1EC00B38D5F /* AddContactLearnMore.swift in Sources */, 5C3A88D127DF57800060F1C2 /* FramedItemView.swift in Sources */, - E504516F2CFA3BFB00DE3F74 /* ContextMenu.swift in Sources */, 5C65F343297D45E100B67AF3 /* VersionView.swift in Sources */, 64F1CC3B28B39D8600CD1FB1 /* IncognitoHelp.swift in Sources */, 5CB0BA90282713D900B3292C /* SimpleXInfo.swift in Sources */, diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 954022c312..07095ed5e1 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -640,6 +640,7 @@ public enum ChatResponse: Decodable, Error { case sentGroupInvitation(user: UserRef, groupInfo: GroupInfo, contact: Contact, member: GroupMember) case userAcceptedGroupSent(user: UserRef, groupInfo: GroupInfo, hostContact: Contact?) case groupLinkConnecting(user: UserRef, groupInfo: GroupInfo, hostMember: GroupMember) + case businessLinkConnecting(user: UserRef, groupInfo: GroupInfo, hostMember: GroupMember, fromContact: Contact) case userDeletedMember(user: UserRef, groupInfo: GroupInfo, member: GroupMember) case leftMemberUser(user: UserRef, groupInfo: GroupInfo) case groupMembers(user: UserRef, group: Group) @@ -816,6 +817,7 @@ public enum ChatResponse: Decodable, Error { case .sentGroupInvitation: return "sentGroupInvitation" case .userAcceptedGroupSent: return "userAcceptedGroupSent" case .groupLinkConnecting: return "groupLinkConnecting" + case .businessLinkConnecting: return "businessLinkConnecting" case .userDeletedMember: return "userDeletedMember" case .leftMemberUser: return "leftMemberUser" case .groupMembers: return "groupMembers" @@ -998,6 +1000,7 @@ public enum ChatResponse: Decodable, Error { case let .sentGroupInvitation(u, groupInfo, contact, member): return withUser(u, "groupInfo: \(groupInfo)\ncontact: \(contact)\nmember: \(member)") case let .userAcceptedGroupSent(u, groupInfo, hostContact): return withUser(u, "groupInfo: \(groupInfo)\nhostContact: \(String(describing: hostContact))") case let .groupLinkConnecting(u, groupInfo, hostMember): return withUser(u, "groupInfo: \(groupInfo)\nhostMember: \(String(describing: hostMember))") + case let .businessLinkConnecting(u, groupInfo, hostMember, fromContact): return withUser(u, "groupInfo: \(groupInfo)\nhostMember: \(String(describing: hostMember))\nfromContact: \(String(describing: fromContact))") case let .userDeletedMember(u, groupInfo, member): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)") case let .leftMemberUser(u, groupInfo): return withUser(u, String(describing: groupInfo)) case let .groupMembers(u, group): return withUser(u, String(describing: group)) @@ -2103,7 +2106,7 @@ public struct UserContactLink: Decodable, Hashable { } public struct AutoAccept: Codable, Hashable { - public var businessAddress: Bool? // make not nullable + public var businessAddress: Bool public var acceptIncognito: Bool public var autoReply: MsgContent? @@ -2115,7 +2118,12 @@ public struct AutoAccept: Codable, Hashable { static func cmdString(_ autoAccept: AutoAccept?) -> String { guard let autoAccept = autoAccept else { return "off" } - let s = "on" + (autoAccept.acceptIncognito ? " incognito=on" : "") + var s = "on" + if autoAccept.acceptIncognito { + s += " incognito=on" + } else if autoAccept.businessAddress { + s += " business" + } guard let msg = autoAccept.autoReply else { return s } return s + " " + msg.cmdString } diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index de671ee203..b2532c1dc1 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -1890,6 +1890,7 @@ public struct GroupInfo: Identifiable, Decodable, NamedChat, Hashable { public var groupId: Int64 var localDisplayName: GroupName public var groupProfile: GroupProfile + public var businessChat: BusinessChatInfo? public var fullGroupPreferences: FullGroupPreferences public var membership: GroupMember public var hostConnCustomUserProfileId: Int64? @@ -1908,7 +1909,7 @@ public struct GroupInfo: Identifiable, Decodable, NamedChat, Hashable { public var image: String? { get { groupProfile.image } } public var localAlias: String { "" } - public var canEdit: Bool { + public var isOwner: Bool { return membership.memberRole == .owner && membership.memberCurrent } @@ -1960,6 +1961,16 @@ public struct GroupProfile: Codable, NamedChat, Hashable { ) } +public struct BusinessChatInfo: Decodable, Hashable { + public var memberId: String + public var chatType: BusinessChatType +} + +public enum BusinessChatType: String, Codable, Hashable { + case business + case customer +} + public struct GroupMember: Identifiable, Decodable, Hashable { public var groupMemberId: Int64 public var groupId: Int64 diff --git a/apps/ios/SimpleXChat/ChatUtils.swift b/apps/ios/SimpleXChat/ChatUtils.swift index 5f56180918..2bf861f437 100644 --- a/apps/ios/SimpleXChat/ChatUtils.swift +++ b/apps/ios/SimpleXChat/ChatUtils.swift @@ -93,7 +93,12 @@ private func canForwardToChat(_ cInfo: ChatInfo) -> Bool { public func chatIconName(_ cInfo: ChatInfo) -> String { switch cInfo { case .direct: "person.crop.circle.fill" - case .group: "person.2.circle.fill" + case let .group(groupInfo): + switch groupInfo.businessChat?.chatType { + case .none: "person.2.circle.fill" + case .business: "briefcase.circle.fill" + case .customer: "person.crop.circle.fill" + } case .local: "folder.circle.fill" case .contactRequest: "person.crop.circle.fill" default: "circle.fill" From 92967dfe0c57c5281583c243956cd30ae087d390 Mon Sep 17 00:00:00 2001 From: Diogo Date: Mon, 2 Dec 2024 20:14:26 +0000 Subject: [PATCH 09/22] ios: disable autocorrect add group member search (#5301) --- apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift index 859d2dfd27..691bda39a6 100644 --- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift +++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift @@ -231,6 +231,7 @@ func searchFieldView(text: Binding, focussed: FocusState.Binding, .focused(focussed) .foregroundColor(onBackgroundColor) .frame(maxWidth: .infinity) + .autocorrectionDisabled(true) Image(systemName: "xmark.circle.fill") .resizable() .scaledToFit() From c04e952620ac3b6a3a01724d88607485837121d3 Mon Sep 17 00:00:00 2001 From: Diogo Date: Mon, 2 Dec 2024 21:00:55 +0000 Subject: [PATCH 10/22] desktop: onboarding improvements (#5294) * consistent space to bottom on future of messaging * consistent button suze on server operators * updated setup database passphrase screen * ability to cancel random passphrase * reduce conditions padding to header * show scrollbar in desktop * EOLs * EOL * fix random passphrase param when deleting database and recreating new one --------- Co-authored-by: Evgeny Co-authored-by: Avently <7953703+avently@users.noreply.github.com> --- .../networkAndServers/OperatorView.android.kt | 19 ++++ .../common/views/database/DatabaseView.kt | 1 + .../views/onboarding/ChooseServerOperators.kt | 8 +- .../common/views/onboarding/HowItWorks.kt | 8 +- .../onboarding/SetupDatabasePassphrase.kt | 94 +++++++++---------- .../networkAndServers/NetworkAndServers.kt | 2 +- .../networkAndServers/OperatorView.kt | 27 +++--- .../networkAndServers/OperatorView.desktop.kt | 51 ++++++++++ 8 files changed, 141 insertions(+), 69 deletions(-) create mode 100644 apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.android.kt create mode 100644 apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.desktop.kt diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.android.kt new file mode 100644 index 0000000000..e52515b345 --- /dev/null +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.android.kt @@ -0,0 +1,19 @@ +package chat.simplex.common.views.usersettings.networkAndServers + +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.verticalScroll +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +actual fun ConditionsBox(modifier: Modifier, scrollState: ScrollState, content: @Composable() (BoxScope.() -> Unit)){ + Box( + modifier = modifier + .verticalScroll(scrollState) + .padding(8.dp) + ) { + content() + } +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt index af40aa2e70..e1f53760e5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt @@ -525,6 +525,7 @@ fun deleteChatDatabaseFilesAndState() { wallpapersDir.mkdirs() DatabaseUtils.ksDatabasePassword.remove() appPrefs.newDatabaseInitialized.set(false) + chatModel.desktopOnboardingRandomPassword.value = false controller.appPrefs.storeDBPassphrase.set(true) controller.ctrl = null diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt index 84ed7d1651..782f51c205 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt @@ -169,7 +169,7 @@ private fun ReviewConditionsButton( modalManager: ModalManager ) { OnboardingActionButton( - modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier, + modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp), labelId = MR.strings.operator_review_conditions, onboarding = null, enabled = enabled, @@ -184,7 +184,7 @@ private fun ReviewConditionsButton( @Composable private fun SetOperatorsButton(enabled: Boolean, onboarding: Boolean, serverOperators: State>, selectedOperatorIds: State>, close: () -> Unit) { OnboardingActionButton( - modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier, + modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp), labelId = MR.strings.onboarding_network_operators_update, onboarding = null, enabled = enabled, @@ -206,7 +206,7 @@ private fun SetOperatorsButton(enabled: Boolean, onboarding: Boolean, serverOper @Composable private fun ContinueButton(enabled: Boolean, onboarding: Boolean, close: () -> Unit) { OnboardingActionButton( - modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier, + modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp), labelId = MR.strings.onboarding_network_operators_continue, onboarding = null, enabled = enabled, @@ -235,7 +235,7 @@ private fun ReviewConditionsView( val operatorsWithConditionsAccepted = remember { chatModel.conditions.value.serverOperators.filter { it.conditionsAcceptance.conditionsAccepted } } val acceptForOperators = remember { selectedOperators.value.filter { !it.conditionsAcceptance.conditionsAccepted } } ColumnWithScrollBar(modifier = Modifier.fillMaxSize().padding(horizontal = DEFAULT_PADDING)) { - AppBarTitle(stringResource(MR.strings.operator_conditions_of_use), withPadding = false, enableAlphaChanges = false) + AppBarTitle(stringResource(MR.strings.operator_conditions_of_use), withPadding = false, enableAlphaChanges = false, bottomPadding = DEFAULT_PADDING) if (operatorsWithConditionsAccepted.isNotEmpty()) { ReadableText(MR.strings.operator_conditions_accepted_for_some, args = operatorsWithConditionsAccepted.joinToString(", ") { it.legalName_ }) ReadableText(MR.strings.operator_same_conditions_will_apply_to_operators, args = acceptForOperators.joinToString(", ") { it.legalName_ }) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt index f7e7f456bb..aff02e90f5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt @@ -1,6 +1,7 @@ package chat.simplex.common.views.onboarding import androidx.compose.desktop.ui.tooling.preview.Preview +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.material.* @@ -23,7 +24,7 @@ import dev.icerock.moko.resources.StringResource @Composable fun HowItWorks(user: User?, onboardingStage: SharedPreference? = null) { - ColumnWithScrollBar(Modifier.padding(DEFAULT_PADDING)) { + ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_PADDING)) { AppBarTitle(stringResource(MR.strings.how_simplex_works), withPadding = false) ReadableText(MR.strings.to_protect_privacy_simplex_has_ids_for_queues) ReadableText(MR.strings.only_client_devices_store_contacts_groups_e2e_encrypted_messages) @@ -35,11 +36,12 @@ fun HowItWorks(user: User?, onboardingStage: SharedPreference? Spacer(Modifier.fillMaxHeight().weight(1f)) if (onboardingStage != null) { - Box(Modifier.fillMaxWidth().padding(bottom = DEFAULT_PADDING), contentAlignment = Alignment.Center) { + Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { OnboardingActionButton(user, onboardingStage, onclick = { ModalManager.fullscreen.closeModal() }) + // Reserve space + TextButtonBelowOnboardingButton("", null) } } - Spacer(Modifier.height(DEFAULT_PADDING)) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt index f20cb38dad..e7db51c768 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt @@ -1,6 +1,5 @@ package chat.simplex.common.views.onboarding -import SectionTextFooter import androidx.compose.foundation.layout.* import androidx.compose.foundation.text.KeyboardActions import androidx.compose.material.* @@ -12,7 +11,6 @@ import androidx.compose.ui.focus.* import androidx.compose.ui.input.key.* import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.text.input.ImeAction -import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -106,14 +104,31 @@ private fun SetupDatabasePassphraseLayout( CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { ModalView({}, showClose = false) { ColumnWithScrollBar( - Modifier.themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer).padding(bottom = DEFAULT_PADDING * 2), + Modifier.themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer).padding(horizontal = DEFAULT_PADDING), horizontalAlignment = Alignment.CenterHorizontally, ) { AppBarTitle(stringResource(MR.strings.setup_database_passphrase)) - Spacer(Modifier.weight(1f)) + val onClickUpdate = { + // Don't do things concurrently. Shouldn't be here concurrently, just in case + if (!progressIndicator.value) { + encryptDatabaseAlert(onConfirmEncrypt) + } + } + val disabled = currentKey.value == newKey.value || + newKey.value != confirmNewKey.value || + newKey.value.isEmpty() || + !validKey(currentKey.value) || + !validKey(newKey.value) || + progressIndicator.value + + Column(Modifier.width(600.dp), horizontalAlignment = Alignment.CenterHorizontally) { + val textStyle = MaterialTheme.typography.body1.copy(color = MaterialTheme.colors.secondary) + ReadableText(MR.strings.you_have_to_enter_passphrase_every_time, TextAlign.Center, padding = PaddingValues(), style = textStyle ) + Spacer(Modifier.height(DEFAULT_PADDING)) + ReadableText(MR.strings.impossible_to_recover_passphrase, TextAlign.Center, padding = PaddingValues(), style = textStyle) + Spacer(Modifier.height(DEFAULT_PADDING)) - Column(Modifier.width(600.dp)) { val focusRequester = remember { FocusRequester() } val focusManager = LocalFocusManager.current LaunchedEffect(Unit) { @@ -138,18 +153,6 @@ private fun SetupDatabasePassphraseLayout( isValid = ::validKey, keyboardActions = KeyboardActions(onNext = { defaultKeyboardAction(ImeAction.Next) }), ) - val onClickUpdate = { - // Don't do things concurrently. Shouldn't be here concurrently, just in case - if (!progressIndicator.value) { - encryptDatabaseAlert(onConfirmEncrypt) - } - } - val disabled = currentKey.value == newKey.value || - newKey.value != confirmNewKey.value || - newKey.value.isEmpty() || - !validKey(currentKey.value) || - !validKey(newKey.value) || - progressIndicator.value PassphraseField( confirmNewKey, @@ -167,21 +170,17 @@ private fun SetupDatabasePassphraseLayout( isValid = { confirmNewKey.value == "" || newKey.value == confirmNewKey.value }, keyboardActions = KeyboardActions(onDone = { defaultKeyboardAction(ImeAction.Done) }), ) - - Box(Modifier.align(Alignment.CenterHorizontally).padding(vertical = DEFAULT_PADDING)) { - SetPassphraseButton(disabled, onClickUpdate) - } - - Column { - SectionTextFooter(generalGetString(MR.strings.you_have_to_enter_passphrase_every_time)) - SectionTextFooter(annotatedStringResource(MR.strings.impossible_to_recover_passphrase)) - } } - Spacer(Modifier.weight(1f)) - SkipButton(progressIndicator.value) { - chatModel.desktopOnboardingRandomPassword.value = true - nextStep() + + Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp), horizontalAlignment = Alignment.CenterHorizontally) { + SetPassphraseButton(disabled, onClickUpdate) + SkipButton(progressIndicator.value) { + randomPassphraseAlert { + chatModel.desktopOnboardingRandomPassword.value = true + nextStep() + } + } } } } @@ -190,30 +189,18 @@ private fun SetupDatabasePassphraseLayout( @Composable private fun SetPassphraseButton(disabled: Boolean, onClick: () -> Unit) { - SimpleButtonIconEnded( - stringResource(MR.strings.set_database_passphrase), - painterResource(MR.images.ic_check), - style = MaterialTheme.typography.h2, - color = if (disabled) MaterialTheme.colors.secondary else MaterialTheme.colors.primary, - disabled = disabled, - click = onClick + OnboardingActionButton( + if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_PADDING * 2).fillMaxWidth() else Modifier.widthIn(min = 300.dp), + labelId = MR.strings.set_database_passphrase, + onboarding = null, + onclick = onClick, + enabled = !disabled ) } @Composable private fun SkipButton(disabled: Boolean, onClick: () -> Unit) { - SimpleButtonIconEnded(stringResource(MR.strings.use_random_passphrase), painterResource(MR.images.ic_chevron_right), color = - if (disabled) MaterialTheme.colors.secondary else WarningOrange, disabled = disabled, click = onClick) - Text( - stringResource(MR.strings.you_can_change_it_later), - Modifier - .fillMaxWidth() - .padding(horizontal = DEFAULT_PADDING * 3) - .padding(top = DEFAULT_PADDING, bottom = DEFAULT_PADDING - 5.dp), - style = MaterialTheme.typography.subtitle1, - color = MaterialTheme.colors.secondary, - textAlign = TextAlign.Center, - ) + TextButtonBelowOnboardingButton(stringResource(MR.strings.use_random_passphrase), onClick = if (disabled) null else onClick) } @Composable @@ -238,3 +225,12 @@ private suspend fun startChat(key: String?) { m.chatDbChanged.value = false m.chatRunning.value = true } + +private fun randomPassphraseAlert(onConfirm: () -> Unit) { + AlertManager.shared.showAlertDialog( + title = generalGetString(MR.strings.use_random_passphrase), + text = generalGetString(MR.strings.you_can_change_it_later), + confirmText = generalGetString(MR.strings.ok), + onConfirm = onConfirm, + ) +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt index 6b1dcec5d8..835e01ec27 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt @@ -734,7 +734,7 @@ fun UsageConditionsView( } ColumnWithScrollBar(modifier = Modifier.fillMaxSize().padding(horizontal = DEFAULT_PADDING)) { - AppBarTitle(stringResource(MR.strings.operator_conditions_of_use), enableAlphaChanges = false, withPadding = false) + AppBarTitle(stringResource(MR.strings.operator_conditions_of_use), enableAlphaChanges = false, withPadding = false, bottomPadding = DEFAULT_PADDING) when (val conditionsAction = chatModel.conditions.value.conditionsAction) { is UsageConditionsAction.Review -> { if (conditionsAction.operators.isNotEmpty()) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt index 4e0fc6ec79..3836d5b6df 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.* import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.platform.UriHandler @@ -615,7 +616,6 @@ fun ConditionsTextView( val failedToLoad = remember { mutableStateOf(false) } val defaultConditionsLink = "https://github.com/simplex-chat/simplex-chat/blob/stable/PRIVACY.md" val scope = rememberCoroutineScope() - // can show conditions when animation between modals finishes to prevent glitches val canShowConditionsAt = remember { System.currentTimeMillis() + 300 } LaunchedEffect(Unit) { @@ -645,18 +645,18 @@ fun ConditionsTextView( if (conditionsText != null) { val scrollState = rememberScrollState() - Box( - modifier = Modifier - .fillMaxSize() - .border(border = BorderStroke(1.dp, CurrentColors.value.colors.secondary.copy(alpha = 0.6f)), shape = RoundedCornerShape(12.dp)) - .verticalScroll(scrollState) - .padding(8.dp) - ) { - val parentUriHandler = LocalUriHandler.current - CompositionLocalProvider(LocalUriHandler provides remember { internalUriHandler(parentUriHandler) }) { - ConditionsMarkdown(conditionsText) - } + ConditionsBox( + Modifier + .fillMaxSize() + .border(border = BorderStroke(1.dp, CurrentColors.value.colors.secondary.copy(alpha = 0.6f)), shape = RoundedCornerShape(12.dp)) + .clip(shape = RoundedCornerShape(12.dp)), + scrollState + ) { + val parentUriHandler = LocalUriHandler.current + CompositionLocalProvider(LocalUriHandler provides remember { internalUriHandler(parentUriHandler) }) { + ConditionsMarkdown(conditionsText) } + } } else { val conditionsLink = "https://github.com/simplex-chat/simplex-chat/blob/${usageConditions.conditionsCommit}/PRIVACY.md" ConditionsLinkView(conditionsLink) @@ -668,6 +668,9 @@ fun ConditionsTextView( } } +@Composable +expect fun ConditionsBox(modifier: Modifier, scrollState: ScrollState, content: @Composable() (BoxScope.() -> Unit)) + @Composable private fun ConditionsMarkdown(text: String) { Markdown(text, diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.desktop.kt new file mode 100644 index 0000000000..c9f62a5b79 --- /dev/null +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/OperatorView.desktop.kt @@ -0,0 +1,51 @@ +package chat.simplex.common.views.usersettings.networkAndServers + +import androidx.compose.animation.core.Animatable +import androidx.compose.foundation.* +import androidx.compose.foundation.layout.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.unit.dp +import chat.simplex.common.platform.DesktopScrollBar +import chat.simplex.common.views.helpers.detectCursorMove +import kotlinx.coroutines.* + +@Composable +actual fun ConditionsBox(modifier: Modifier, scrollState: ScrollState, content: @Composable() (BoxScope.() -> Unit)) { + val scope = rememberCoroutineScope() + val scrollBarAlpha = remember { Animatable(0f) } + val scrollJob: MutableState = remember { mutableStateOf(Job()) } + val scrollBarDraggingState = remember { mutableStateOf(false) } + val scrollModifier = remember { + Modifier + .pointerInput(Unit) { + detectCursorMove { + scope.launch { + scrollBarAlpha.animateTo(1f) + } + scrollJob.value.cancel() + scrollJob.value = scope.launch { + delay(1000L) + scrollBarAlpha.animateTo(0f) + } + } + } + } + + Box(modifier = modifier) { + Box( + Modifier + .fillMaxSize() + .verticalScroll(scrollState) + .padding(8.dp) + .then(scrollModifier) + ) { + content() + } + Box(Modifier.fillMaxSize(), contentAlignment = Alignment.CenterEnd) { + DesktopScrollBar(rememberScrollbarAdapter(scrollState), Modifier.fillMaxHeight(), scrollBarAlpha, scrollJob, false, scrollBarDraggingState) + } + } +} From e61babdc8f4646a00bf66b43903c9845fce944c2 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Tue, 3 Dec 2024 06:36:48 +0700 Subject: [PATCH 11/22] android, desktop: preserving long message when failed to send (#5297) * android, desktop: preserving long message when failed to send * forwarding * unused code * strings --------- Co-authored-by: Evgeny Poberezkin --- .../chat/simplex/common/model/SimpleXAPI.kt | 41 +++++++++++++++++-- .../simplex/common/views/chat/ComposeView.kt | 38 +++++++++++++---- .../commonMain/resources/MR/base/strings.xml | 4 ++ 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 7ada27d000..89c6f40cfe 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -894,8 +894,27 @@ object ChatController { private suspend fun processSendMessageCmd(rh: Long?, cmd: CC): List? { val r = sendCmd(rh, cmd) - return when (r) { - is CR.NewChatItems -> r.chatItems + return when { + r is CR.NewChatItems -> r.chatItems + r is CR.ChatCmdError && r.chatError is ChatError.ChatErrorStore && r.chatError.storeError is StoreError.LargeMsg && cmd is CC.ApiSendMessages -> { + val mc = cmd.composedMessages.last().msgContent + AlertManager.shared.showAlertMsg( + generalGetString(MR.strings.maximum_message_size_title), + if (mc is MsgContent.MCImage || mc is MsgContent.MCVideo || mc is MsgContent.MCLink) { + generalGetString(MR.strings.maximum_message_size_reached_non_text) + } else { + generalGetString(MR.strings.maximum_message_size_reached_text) + } + ) + null + } + r is CR.ChatCmdError && r.chatError is ChatError.ChatErrorStore && r.chatError.storeError is StoreError.LargeMsg && cmd is CC.ApiForwardChatItems -> { + AlertManager.shared.showAlertMsg( + generalGetString(MR.strings.maximum_message_size_title), + generalGetString(MR.strings.maximum_message_size_reached_forwarding) + ) + null + } else -> { if (!(networkErrorAlert(r))) { apiErrorAlert("processSendMessageCmd", generalGetString(MR.strings.error_sending_message), r) @@ -943,7 +962,21 @@ object ChatController { suspend fun apiUpdateChatItem(rh: Long?, type: ChatType, id: Long, itemId: Long, mc: MsgContent, live: Boolean = false): AChatItem? { val r = sendCmd(rh, CC.ApiUpdateChatItem(type, id, itemId, mc, live)) - if (r is CR.ChatItemUpdated) return r.chatItem + when { + r is CR.ChatItemUpdated -> return r.chatItem + r is CR.ChatCmdError && r.chatError is ChatError.ChatErrorStore && r.chatError.storeError is StoreError.LargeMsg -> { + AlertManager.shared.showAlertMsg( + generalGetString(MR.strings.maximum_message_size_title), + if (mc is MsgContent.MCImage || mc is MsgContent.MCVideo || mc is MsgContent.MCLink) { + generalGetString(MR.strings.maximum_message_size_reached_non_text) + } else { + generalGetString(MR.strings.maximum_message_size_reached_text) + } + ) + return null + } + } + Log.e(TAG, "apiUpdateChatItem bad response: ${r.responseType} ${r.details}") return null } @@ -6357,6 +6390,7 @@ sealed class StoreError { is HostMemberIdNotFound -> "hostMemberIdNotFound" is ContactNotFoundByFileId -> "contactNotFoundByFileId" is NoGroupSndStatus -> "noGroupSndStatus" + is LargeMsg -> "largeMsg" } @Serializable @SerialName("duplicateName") object DuplicateName: StoreError() @@ -6416,6 +6450,7 @@ sealed class StoreError { @Serializable @SerialName("hostMemberIdNotFound") class HostMemberIdNotFound(val groupId: Long): StoreError() @Serializable @SerialName("contactNotFoundByFileId") class ContactNotFoundByFileId(val fileId: Long): StoreError() @Serializable @SerialName("noGroupSndStatus") class NoGroupSndStatus(val itemId: Long, val groupMemberId: Long): StoreError() + @Serializable @SerialName("largeMsg") object LargeMsg: StoreError() } @Serializable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt index 6cd46d49a6..3a63cf508e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt @@ -412,6 +412,7 @@ fun ComposeView( val cInfo = chat.chatInfo val cs = composeState.value var sent: List? + var lastMessageFailedToSend: ComposeState? = null val msgText = text ?: cs.message fun sending() { @@ -461,6 +462,19 @@ fun ComposeView( } } + fun constructFailedMessage(cs: ComposeState): ComposeState { + val preview = when (cs.preview) { + is ComposePreview.MediaPreview -> { + ComposePreview.MediaPreview( + if (cs.preview.images.isNotEmpty()) listOf(cs.preview.images.last()) else emptyList(), + if (cs.preview.content.isNotEmpty()) listOf(cs.preview.content.last()) else emptyList() + ) + } + else -> cs.preview + } + return cs.copy(inProgress = false, preview = preview) + } + fun updateMsgContent(msgContent: MsgContent): MsgContent { return when (msgContent) { is MsgContent.MCText -> checkLinkPreview() @@ -517,6 +531,9 @@ fun ComposeView( sent = null } else if (cs.contextItem is ComposeContextItem.ForwardingItems) { sent = forwardItem(chat.remoteHostId, cs.contextItem.chatItems, cs.contextItem.fromChatInfo, ttl = ttl) + if (sent == null) { + lastMessageFailedToSend = constructFailedMessage(cs) + } if (cs.message.isNotEmpty()) { sent?.mapIndexed { index, message -> if (index == sent!!.lastIndex) { @@ -531,6 +548,7 @@ fun ComposeView( val ei = cs.contextItem.chatItem val updatedMessage = updateMessage(ei, chat, live) sent = if (updatedMessage != null) listOf(updatedMessage) else null + lastMessageFailedToSend = if (updatedMessage == null) constructFailedMessage(cs) else null } else if (liveMessage != null && liveMessage.sent) { val updatedMessage = updateMessage(liveMessage.chatItem, chat, live) sent = if (updatedMessage != null) listOf(updatedMessage) else null @@ -631,19 +649,21 @@ fun ComposeView( ttl = ttl ) sent = if (sendResult != null) listOf(sendResult) else null - } - if (sent == null && - (cs.preview is ComposePreview.MediaPreview || - cs.preview is ComposePreview.FilePreview || - cs.preview is ComposePreview.VoicePreview) - ) { - val sendResult = send(chat, MsgContent.MCText(msgText), quotedItemId, null, live, ttl) - sent = if (sendResult != null) listOf(sendResult) else null + if (sent == null && index == msgs.lastIndex && cs.liveMessage == null) { + constructFailedMessage(cs) + // it's the last message in the series so if it fails, restore it in ComposeView for editing + lastMessageFailedToSend = constructFailedMessage(cs) + } } } val wasForwarding = cs.forwarding val forwardingFromChatId = (cs.contextItem as? ComposeContextItem.ForwardingItems)?.fromChatInfo?.id - clearState(live) + val lastFailed = lastMessageFailedToSend + if (lastFailed == null) { + clearState(live) + } else { + composeState.value = lastFailed + } val draft = chatModel.draft.value if (wasForwarding && chatModel.draftChatId.value == chat.chatInfo.id && forwardingFromChatId != chat.chatInfo.id && draft != null) { composeState.value = draft diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index c390096ee2..d931abab70 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -441,6 +441,10 @@ Files and media not allowed Voice messages not allowed Message + Message is too large! + Please reduce the message size and send again. + Please reduce the message size or remove media and send again. + You can copy and reduce the message size to send it. Image From 9d992735f41bcfd5d5fd8c3203e4571ac19aba5a Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 3 Dec 2024 12:11:38 +0000 Subject: [PATCH 12/22] core, ios: improve business address (connection plan, repeat requests, feature items) (#5303) * core, ios: connection plan for business address * core: store xcontact_id on business groups to prevent duplicate contact requests * core: create feature items in new groups and in business groups * fix tests * error message --- .../Shared/Views/NewChat/NewChatView.swift | 15 +++++- apps/ios/SimpleXChat/APITypes.swift | 3 -- .../chat/simplex/common/model/SimpleXAPI.kt | 3 -- src/Simplex/Chat.hs | 45 ++++++++++------- src/Simplex/Chat/Controller.hs | 1 + .../Migrations/M20241128_business_chats.hs | 6 +++ src/Simplex/Chat/Migrations/chat_schema.sql | 4 +- src/Simplex/Chat/Store/Direct.hs | 20 ++++++-- src/Simplex/Chat/Store/Groups.hs | 48 ++----------------- src/Simplex/Chat/Store/Shared.hs | 43 +++++++++++++++++ src/Simplex/Chat/Types.hs | 2 +- src/Simplex/Chat/View.hs | 8 +++- tests/ChatTests/ChatList.hs | 18 +++---- tests/ChatTests/Direct.hs | 4 +- tests/ChatTests/Groups.hs | 43 +++++++++-------- tests/ChatTests/Profiles.hs | 34 ++++++++----- tests/ChatTests/Utils.hs | 30 +++++++----- 17 files changed, 195 insertions(+), 132 deletions(-) diff --git a/apps/ios/Shared/Views/NewChat/NewChatView.swift b/apps/ios/Shared/Views/NewChat/NewChatView.swift index 19e810d034..e18d932278 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatView.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatView.swift @@ -916,11 +916,17 @@ func planAndConnectAlert(_ alert: PlanAndConnectAlert, dismiss: Bool, cleanup: ( ) case let .groupLinkConnecting(_, groupInfo): if let groupInfo = groupInfo { - return Alert( + return groupInfo.businessChat == nil + ? Alert( title: Text("Group already exists!"), message: Text("You are already joining the group \(groupInfo.displayName)."), dismissButton: .default(Text("OK")) { cleanup?() } ) + : Alert( + title: Text("Chat already exists!"), + message: Text("You are already connecting to \(groupInfo.displayName)."), + dismissButton: .default(Text("OK")) { cleanup?() } + ) } else { return Alert( title: Text("Already joining the group!"), @@ -1237,10 +1243,15 @@ func contactAlreadyConnectingAlert(_ contact: Contact) -> Alert { } func groupAlreadyExistsAlert(_ groupInfo: GroupInfo) -> Alert { - mkAlert( + groupInfo.businessChat == nil + ? mkAlert( title: "Group already exists", message: "You are already in group \(groupInfo.displayName)." ) + : mkAlert( + title: "Chat already exists", + message: "You are already connected with \(groupInfo.displayName)." + ) } enum ConnReqType: Equatable { diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 07095ed5e1..ca9bb70ea4 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -598,7 +598,6 @@ public enum ChatResponse: Decodable, Error { case sentInvitation(user: UserRef, connection: PendingContactConnection) case sentInvitationToContact(user: UserRef, contact: Contact, customUserProfile: Profile?) case contactAlreadyExists(user: UserRef, contact: Contact) - case contactRequestAlreadyAccepted(user: UserRef, contact: Contact) case contactDeleted(user: UserRef, contact: Contact) case contactDeletedByContact(user: UserRef, contact: Contact) case chatCleared(user: UserRef, chatInfo: ChatInfo) @@ -776,7 +775,6 @@ public enum ChatResponse: Decodable, Error { case .sentInvitation: return "sentInvitation" case .sentInvitationToContact: return "sentInvitationToContact" case .contactAlreadyExists: return "contactAlreadyExists" - case .contactRequestAlreadyAccepted: return "contactRequestAlreadyAccepted" case .contactDeleted: return "contactDeleted" case .contactDeletedByContact: return "contactDeletedByContact" case .chatCleared: return "chatCleared" @@ -952,7 +950,6 @@ public enum ChatResponse: Decodable, Error { case let .sentInvitation(u, connection): return withUser(u, String(describing: connection)) case let .sentInvitationToContact(u, contact, _): return withUser(u, String(describing: contact)) case let .contactAlreadyExists(u, contact): return withUser(u, String(describing: contact)) - case let .contactRequestAlreadyAccepted(u, contact): return withUser(u, String(describing: contact)) case let .contactDeleted(u, contact): return withUser(u, String(describing: contact)) case let .contactDeletedByContact(u, contact): return withUser(u, String(describing: contact)) case let .chatCleared(u, chatInfo): return withUser(u, String(describing: chatInfo)) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 89c6f40cfe..d9c7df9d81 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -5439,7 +5439,6 @@ sealed class CR { @Serializable @SerialName("sentInvitation") class SentInvitation(val user: UserRef, val connection: PendingContactConnection): CR() @Serializable @SerialName("sentInvitationToContact") class SentInvitationToContact(val user: UserRef, val contact: Contact, val customUserProfile: Profile?): CR() @Serializable @SerialName("contactAlreadyExists") class ContactAlreadyExists(val user: UserRef, val contact: Contact): CR() - @Serializable @SerialName("contactRequestAlreadyAccepted") class ContactRequestAlreadyAccepted(val user: UserRef, val contact: Contact): CR() @Serializable @SerialName("contactDeleted") class ContactDeleted(val user: UserRef, val contact: Contact): CR() @Serializable @SerialName("contactDeletedByContact") class ContactDeletedByContact(val user: UserRef, val contact: Contact): CR() @Serializable @SerialName("chatCleared") class ChatCleared(val user: UserRef, val chatInfo: ChatInfo): CR() @@ -5623,7 +5622,6 @@ sealed class CR { is SentInvitation -> "sentInvitation" is SentInvitationToContact -> "sentInvitationToContact" is ContactAlreadyExists -> "contactAlreadyExists" - is ContactRequestAlreadyAccepted -> "contactRequestAlreadyAccepted" is ContactDeleted -> "contactDeleted" is ContactDeletedByContact -> "contactDeletedByContact" is ChatCleared -> "chatCleared" @@ -5797,7 +5795,6 @@ sealed class CR { is SentInvitation -> withUser(user, json.encodeToString(connection)) is SentInvitationToContact -> withUser(user, json.encodeToString(contact)) is ContactAlreadyExists -> withUser(user, json.encodeToString(contact)) - is ContactRequestAlreadyAccepted -> withUser(user, json.encodeToString(contact)) is ContactDeleted -> withUser(user, json.encodeToString(contact)) is ContactDeletedByContact -> withUser(user, json.encodeToString(contact)) is ChatCleared -> withUser(user, json.encodeToString(chatInfo)) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 7a48914abf..31862253dd 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -2208,9 +2208,11 @@ processChatCommand' vr = \case gVar <- asks random -- [incognito] generate incognito profile for group membership incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing - groupInfo <- withFastStore $ \db -> createNewGroup db vr gVar user gProfile incognitoProfile - createInternalChatItem user (CDGroupSnd groupInfo) (CISndGroupE2EEInfo $ E2EInfo {pqEnabled = PQEncOff}) Nothing - pure $ CRGroupCreated user groupInfo + gInfo <- withFastStore $ \db -> createNewGroup db vr gVar user gProfile incognitoProfile + let cd = CDGroupSnd gInfo + createInternalChatItem user cd (CISndGroupE2EEInfo E2EInfo {pqEnabled = PQEncOff}) Nothing + createGroupFeatureItems user cd CISndGroupFeature gInfo + pure $ CRGroupCreated user gInfo NewGroup incognito gProfile -> withUser $ \User {userId} -> processChatCommand $ APINewGroup userId incognito gProfile APIAddMember groupId contactId memRole -> withUser $ \user -> withGroupLock "addMember" groupId $ do @@ -3137,7 +3139,8 @@ processChatCommand' vr = \case | not (contactReady ct) && contactActive ct -> pure $ CPContactAddress (CAPConnectingProhibit ct) | contactDeleted ct -> pure $ CPContactAddress CAPOk | otherwise -> pure $ CPContactAddress (CAPKnown ct) - Just _ -> throwChatError $ CECommandError "found connection entity is not RcvDirectMsgConnection" + Just (RcvGroupMsgConnection _ gInfo _) -> groupPlan gInfo + Just _ -> throwChatError $ CECommandError "found connection entity is not RcvDirectMsgConnection or RcvGroupMsgConnection" -- group link Just _ -> withFastStore' (\db -> getGroupInfoByUserContactLinkConnReq db vr user cReqSchemas) >>= \case @@ -3152,12 +3155,13 @@ processChatCommand' vr = \case | not (contactReady ct) && contactActive ct -> pure $ CPGroupLink (GLPConnectingProhibit gInfo_) | otherwise -> pure $ CPGroupLink GLPOk (Nothing, Just _) -> throwChatError $ CECommandError "found connection entity is not RcvDirectMsgConnection" - (Just gInfo@GroupInfo {membership}, _) - | not (memberActive membership) && not (memberRemoved membership) -> - pure $ CPGroupLink (GLPConnectingProhibit gInfo_) - | memberActive membership -> pure $ CPGroupLink (GLPKnown gInfo) - | otherwise -> pure $ CPGroupLink GLPOk + (Just gInfo, _) -> groupPlan gInfo where + groupPlan gInfo@GroupInfo {membership} + | not (memberActive membership) && not (memberRemoved membership) = + pure $ CPGroupLink (GLPConnectingProhibit $ Just gInfo) + | memberActive membership = pure $ CPGroupLink (GLPKnown gInfo) + | otherwise = pure $ CPGroupLink GLPOk cReqSchemas :: (ConnReqContact, ConnReqContact) cReqSchemas = ( CRContactUri crData {crScheme = SSSimplex}, @@ -4035,6 +4039,9 @@ acceptBusinessJoinRequestAsync let chatV = vr `peerConnChatVersion` cReqChatVRange connIds <- agentAcceptContactAsync user True invId msg subMode PQSupportOff chatV withStore' $ \db -> createAcceptedMemberConnection db user connIds chatV ucr groupMemberId subMode + let cd = CDGroupSnd gInfo + createInternalChatItem user cd (CISndGroupE2EEInfo E2EInfo {pqEnabled = PQEncOff}) Nothing + createGroupFeatureItems user cd CISndGroupFeature gInfo pure gInfo where businessGroupProfile :: Profile -> GroupPreferences -> GroupProfile @@ -5086,8 +5093,9 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = case memberCategory m of GCHostMember -> do toView $ CRUserJoinedGroup user gInfo {membership = membership {memberStatus = GSMemConnected}} m {memberStatus = GSMemConnected} - createInternalChatItem user (CDGroupRcv gInfo m) (CIRcvGroupE2EEInfo $ E2EInfo {pqEnabled = PQEncOff}) Nothing - createGroupFeatureItems gInfo m + let cd = CDGroupRcv gInfo m + createInternalChatItem user cd (CIRcvGroupE2EEInfo E2EInfo {pqEnabled = PQEncOff}) Nothing + createGroupFeatureItems user cd CIRcvGroupFeature gInfo let GroupInfo {groupProfile = GroupProfile {description}} = gInfo memberConnectedChatItem gInfo m unless expectHistory $ forM_ description $ groupDescriptionChatItem gInfo m @@ -5597,6 +5605,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = profileContactRequest invId chatVRange p xContactId_ reqPQSup = do withStore (\db -> createOrUpdateContactRequest db vr user userContactLinkId invId chatVRange p xContactId_ reqPQSup) >>= \case CORContact contact -> toView $ CRContactRequestAlreadyAccepted user contact + CORGroup gInfo -> toView $ CRBusinessRequestAlreadyAccepted user gInfo CORRequest cReq -> do ucl <- withStore $ \db -> getUserContactLinkById db userId userContactLinkId let (UserContactLink {connReqContact, autoAccept}, groupId_, gLinkMemRole) = ucl @@ -6487,13 +6496,6 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = let state = featureState $ getContactUserPreference f mergedPreferences createInternalChatItem user (CDDirectRcv ct) (uncurry (CIRcvChatFeature $ chatFeature f) state) Nothing - createGroupFeatureItems :: GroupInfo -> GroupMember -> CM () - createGroupFeatureItems g@GroupInfo {fullGroupPreferences} m = - forM_ allGroupFeatures $ \(AGF f) -> do - let p = getGroupPreference f fullGroupPreferences - (_, param, role) = groupFeatureState p - createInternalChatItem user (CDGroupRcv g m) (CIRcvGroupFeature (toGroupFeature f) (toGroupPreference p) param role) Nothing - xInfoProbe :: ContactOrMember -> Probe -> CM () xInfoProbe cgm2 probe = do contactMerge <- readTVarIO =<< asks contactMergeEnabled @@ -8179,6 +8181,13 @@ createGroupFeatureChangedItems user cd ciContent GroupInfo {fullGroupPreferences sameGroupProfileInfo :: GroupProfile -> GroupProfile -> Bool sameGroupProfileInfo p p' = p {groupPreferences = Nothing} == p' {groupPreferences = Nothing} +createGroupFeatureItems :: MsgDirectionI d => User -> ChatDirection 'CTGroup d -> (GroupFeature -> GroupPreference -> Maybe Int -> Maybe GroupMemberRole -> CIContent d) -> GroupInfo -> CM () +createGroupFeatureItems user cd ciContent GroupInfo {fullGroupPreferences} = + forM_ allGroupFeatures $ \(AGF f) -> do + let p = getGroupPreference f fullGroupPreferences + (_, param, role) = groupFeatureState p + createInternalChatItem user cd (ciContent (toGroupFeature f) (toGroupPreference p) param role) Nothing + createInternalChatItem :: (ChatTypeI c, MsgDirectionI d) => User -> ChatDirection c d -> CIContent d -> Maybe UTCTime -> CM () createInternalChatItem user cd content itemTs_ = lift (createInternalItemsForChats user itemTs_ [(cd, [content])]) >>= \case diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 0ab3ba5652..593c328d0c 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -669,6 +669,7 @@ data ChatResponse | CRAcceptingBusinessRequest {user :: User, groupInfo :: GroupInfo} | CRContactAlreadyExists {user :: User, contact :: Contact} | CRContactRequestAlreadyAccepted {user :: User, contact :: Contact} + | CRBusinessRequestAlreadyAccepted {user :: User, groupInfo :: GroupInfo} | CRLeftMemberUser {user :: User, groupInfo :: GroupInfo} | CRGroupDeletedUser {user :: User, groupInfo :: GroupInfo} | CRForwardPlan {user :: User, itemsCount :: Int, chatItemIds :: [ChatItemId], forwardConfirmation :: Maybe ForwardConfirmation} diff --git a/src/Simplex/Chat/Migrations/M20241128_business_chats.hs b/src/Simplex/Chat/Migrations/M20241128_business_chats.hs index f068b1bd81..2b3be38030 100644 --- a/src/Simplex/Chat/Migrations/M20241128_business_chats.hs +++ b/src/Simplex/Chat/Migrations/M20241128_business_chats.hs @@ -11,12 +11,18 @@ m20241128_business_chats = ALTER TABLE user_contact_links ADD business_address INTEGER DEFAULT 0; ALTER TABLE groups ADD COLUMN business_member_id BLOB NULL; ALTER TABLE groups ADD COLUMN business_chat TEXT NULL; +ALTER TABLE groups ADD COLUMN business_xcontact_id BLOB NULL; + +CREATE INDEX idx_groups_business_xcontact_id ON groups(business_xcontact_id); |] down_m20241128_business_chats :: Query down_m20241128_business_chats = [sql| +DROP INDEX idx_groups_business_xcontact_id; + ALTER TABLE user_contact_links DROP COLUMN business_address; ALTER TABLE groups DROP COLUMN business_member_id; ALTER TABLE groups DROP COLUMN business_chat; +ALTER TABLE groups DROP COLUMN business_xcontact_id; |] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 460b348b4d..621c28f91e 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -129,7 +129,8 @@ CREATE TABLE groups( custom_data BLOB, ui_themes TEXT, business_member_id BLOB NULL, - business_chat TEXT NULL, -- received + business_chat TEXT NULL, + business_xcontact_id BLOB NULL, -- received FOREIGN KEY(user_id, local_display_name) REFERENCES display_names(user_id, local_display_name) ON DELETE CASCADE @@ -926,3 +927,4 @@ CREATE INDEX idx_chat_items_notes ON chat_items( item_status, created_at ); +CREATE INDEX idx_groups_business_xcontact_id ON groups(business_xcontact_id); diff --git a/src/Simplex/Chat/Store/Direct.hs b/src/Simplex/Chat/Store/Direct.hs index 4d33fa113d..b7759f0905 100644 --- a/src/Simplex/Chat/Store/Direct.hs +++ b/src/Simplex/Chat/Store/Direct.hs @@ -102,6 +102,7 @@ import Simplex.Messaging.Agent.Store.SQLite (firstRow, maybeFirstRow) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import Simplex.Messaging.Crypto.Ratchet (PQSupport) import Simplex.Messaging.Protocol (SubscriptionMode (..)) +import Simplex.Messaging.Util ((<$$>)) import Simplex.Messaging.Version getPendingContactConnection :: DB.Connection -> UserId -> Int64 -> ExceptT StoreError IO PendingContactConnection @@ -591,13 +592,17 @@ getUserContacts db vr user@User {userId} = do contacts <- rights <$> mapM (runExceptT . getContact db vr user) contactIds pure $ filter (\Contact {activeConn} -> isJust activeConn) contacts -createOrUpdateContactRequest :: DB.Connection -> VersionRangeChat -> User -> Int64 -> InvitationId -> VersionRangeChat -> Profile -> Maybe XContactId -> PQSupport -> ExceptT StoreError IO ContactOrRequest -createOrUpdateContactRequest db vr user@User {userId} userContactLinkId invId (VersionRange minV maxV) Profile {displayName, fullName, image, contactLink, preferences} xContactId_ pqSup = - liftIO (maybeM getContact' xContactId_) >>= \case - Just contact -> pure $ CORContact contact +createOrUpdateContactRequest :: DB.Connection -> VersionRangeChat -> User -> Int64 -> InvitationId -> VersionRangeChat -> Profile -> Maybe XContactId -> PQSupport -> ExceptT StoreError IO ChatOrRequest +createOrUpdateContactRequest db vr user@User {userId, userContactId} userContactLinkId invId (VersionRange minV maxV) Profile {displayName, fullName, image, contactLink, preferences} xContactId_ pqSup = + liftIO (maybeM getContactOrGroup xContactId_) >>= \case + Just cr -> pure cr Nothing -> CORRequest <$> createOrUpdate_ where maybeM = maybe (pure Nothing) + getContactOrGroup xContactId = + getContact' xContactId >>= \case + Just ct -> pure $ Just $ CORContact ct + Nothing -> CORGroup <$$> getGroupInfo' xContactId createOrUpdate_ :: ExceptT StoreError IO UserContactRequest createOrUpdate_ = do cReqId <- @@ -651,6 +656,13 @@ createOrUpdateContactRequest db vr user@User {userId} userContactLinkId invId (V LIMIT 1 |] (userId, xContactId) + getGroupInfo' :: XContactId -> IO (Maybe GroupInfo) + getGroupInfo' xContactId = + maybeFirstRow (toGroupInfo vr userContactId) $ + DB.query + db + (groupInfoQuery <> " WHERE g.business_xcontact_id = ? AND g.user_id = ? AND mu.contact_id = ?") + (xContactId, userId, userContactId) getContactRequestByXContactId :: XContactId -> IO (Maybe UserContactRequest) getContactRequestByXContactId xContactId = maybeFirstRow toContactRequest $ diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index bb5252ddb0..2c938ecc44 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -155,31 +155,8 @@ import Simplex.Messaging.Util (eitherToMaybe, ($>>=), (<$$>)) import Simplex.Messaging.Version import UnliftIO.STM -type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime, Maybe MemberId, Maybe BusinessChatType, Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow - -type GroupMemberRow = ((Int64, Int64, MemberId, VersionChat, VersionChat, GroupMemberRole, GroupMemberCategory, GroupMemberStatus, Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, ContactName, Maybe ContactId, ProfileId, ProfileId, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Preferences)) - type MaybeGroupMemberRow = ((Maybe Int64, Maybe Int64, Maybe MemberId, Maybe VersionChat, Maybe VersionChat, Maybe GroupMemberRole, Maybe GroupMemberCategory, Maybe GroupMemberStatus, Maybe Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, Maybe ContactName, Maybe ContactId, Maybe ProfileId, Maybe ProfileId, Maybe ContactName, Maybe Text, Maybe ImageData, Maybe ConnReqContact, Maybe LocalAlias, Maybe Preferences)) -toGroupInfo :: VersionRangeChat -> Int64 -> GroupInfoRow -> GroupInfo -toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, description, image, hostConnCustomUserProfileId, enableNtfs_, sendRcpts, favorite, groupPreferences) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt, businessMemberId, businessChatType, uiThemes, customData) :. userMemberRow) = - let membership = (toGroupMember userContactId userMemberRow) {memberChatVRange = vr} - chatSettings = ChatSettings {enableNtfs = fromMaybe MFAll enableNtfs_, sendRcpts, favorite} - fullGroupPreferences = mergeGroupPreferences groupPreferences - groupProfile = GroupProfile {displayName, fullName, description, image, groupPreferences} - businessChat = BusinessChatInfo <$> businessMemberId <*> businessChatType - in GroupInfo {groupId, localDisplayName, groupProfile, businessChat, fullGroupPreferences, membership, hostConnCustomUserProfileId, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt, uiThemes, customData} - -toGroupMember :: Int64 -> GroupMemberRow -> GroupMember -toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages, memberRestriction_) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, preferences)) = - let memberProfile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias} - memberSettings = GroupMemberSettings {showMessages} - blockedByAdmin = maybe False mrsBlocked memberRestriction_ - invitedBy = toInvitedBy userContactId invitedById - activeConn = Nothing - memberChatVRange = fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer - in GroupMember {..} - toMaybeGroupMember :: Int64 -> MaybeGroupMemberRow -> Maybe GroupMember toMaybeGroupMember userContactId ((Just groupMemberId, Just groupId, Just memberId, Just minVer, Just maxVer, Just memberRole, Just memberCategory, Just memberStatus, Just showMessages, memberBlocked) :. (invitedById, invitedByGroupMemberId, Just localDisplayName, memberContactId, Just memberContactProfileId, Just profileId, Just displayName, Just fullName, image, contactLink, Just localAlias, contactPreferences)) = Just $ toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages, memberBlocked) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, contactPreferences)) @@ -937,7 +914,7 @@ createBusinessRequestGroup vr gVar user@User {userId, userContactId} - UserContactRequest {cReqChatVRange, profile = Profile {displayName, fullName, image, contactLink, preferences}} + UserContactRequest {cReqChatVRange, xContactId, profile = Profile {displayName, fullName, image, contactLink, preferences}} groupPreferences = do currentTs <- liftIO getCurrentTime groupInfo <- insertGroup_ currentTs @@ -959,10 +936,10 @@ createBusinessRequestGroup [sql| INSERT INTO groups (group_profile_id, local_display_name, user_id, enable_ntfs, - created_at, updated_at, chat_ts, user_member_profile_sent_at, business_chat) - VALUES (?,?,?,?,?,?,?,?,?) + created_at, updated_at, chat_ts, user_member_profile_sent_at, business_chat, business_xcontact_id) + VALUES (?,?,?,?,?,?,?,?,?,?) |] - (profileId, localDisplayName, userId, True, currentTs, currentTs, currentTs, currentTs, BCCustomer) + (profileId, localDisplayName, userId, True, currentTs, currentTs, currentTs, currentTs, BCCustomer, xContactId) insertedRowId db memberId <- liftIO $ encodedRandomBytes gVar 12 void $ createContactMemberInv_ db user groupId Nothing user (MemberIdRole (MemberId memberId) GROwner) GCUserMember GSMemCreator IBUser Nothing currentTs vr @@ -1484,22 +1461,7 @@ getGroupInfo db vr User {userId, userContactId} groupId = ExceptT . firstRow (toGroupInfo vr userContactId) (SEGroupNotFound groupId) $ DB.query db - [sql| - SELECT - -- GroupInfo - g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, - g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, - g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, - -- GroupMember - membership - mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, - mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, - pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences - FROM groups g - JOIN group_profiles gp ON gp.group_profile_id = g.group_profile_id - JOIN group_members mu ON mu.group_id = g.group_id - JOIN contact_profiles pu ON pu.contact_profile_id = COALESCE(mu.member_profile_id, mu.contact_profile_id) - WHERE g.group_id = ? AND g.user_id = ? AND mu.contact_id = ? - |] + (groupInfoQuery <> " WHERE g.group_id = ? AND g.user_id = ? AND mu.contact_id = ?") (groupId, userId, userContactId) getGroupInfoByUserContactLinkConnReq :: DB.Connection -> VersionRangeChat -> User -> (ConnReqContact, ConnReqContact) -> IO (Maybe GroupInfo) diff --git a/src/Simplex/Chat/Store/Shared.hs b/src/Simplex/Chat/Store/Shared.hs index fcd9896917..b00ba5705f 100644 --- a/src/Simplex/Chat/Store/Shared.hs +++ b/src/Simplex/Chat/Store/Shared.hs @@ -5,6 +5,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeOperators #-} @@ -33,6 +34,7 @@ import Simplex.Chat.Protocol import Simplex.Chat.Remote.Types import Simplex.Chat.Types import Simplex.Chat.Types.Preferences +import Simplex.Chat.Types.Shared import Simplex.Chat.Types.UITheme import Simplex.Messaging.Agent.Protocol (ConnId, UserId) import Simplex.Messaging.Agent.Store.SQLite (firstRow, maybeFirstRow) @@ -543,3 +545,44 @@ safeDeleteLDN db User {userId} localDisplayName = do AND local_display_name NOT IN (SELECT local_display_name FROM users WHERE user_id = ?) |] (userId, localDisplayName, userId) + +type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime, Maybe MemberId, Maybe BusinessChatType, Maybe UIThemeEntityOverrides, Maybe CustomData) :. GroupMemberRow + +type GroupMemberRow = ((Int64, Int64, MemberId, VersionChat, VersionChat, GroupMemberRole, GroupMemberCategory, GroupMemberStatus, Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, ContactName, Maybe ContactId, ProfileId, ProfileId, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Preferences)) + +toGroupInfo :: VersionRangeChat -> Int64 -> GroupInfoRow -> GroupInfo +toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, description, image, hostConnCustomUserProfileId, enableNtfs_, sendRcpts, favorite, groupPreferences) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt, businessMemberId, businessChatType, uiThemes, customData) :. userMemberRow) = + let membership = (toGroupMember userContactId userMemberRow) {memberChatVRange = vr} + chatSettings = ChatSettings {enableNtfs = fromMaybe MFAll enableNtfs_, sendRcpts, favorite} + fullGroupPreferences = mergeGroupPreferences groupPreferences + groupProfile = GroupProfile {displayName, fullName, description, image, groupPreferences} + businessChat = BusinessChatInfo <$> businessMemberId <*> businessChatType + in GroupInfo {groupId, localDisplayName, groupProfile, businessChat, fullGroupPreferences, membership, hostConnCustomUserProfileId, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt, uiThemes, customData} + +toGroupMember :: Int64 -> GroupMemberRow -> GroupMember +toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages, memberRestriction_) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, preferences)) = + let memberProfile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias} + memberSettings = GroupMemberSettings {showMessages} + blockedByAdmin = maybe False mrsBlocked memberRestriction_ + invitedBy = toInvitedBy userContactId invitedById + activeConn = Nothing + memberChatVRange = fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer + in GroupMember {..} + +groupInfoQuery :: Query +groupInfoQuery = + [sql| + SELECT + -- GroupInfo + g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, + g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, + g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, g.business_member_id, g.business_chat, g.ui_themes, g.custom_data, + -- GroupMember - membership + mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, + mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, + pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences + FROM groups g + JOIN group_profiles gp ON gp.group_profile_id = g.group_profile_id + JOIN group_members mu ON mu.group_id = g.group_id + JOIN contact_profiles pu ON pu.contact_profile_id = COALESCE(mu.member_profile_id, mu.contact_profile_id) + |] diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index cc98b4101d..ec8f546d2f 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -349,7 +349,7 @@ instance ToJSON ConnReqUriHash where toJSON = strToJSON toEncoding = strToJEncoding -data ContactOrRequest = CORContact Contact | CORRequest UserContactRequest +data ChatOrRequest = CORContact Contact | CORGroup GroupInfo | CORRequest UserContactRequest type UserName = Text diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 4458f8ee7b..8b6a545637 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -207,6 +207,7 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRAcceptingBusinessRequest u g -> ttyUser u $ viewAcceptingBusinessRequest g CRContactAlreadyExists u c -> ttyUser u [ttyFullContact c <> ": contact already exists"] CRContactRequestAlreadyAccepted u c -> ttyUser u [ttyFullContact c <> ": sent you a duplicate contact request, but you are already connected, no action needed"] + CRBusinessRequestAlreadyAccepted u g -> ttyUser u [ttyFullGroup g <> ": sent you a duplicate connection request, but you are already connected, no action needed"] CRUserContactLinkCreated u cReq -> ttyUser u $ connReqContact_ "Your new chat address is created!" cReq CRUserContactLinkDeleted u -> ttyUser u viewUserContactLinkDeleted CRUserAcceptedGroupSent u _g _ -> ttyUser u [] -- [ttyGroup' g <> ": joining the group..."] @@ -1670,13 +1671,16 @@ viewConnectionPlan = \case GLPOwnLink g -> [grpLink "own link for group " <> ttyGroup' g] GLPConnectingConfirmReconnect -> [grpLink "connecting, allowed to reconnect"] GLPConnectingProhibit Nothing -> [grpLink "connecting"] - GLPConnectingProhibit (Just g) -> [grpLink ("connecting to group " <> ttyGroup' g)] + GLPConnectingProhibit (Just g) -> [grpOrBiz g <> " link: connecting to " <> grpOrBiz g <> " " <> ttyGroup' g] GLPKnown g -> - [ grpLink ("known group " <> ttyGroup' g), + [ grpOrBiz g <> " link: known " <> grpOrBiz g <> " " <> ttyGroup' g, "use " <> ttyToGroup g <> highlight' "" <> " to send messages" ] where grpLink = ("group link: " <>) + grpOrBiz GroupInfo {businessChat} = case businessChat of + Just _ -> "business" + Nothing -> "group" viewContactUpdated :: Contact -> Contact -> [StyledString] viewContactUpdated diff --git a/tests/ChatTests/ChatList.hs b/tests/ChatTests/ChatList.hs index 7f02fafc2c..de12caf648 100644 --- a/tests/ChatTests/ChatList.hs +++ b/tests/ChatTests/ChatList.hs @@ -199,14 +199,14 @@ testPaginationAllChatTypes = ts7 <- iso8601Show <$> getCurrentTime - getChats_ alice "count=10" [("*", "psst"), ("@dan", "hey"), ("#team", e2eeInfoNoPQStr), (":3", ""), ("<@cath", ""), ("@bob", "hey")] - getChats_ alice "count=3" [("*", "psst"), ("@dan", "hey"), ("#team", e2eeInfoNoPQStr)] + getChats_ alice "count=10" [("*", "psst"), ("@dan", "hey"), ("#team", "Recent history: on"), (":3", ""), ("<@cath", ""), ("@bob", "hey")] + getChats_ alice "count=3" [("*", "psst"), ("@dan", "hey"), ("#team", "Recent history: on")] getChats_ alice ("after=" <> ts2 <> " count=2") [(":3", ""), ("<@cath", "")] - getChats_ alice ("before=" <> ts5 <> " count=2") [("#team", e2eeInfoNoPQStr), (":3", "")] - getChats_ alice ("after=" <> ts3 <> " count=10") [("*", "psst"), ("@dan", "hey"), ("#team", e2eeInfoNoPQStr), (":3", "")] + getChats_ alice ("before=" <> ts5 <> " count=2") [("#team", "Recent history: on"), (":3", "")] + getChats_ alice ("after=" <> ts3 <> " count=10") [("*", "psst"), ("@dan", "hey"), ("#team", "Recent history: on"), (":3", "")] getChats_ alice ("before=" <> ts4 <> " count=10") [(":3", ""), ("<@cath", ""), ("@bob", "hey")] - getChats_ alice ("after=" <> ts1 <> " count=10") [("*", "psst"), ("@dan", "hey"), ("#team", e2eeInfoNoPQStr), (":3", ""), ("<@cath", ""), ("@bob", "hey")] - getChats_ alice ("before=" <> ts7 <> " count=10") [("*", "psst"), ("@dan", "hey"), ("#team", e2eeInfoNoPQStr), (":3", ""), ("<@cath", ""), ("@bob", "hey")] + getChats_ alice ("after=" <> ts1 <> " count=10") [("*", "psst"), ("@dan", "hey"), ("#team", "Recent history: on"), (":3", ""), ("<@cath", ""), ("@bob", "hey")] + getChats_ alice ("before=" <> ts7 <> " count=10") [("*", "psst"), ("@dan", "hey"), ("#team", "Recent history: on"), (":3", ""), ("<@cath", ""), ("@bob", "hey")] getChats_ alice ("after=" <> ts7 <> " count=10") [] getChats_ alice ("before=" <> ts1 <> " count=10") [] @@ -218,11 +218,11 @@ testPaginationAllChatTypes = alice ##> "/_settings #1 {\"enableNtfs\":\"all\",\"favorite\":true}" alice <## "ok" - getChats_ alice queryFavorite [("#team", e2eeInfoNoPQStr), ("@bob", "hey")] + getChats_ alice queryFavorite [("#team", "Recent history: on"), ("@bob", "hey")] getChats_ alice ("before=" <> ts4 <> " count=1 " <> queryFavorite) [("@bob", "hey")] - getChats_ alice ("before=" <> ts5 <> " count=1 " <> queryFavorite) [("#team", e2eeInfoNoPQStr)] + getChats_ alice ("before=" <> ts5 <> " count=1 " <> queryFavorite) [("#team", "Recent history: on")] getChats_ alice ("after=" <> ts1 <> " count=1 " <> queryFavorite) [("@bob", "hey")] - getChats_ alice ("after=" <> ts4 <> " count=1 " <> queryFavorite) [("#team", e2eeInfoNoPQStr)] + getChats_ alice ("after=" <> ts4 <> " count=1 " <> queryFavorite) [("#team", "Recent history: on")] let queryUnread = "{\"type\": \"filters\", \"favorite\": false, \"unread\": true}" diff --git a/tests/ChatTests/Direct.hs b/tests/ChatTests/Direct.hs index 72a28c3ada..95d27801f6 100644 --- a/tests/ChatTests/Direct.hs +++ b/tests/ChatTests/Direct.hs @@ -2620,7 +2620,7 @@ testSwitchGroupMember = bob <## "#team: alice changed address for you" alice <## "#team: you changed address for bob" threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "started changing address for bob..."), (1, "you changed address for bob")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "started changing address for bob..."), (1, "you changed address for bob")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "started changing address for you..."), (0, "changed address for you")]) alice #> "#team hey" bob <# "#team alice> hey" @@ -2652,7 +2652,7 @@ testAbortSwitchGroupMember tmp = do bob <## "#team: alice changed address for you" alice <## "#team: you changed address for bob" threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "started changing address for bob..."), (1, "started changing address for bob..."), (1, "you changed address for bob")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "started changing address for bob..."), (1, "started changing address for bob..."), (1, "you changed address for bob")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "started changing address for you..."), (0, "started changing address for you..."), (0, "changed address for you")]) alice #> "#team hey" bob <# "#team alice> hey" diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 89462b2b61..a185b0038e 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -342,11 +342,11 @@ testGroupShared alice bob cath checkMessages directConnections = do getReadChats :: HasCallStack => String -> String -> IO () getReadChats msgItem1 msgItem2 = do alice @@@ [("#team", "hey team"), ("@cath", "sent invitation to join group team as admin"), ("@bob", "sent invitation to join group team as admin")] - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (0, "connected"), (1, "hello"), (0, "hi there"), (0, "hey team")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (0, "connected"), (1, "hello"), (0, "hi there"), (0, "hey team")]) -- "before" and "after" define a chat item id across all chats, -- so we take into account group event items as well as sent group invitations in direct chats alice #$> ("/_get chat #1 after=" <> msgItem1 <> " count=100", chat, [(0, "hi there"), (0, "hey team")]) - alice #$> ("/_get chat #1 before=" <> msgItem2 <> " count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (0, "connected"), (1, "hello"), (0, "hi there")]) + alice #$> ("/_get chat #1 before=" <> msgItem2 <> " count=100", chat, sndGroupFeatures <> [(0, "connected"), (0, "connected"), (1, "hello"), (0, "hi there")]) alice #$> ("/_get chat #1 around=" <> msgItem1 <> " count=2", chat, [(0, "connected"), (0, "connected"), (1, "hello"), (0, "hi there"), (0, "hey team")]) alice #$> ("/_get chat #1 count=100 search=team", chat, [(0, "hey team")]) bob @@@ [("@cath", "hey"), ("#team", "hey team"), ("@alice", "received invitation to join group team as admin")] @@ -565,18 +565,21 @@ testGroup2 = dan <##> cath dan <##> alice -- show last messages - alice ##> "/t #club 9" + alice ##> "/t #club 17" alice -- these strings are expected in any order because of sorting by time and rounding of time for sent - <##? [ ConsoleString ("#club " <> e2eeInfoNoPQStr), - "#club bob> connected", - "#club cath> connected", - "#club bob> added dan (Daniel)", - "#club dan> connected", - "#club hello", - "#club bob> hi there", - "#club cath> hey", - "#club dan> how is it going?" - ] + <##? + ( map (ConsoleString . ("#club " <> )) groupFeatureStrs + <> + [ "#club bob> connected", + "#club cath> connected", + "#club bob> added dan (Daniel)", + "#club dan> connected", + "#club hello", + "#club bob> hi there", + "#club cath> hey", + "#club dan> how is it going?" + ] + ) alice ##> "/t @dan 2" alice <##? [ "dan> hi", @@ -2139,7 +2142,7 @@ testGroupLink = bob <## "#team: you joined the group" ] threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "invited via your group link"), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "invited via your group link"), (0, "connected")]) -- contacts connected via group link are not in chat previews alice @@@ [("#team", "connected")] bob @@@ [("#team", "connected")] @@ -3000,7 +3003,7 @@ testGroupLinkNoContact = ] threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (1, "Recent history: off"), (0, "invited via your group link"), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(1, "Recent history: off"), (0, "invited via your group link"), (0, "connected")]) alice @@@ [("#team", "connected")] bob @@@ [("#team", "connected")] @@ -3063,7 +3066,7 @@ testGroupLinkNoContactInviteesWereConnected = ] threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (1, "Recent history: off"), (0, "invited via your group link"), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(1, "Recent history: off"), (0, "invited via your group link"), (0, "connected")]) alice @@@ [("#team", "connected")] bob @@@ [("#team", "connected"), ("@cath", "hey")] @@ -3144,7 +3147,7 @@ testGroupLinkNoContactAllMembersWereConnected = ] threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (1, "Recent history: off"), (0, "invited via your group link"), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(1, "Recent history: off"), (0, "invited via your group link"), (0, "connected")]) alice @@@ [("#team", "connected"), ("@bob", "hey"), ("@cath", "hey")] bob @@@ [("#team", "connected"), ("@alice", "hey"), ("@cath", "hey")] @@ -3300,7 +3303,7 @@ testGroupLinkNoContactHostIncognito = ] threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "invited via your group link"), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "invited via your group link"), (0, "connected")]) alice @@@ [("#team", "connected")] bob @@@ [("#team", "connected")] @@ -3334,7 +3337,7 @@ testGroupLinkNoContactInviteeIncognito = ] threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "invited via your group link"), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "invited via your group link"), (0, "connected")]) alice @@@ [("#team", "connected")] bob @@@ [("#team", "connected")] @@ -3401,7 +3404,7 @@ testGroupLinkNoContactExistingContactMerged = ] threadDelay 100000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "invited via your group link"), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "invited via your group link"), (0, "connected")]) alice <##> bob diff --git a/tests/ChatTests/Profiles.hs b/tests/ChatTests/Profiles.hs index 3ffe57ba2e..c5a464d969 100644 --- a/tests/ChatTests/Profiles.hs +++ b/tests/ChatTests/Profiles.hs @@ -686,16 +686,26 @@ testBusinessAddress = testChat3 businessProfile aliceProfile {fullName = "Alice cLink <- getContactLink biz True biz ##> "/auto_accept on business" biz <## "auto_accept on, business" + bob ##> ("/_connect plan 1 " <> cLink) + bob <## "contact address: ok to connect" bob ##> ("/c " <> cLink) bob <## "connection request sent!" + bob ##> ("/_connect plan 1 " <> cLink) + bob <## "contact address: connecting, allowed to reconnect" biz <## "#bob (Bob): accepting business address request..." - biz <## "#bob: bob_1 joined the group" bob <## "#biz: joining the group..." + -- the next command can be prone to race conditions + bob ##> ("/_connect plan 1 " <> cLink) + bob <## "business link: connecting to business #biz" + biz <## "#bob: bob_1 joined the group" bob <## "#biz: you joined the group" biz #> "#bob hi" bob <# "#biz biz_1> hi" bob #> "#biz hello" biz <# "#bob bob_1> hello" + bob ##> ("/_connect plan 1 " <> cLink) + bob <## "business link: known business #biz" + bob <## "use #biz to send messages" connectUsers biz alice biz <##> alice biz ##> "/a #bob alice" @@ -1948,13 +1958,13 @@ testUpdateGroupPrefs = testChat2 aliceProfile bobProfile $ \alice bob -> do createGroup2 "team" alice bob - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected")]) threadDelay 500000 bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected")]) alice ##> "/_group_profile #1 {\"displayName\": \"team\", \"fullName\": \"\", \"groupPreferences\": {\"fullDelete\": {\"enable\": \"on\"}, \"directMessages\": {\"enable\": \"on\"}, \"history\": {\"enable\": \"on\"}}}" alice <## "updated group preferences:" alice <## "Full deletion: on" - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Full deletion: on")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Full deletion: on")]) bob <## "alice updated group #team:" bob <## "updated group preferences:" bob <## "Full deletion: on" @@ -1964,7 +1974,7 @@ testUpdateGroupPrefs = alice <## "updated group preferences:" alice <## "Full deletion: off" alice <## "Voice messages: off" - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off")]) bob <## "alice updated group #team:" bob <## "updated group preferences:" bob <## "Full deletion: off" @@ -1974,7 +1984,7 @@ testUpdateGroupPrefs = alice ##> "/set voice #team on" alice <## "updated group preferences:" alice <## "Voice messages: on" - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off"), (1, "Voice messages: on")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off"), (1, "Voice messages: on")]) bob <## "alice updated group #team:" bob <## "updated group preferences:" bob <## "Voice messages: on" @@ -1984,14 +1994,14 @@ testUpdateGroupPrefs = alice ##> "/_group_profile #1 {\"displayName\": \"team\", \"fullName\": \"\", \"groupPreferences\": {\"fullDelete\": {\"enable\": \"off\"}, \"voice\": {\"enable\": \"on\"}, \"directMessages\": {\"enable\": \"on\"}, \"history\": {\"enable\": \"on\"}}}" -- no update threadDelay 500000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off"), (1, "Voice messages: on")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off"), (1, "Voice messages: on")]) alice #> "#team hey" bob <# "#team alice> hey" threadDelay 1000000 bob #> "#team hi" alice <# "#team bob> hi" threadDelay 500000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off"), (1, "Voice messages: on"), (1, "hey"), (0, "hi")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Full deletion: on"), (1, "Full deletion: off"), (1, "Voice messages: off"), (1, "Voice messages: on"), (1, "hey"), (0, "hi")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "Full deletion: on"), (0, "Full deletion: off"), (0, "Voice messages: off"), (0, "Voice messages: on"), (0, "hey"), (1, "hi")]) testAllowFullDeletionContact :: HasCallStack => FilePath -> IO () @@ -2031,11 +2041,11 @@ testAllowFullDeletionGroup = bob <## "alice updated group #team:" bob <## "updated group preferences:" bob <## "Full deletion: on" - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "hi"), (0, "hey"), (1, "Full deletion: on")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "hi"), (0, "hey"), (1, "Full deletion: on")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "hi"), (1, "hey"), (0, "Full deletion: on")]) bob #$> ("/_delete item #1 " <> msgItemId <> " broadcast", id, "message deleted") alice <# "#team bob> [deleted] hey" - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "hi"), (1, "Full deletion: on")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "hi"), (1, "Full deletion: on")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "hi"), (0, "Full deletion: on")]) testProhibitDirectMessages :: HasCallStack => FilePath -> IO () @@ -2157,12 +2167,12 @@ testEnableTimedMessagesGroup = alice #> "#team hi" bob <# "#team alice> hi" threadDelay 500000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Disappearing messages: on (1 sec)"), (1, "hi")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Disappearing messages: on (1 sec)"), (1, "hi")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "Disappearing messages: on (1 sec)"), (0, "hi")]) threadDelay 1000000 alice <## "timed message deleted: hi" bob <## "timed message deleted: hi" - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Disappearing messages: on (1 sec)")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Disappearing messages: on (1 sec)")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "Disappearing messages: on (1 sec)")]) -- turn off, messages are not disappearing alice ##> "/set disappear #team off" @@ -2175,7 +2185,7 @@ testEnableTimedMessagesGroup = alice #> "#team hey" bob <# "#team alice> hey" threadDelay 1500000 - alice #$> ("/_get chat #1 count=100", chat, [(1, e2eeInfoNoPQStr), (0, "connected"), (1, "Disappearing messages: on (1 sec)"), (1, "Disappearing messages: off"), (1, "hey")]) + alice #$> ("/_get chat #1 count=100", chat, sndGroupFeatures <> [(0, "connected"), (1, "Disappearing messages: on (1 sec)"), (1, "Disappearing messages: off"), (1, "hey")]) bob #$> ("/_get chat #1 count=100", chat, groupFeatures <> [(0, "connected"), (0, "Disappearing messages: on (1 sec)"), (0, "Disappearing messages: off"), (0, "hey")]) -- test api alice ##> "/set disappear #team on 30s" diff --git a/tests/ChatTests/Utils.hs b/tests/ChatTests/Utils.hs index 6459522134..ce820b12a7 100644 --- a/tests/ChatTests/Utils.hs +++ b/tests/ChatTests/Utils.hs @@ -281,19 +281,25 @@ lastChatFeature :: String lastChatFeature = snd $ last chatFeatures groupFeatures :: [(Int, String)] -groupFeatures = map (\(a, _, _) -> a) groupFeatures'' +groupFeatures = map (\(a, _, _) -> a) $ groupFeatures'' 0 -groupFeatures'' :: [((Int, String), Maybe (Int, String), Maybe String)] -groupFeatures'' = - [ ((0, e2eeInfoNoPQStr), Nothing, Nothing), - ((0, "Disappearing messages: off"), Nothing, Nothing), - ((0, "Direct messages: on"), Nothing, Nothing), - ((0, "Full deletion: off"), Nothing, Nothing), - ((0, "Message reactions: on"), Nothing, Nothing), - ((0, "Voice messages: on"), Nothing, Nothing), - ((0, "Files and media: on"), Nothing, Nothing), - ((0, "SimpleX links: on"), Nothing, Nothing), - ((0, "Recent history: on"), Nothing, Nothing) +sndGroupFeatures :: [(Int, String)] +sndGroupFeatures = map (\(a, _, _) -> a) $ groupFeatures'' 1 + +groupFeatureStrs :: [String] +groupFeatureStrs = map (\(a, _, _) -> snd a) $ groupFeatures'' 0 + +groupFeatures'' :: Int -> [((Int, String), Maybe (Int, String), Maybe String)] +groupFeatures'' dir = + [ ((dir, e2eeInfoNoPQStr), Nothing, Nothing), + ((dir, "Disappearing messages: off"), Nothing, Nothing), + ((dir, "Direct messages: on"), Nothing, Nothing), + ((dir, "Full deletion: off"), Nothing, Nothing), + ((dir, "Message reactions: on"), Nothing, Nothing), + ((dir, "Voice messages: on"), Nothing, Nothing), + ((dir, "Files and media: on"), Nothing, Nothing), + ((dir, "SimpleX links: on"), Nothing, Nothing), + ((dir, "Recent history: on"), Nothing, Nothing) ] itemId :: Int -> String From 85e7a13dba593a8a3ca4680ecfef97d31c1c5c6a Mon Sep 17 00:00:00 2001 From: Diogo Date: Tue, 3 Dec 2024 12:26:50 +0000 Subject: [PATCH 13/22] desktop: show group message reaction on right click (#5304) * desktop: show group message reaction on right click * open on ctrl + click too --- .../common/views/chat/item/ChatItemView.kt | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index 82744fdc39..bf871ab626 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -121,9 +121,33 @@ fun ChatItemView( cItem.reactions.forEach { r -> val showReactionMenu = remember { mutableStateOf(false) } val reactionMembers = remember { mutableStateOf(emptyList()) } + val interactionSource = remember { MutableInteractionSource() } + val enterInteraction = remember { HoverInteraction.Enter() } + KeyChangeEffect(highlighted.value) { + if (highlighted.value) { + interactionSource.emit(enterInteraction) + } else { + interactionSource.emit(HoverInteraction.Exit(enterInteraction)) + } + } var modifier = Modifier.padding(horizontal = 5.dp, vertical = 2.dp).clip(RoundedCornerShape(8.dp)) if (cInfo.featureEnabled(ChatFeature.Reactions)) { + fun showReactionsMenu() { + if (cInfo is ChatInfo.Group) { + withBGApi { + try { + val members = controller.apiGetReactionMembers(rhId, cInfo.groupInfo.groupId, cItem.id, r.reaction) + if (members != null) { + showReactionMenu.value = true + reactionMembers.value = members + } + } catch (e: Exception) { + Log.d(TAG, "hatItemView ChatItemReactions onLongClick: unexpected exception: ${e.stackTraceToString()}") + } + } + } + } modifier = modifier .combinedClickable( onClick = { @@ -132,21 +156,12 @@ fun ChatItemView( } }, onLongClick = { - if (cInfo is ChatInfo.Group) { - withBGApi { - try { - val members = controller.apiGetReactionMembers(rhId, cInfo.groupInfo.groupId, cItem.id, r.reaction) - if (members != null) { - showReactionMenu.value = true - reactionMembers.value = members - } - } catch (e: Exception) { - Log.d(TAG, "hatItemView ChatItemReactions onLongClick: unexpected exception: ${e.stackTraceToString()}") - } - } - } - } + showReactionsMenu() + }, + interactionSource = interactionSource, + indication = LocalIndication.current ) + .onRightClick { showReactionsMenu() } } Row(modifier.padding(2.dp), verticalAlignment = Alignment.CenterVertically) { ReactionIcon(r.reaction.text, fontSize = 12.sp) From 43fa4c43a29672d949361894caa9e8ef38b0d397 Mon Sep 17 00:00:00 2001 From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:48:54 +0000 Subject: [PATCH 14/22] docs: update FAQ (#5179) * Update FAQ.md Added: - Why invite links use simplex.chat domain? - I do not know my database passphrase * Update FAQ.md * Add flatpak directory * corrections * correction * invitation --------- Co-authored-by: Evgeny --- docs/FAQ.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/FAQ.md b/docs/FAQ.md index 932a4c33ee..0d0426d7c9 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -18,6 +18,7 @@ revision: 23.04.2024 - [I want to see when my contacts read my messages](#i-want-to-see-when-my-contacts-read-my-messages) - [Can I use the same profile on desktop? Do messages sync cross-platform?](#can-i-use-the-same-profile-on-desktop-do-messages-sync-cross-platform) - [Why cannot I delete messages I sent from my contact's device?](#why-cannot-i-delete-messages-i-sent-from-my-contacts-device) +- [Why invitation links use simplex.chat domain?](#why-invitation-links-use-simplex.chat-domain) [Troubleshooting](#troubleshooting) - [I do not receive messages or message notifications](#i-do-not-receive-messages-or-message-notifications) @@ -27,6 +28,7 @@ revision: 23.04.2024 - [Audio or video calls do not connect](#audio-or-video-calls-do-not-connect) - [Audio or video calls without e2e encryption](#audio-or-video-calls-without-e2e-encryption) - [I clicked the link to connect, but could not connect](#i-clicked-the-link-to-connect-but-could-not-connect) +- [I do not know my database passphrase](#i-do-not-know-my-database-passphrase) [Privacy and security](#privacy-and-security) - [Does SimpleX support post quantum cryptography?](#does-simplex-support-post-quantum-cryptography) @@ -120,6 +122,14 @@ It is also important to remember, that even if your contact enabled "Delete for When "Delete for everyone" is not enabled, you can still mark the sent message as deleted within 24 hours of sending it. In this case the recipient will see it as "deleted message", and will be able to reveal the original message. +### Why invitation links use simplex.chat domain? + +You can replace `https://simplex.chat/` with `simplex:/` or with any other domain - the app never connect with it, ignoring it completely. It is only used to make it easier to connect for the new users who did not install the app yet. + +The invitation links will soon move to servers' domains. The servers already can host the pages that will be used to show QR codes. + +The link itself and the key exchange are not hosted anywhere, and the server that hosts the page to show QR code does not observe the actual connection link, because it is in the hash part of the link. The part after hash character (`#`) is not sent over the internet - the server can only see `https://simplex.chat/contact/` and the rest is processed on user's device in the browser, if you open it as a page. + ## Troubleshooting ### I do not receive messages or message notifications @@ -226,6 +236,20 @@ For connection to complete, your contact has to be online and have the app runni Once the connection is established you don't need to be online at the same time to send messages. +### I do not know my database passphrase + +If you are prompted to enter database passphrase and you do not know it, this could have happened due to: +- You may have forgotten the passphrase. (There is no other way to access your data). +- Migration of app data from one device to another while using unsupported migration process, e.g. via iCloud backup. Use SimpleX Chat's own migration process in the app Settings. + +In the previous desktop app versions it could also happen in case of error during SimpleX Chat installation. + +You can resolve it by deleting the app's database: (WARNING: this results in deletion of all profiles, contacts and messages) +- on Android/iOS, uninstall the app and install it again. +- on Windows, delete folder `C:\AppData\Roaming\SimpleX`, you can find it by pressing Windows key + R and entering `%appdata%`. +- on Linux/Mac, delete directories `~/.local/share/simplex` and `~/.config/simplex`, where `~` represents your home directory (/home/user) +- on Flatpak, delete directory `~/.var/app/chat.simplex.simplex`. + ## Privacy and security ### Does SimpleX support post quantum cryptography? From a0b8cf62be27a9b701f65279a1d772ce544130b8 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:27:00 +0400 Subject: [PATCH 15/22] android, desktop: support business addresses and chats (#5302) --- .../chat/simplex/common/model/ChatModel.kt | 15 ++++- .../chat/simplex/common/model/SimpleXAPI.kt | 20 ++++++- .../views/chat/group/GroupChatInfoView.kt | 33 +++++++---- .../views/chat/group/GroupPreferences.kt | 14 ++--- .../views/chat/group/WelcomeMessageView.kt | 5 +- .../common/views/helpers/ChatInfoImage.kt | 8 ++- .../common/views/newchat/ConnectPlan.kt | 33 ++++++++--- .../common/views/usersettings/Preferences.kt | 4 +- .../common/views/usersettings/SettingsView.kt | 2 + .../views/usersettings/UserAddressView.kt | 55 +++++++++++++++---- .../commonMain/resources/MR/base/strings.xml | 6 ++ .../resources/MR/images/ic_work.svg | 1 + .../MR/images/ic_work_filled_padded.svg | 8 +++ 13 files changed, 155 insertions(+), 49 deletions(-) create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work.svg create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled_padded.svg diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index 857d21b966..4d75d37b99 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -1467,6 +1467,7 @@ data class GroupInfo ( val groupId: Long, override val localDisplayName: String, val groupProfile: GroupProfile, + val businessChat: BusinessChatInfo? = null, val fullGroupPreferences: FullGroupPreferences, val membership: GroupMember, val hostConnCustomUserProfileId: Long? = null, @@ -1497,7 +1498,7 @@ data class GroupInfo ( override val image get() = groupProfile.image override val localAlias get() = "" - val canEdit: Boolean + val isOwner: Boolean get() = membership.memberRole == GroupMemberRole.Owner && membership.memberCurrent val canDelete: Boolean @@ -1543,6 +1544,18 @@ data class GroupProfile ( } } +@Serializable +data class BusinessChatInfo ( + val memberId: String, + val chatType: BusinessChatType +) + +@Serializable +enum class BusinessChatType { + @SerialName("business") Business, + @SerialName("customer") Customer, +} + @Serializable data class GroupMember ( val groupMemberId: Long, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index d9c7df9d81..f0f63f2c72 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -2526,6 +2526,14 @@ object ChatController { } } } + is CR.BusinessLinkConnecting -> { + if (!active(r.user)) return + + withChats { + updateGroup(rhId, r.groupInfo) + removeChat(rhId, r.fromContact.id) + } + } is CR.JoinedGroupMemberConnecting -> if (active(r.user)) { withChats { @@ -5484,6 +5492,7 @@ sealed class CR { @Serializable @SerialName("sentGroupInvitation") class SentGroupInvitation(val user: UserRef, val groupInfo: GroupInfo, val contact: Contact, val member: GroupMember): CR() @Serializable @SerialName("userAcceptedGroupSent") class UserAcceptedGroupSent (val user: UserRef, val groupInfo: GroupInfo, val hostContact: Contact? = null): CR() @Serializable @SerialName("groupLinkConnecting") class GroupLinkConnecting (val user: UserRef, val groupInfo: GroupInfo, val hostMember: GroupMember): CR() + @Serializable @SerialName("businessLinkConnecting") class BusinessLinkConnecting (val user: UserRef, val groupInfo: GroupInfo, val hostMember: GroupMember, val fromContact: Contact): CR() @Serializable @SerialName("userDeletedMember") class UserDeletedMember(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR() @Serializable @SerialName("leftMemberUser") class LeftMemberUser(val user: UserRef, val groupInfo: GroupInfo): CR() @Serializable @SerialName("groupMembers") class GroupMembers(val user: UserRef, val group: Group): CR() @@ -5664,6 +5673,7 @@ sealed class CR { is SentGroupInvitation -> "sentGroupInvitation" is UserAcceptedGroupSent -> "userAcceptedGroupSent" is GroupLinkConnecting -> "groupLinkConnecting" + is BusinessLinkConnecting -> "businessLinkConnecting" is UserDeletedMember -> "userDeletedMember" is LeftMemberUser -> "leftMemberUser" is GroupMembers -> "groupMembers" @@ -5837,6 +5847,7 @@ sealed class CR { is SentGroupInvitation -> withUser(user, "groupInfo: $groupInfo\ncontact: $contact\nmember: $member") is UserAcceptedGroupSent -> json.encodeToString(groupInfo) is GroupLinkConnecting -> withUser(user, "groupInfo: $groupInfo\nhostMember: $hostMember") + is BusinessLinkConnecting -> withUser(user, "groupInfo: $groupInfo\nhostMember: $hostMember\nfromContact: $fromContact") is UserDeletedMember -> withUser(user, "groupInfo: $groupInfo\nmember: $member") is LeftMemberUser -> withUser(user, json.encodeToString(groupInfo)) is GroupMembers -> withUser(user, json.encodeToString(group)) @@ -6108,11 +6119,16 @@ class UserContactLinkRec(val connReqContact: String, val autoAccept: AutoAccept? } @Serializable -class AutoAccept(val acceptIncognito: Boolean, val autoReply: MsgContent?) { +class AutoAccept(val businessAddress: Boolean, val acceptIncognito: Boolean, val autoReply: MsgContent?) { companion object { fun cmdString(autoAccept: AutoAccept?): String { if (autoAccept == null) return "off" - val s = "on" + if (autoAccept.acceptIncognito) " incognito=on" else "" + var s = "on" + if (autoAccept.acceptIncognito) { + s += " incognito=on" + } else if (autoAccept.businessAddress) { + s += " business" + } val msg = autoAccept.autoReply ?: return s return s + " " + msg.cmdString } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt index 76f2866950..870df388b2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt @@ -36,6 +36,7 @@ import chat.simplex.common.views.chat.* import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.chatlist.* import chat.simplex.res.MR +import dev.icerock.moko.resources.StringResource import kotlinx.coroutines.launch const val SMALL_GROUPS_RCPS_MEM_LIMIT: Int = 20 @@ -328,13 +329,14 @@ fun ModalData.GroupChatInfoLayout( SectionSpacer() SectionView { - if (groupInfo.canEdit) { + if (groupInfo.isOwner && groupInfo.businessChat?.chatType == null) { EditGroupProfileButton(editGroupProfile) } - if (groupInfo.groupProfile.description != null || groupInfo.canEdit) { + if (groupInfo.groupProfile.description != null || (groupInfo.isOwner && groupInfo.businessChat?.chatType == null)) { AddOrEditWelcomeMessage(groupInfo.groupProfile.description, addOrEditWelcomeMessage) } - GroupPreferencesButton(openPreferences) + val prefsTitleId = if (groupInfo.businessChat == null) MR.strings.group_preferences else MR.strings.chat_preferences + GroupPreferencesButton(prefsTitleId, openPreferences) if (members.filter { it.memberCurrent }.size <= SMALL_GROUPS_RCPS_MEM_LIMIT) { SendReceiptsOption(currentUser, sendReceipts, setSendReceipts) } else { @@ -356,14 +358,21 @@ fun ModalData.GroupChatInfoLayout( SectionView(title = String.format(generalGetString(MR.strings.group_info_section_title_num_members), members.count() + 1)) { if (groupInfo.canAddMembers) { - if (groupLink == null) { - CreateGroupLinkButton(manageGroupLink) - } else { - GroupLinkButton(manageGroupLink) + if (groupInfo.businessChat == null) { + if (groupLink == null) { + CreateGroupLinkButton(manageGroupLink) + } else { + GroupLinkButton(manageGroupLink) + } } val onAddMembersClick = if (chat.chatInfo.incognito) ::cantInviteIncognitoAlert else addMembers val tint = if (chat.chatInfo.incognito) MaterialTheme.colors.secondary else MaterialTheme.colors.primary - AddMembersButton(tint, onAddMembersClick) + val addMembersTitleId = when (groupInfo.businessChat?.chatType) { + BusinessChatType.Customer -> MR.strings.button_add_team_members + BusinessChatType.Business -> MR.strings.button_add_friends + null -> MR.strings.button_add_members + } + AddMembersButton(addMembersTitleId, tint, onAddMembersClick) } if (members.size > 8) { SectionItemView(padding = PaddingValues(start = 14.dp, end = DEFAULT_PADDING_HALF)) { @@ -439,10 +448,10 @@ private fun GroupChatInfoHeader(cInfo: ChatInfo) { } @Composable -private fun GroupPreferencesButton(onClick: () -> Unit) { +private fun GroupPreferencesButton(titleId: StringResource, onClick: () -> Unit) { SettingsActionItem( painterResource(MR.images.ic_toggle_on), - stringResource(MR.strings.group_preferences), + stringResource(titleId), click = onClick ) } @@ -479,10 +488,10 @@ fun SendReceiptsOptionDisabled() { } @Composable -private fun AddMembersButton(tint: Color = MaterialTheme.colors.primary, onClick: () -> Unit) { +private fun AddMembersButton(titleId: StringResource, tint: Color = MaterialTheme.colors.primary, onClick: () -> Unit) { SettingsActionItem( painterResource(MR.images.ic_add), - stringResource(MR.strings.button_add_members), + stringResource(titleId), onClick, iconColor = tint, textColor = tint diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt index 128dfe2d97..0a807e1d63 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt @@ -6,12 +6,10 @@ import SectionDividerSpaced import SectionItemView import SectionTextFooter import SectionView -import androidx.compose.foundation.layout.* import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.ui.Modifier import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* @@ -20,7 +18,6 @@ import chat.simplex.common.model.* import chat.simplex.common.model.ChatModel.withChats import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.res.MR -import dev.icerock.moko.resources.compose.painterResource private val featureRoles: List> = listOf( null to generalGetString(MR.strings.feature_roles_all_members), @@ -83,7 +80,8 @@ private fun GroupPreferencesLayout( savePrefs: () -> Unit, ) { ColumnWithScrollBar { - AppBarTitle(stringResource(MR.strings.group_preferences)) + val titleId = if (groupInfo.businessChat == null) MR.strings.group_preferences else MR.strings.chat_preferences + AppBarTitle(stringResource(titleId)) val timedMessages = remember(preferences) { mutableStateOf(preferences.timedMessages.enable) } val onTTLUpdated = { ttl: Int? -> applyPrefs(preferences.copy(timedMessages = preferences.timedMessages.copy(ttl = ttl))) @@ -136,7 +134,7 @@ private fun GroupPreferencesLayout( FeatureSection(GroupFeature.History, enableHistory, null, groupInfo, preferences, onTTLUpdated) { enable, _ -> applyPrefs(preferences.copy(history = GroupPreference(enable = enable))) } - if (groupInfo.canEdit) { + if (groupInfo.isOwner) { SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false) ResetSaveButtons( reset = reset, @@ -163,12 +161,12 @@ private fun FeatureSection( val icon = if (on) feature.iconFilled() else feature.icon val iconTint = if (on) SimplexGreen else MaterialTheme.colors.secondary val timedOn = feature == GroupFeature.TimedMessages && enableFeature.value == GroupFeatureEnabled.ON - if (groupInfo.canEdit) { + if (groupInfo.isOwner) { PreferenceToggleWithIcon( feature.text, icon, iconTint, - enableFeature.value == GroupFeatureEnabled.ON, + checked = enableFeature.value == GroupFeatureEnabled.ON, ) { checked -> onSelected(if (checked) GroupFeatureEnabled.ON else GroupFeatureEnabled.OFF, enableForRole?.value) } @@ -214,7 +212,7 @@ private fun FeatureSection( onSelected(enableFeature.value, null) } } - SectionTextFooter(feature.enableDescription(enableFeature.value, groupInfo.canEdit)) + SectionTextFooter(feature.enableDescription(enableFeature.value, groupInfo.isOwner)) } @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt index 7f0af360e7..6ebd4b13c3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/WelcomeMessageView.kt @@ -7,9 +7,7 @@ import SectionTextFooter import SectionView import TextIconSpaced import androidx.compose.foundation.layout.* -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.selection.SelectionContainer -import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable @@ -32,7 +30,6 @@ import chat.simplex.common.model.ChatModel.withChats import chat.simplex.common.model.GroupInfo import chat.simplex.common.platform.ColumnWithScrollBar import chat.simplex.common.platform.chatJsonLength -import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF import chat.simplex.res.MR import kotlinx.coroutines.delay @@ -99,7 +96,7 @@ private fun GroupWelcomeLayout( val editMode = remember { mutableStateOf(true) } AppBarTitle(stringResource(MR.strings.group_welcome_title)) val wt = rememberSaveable { welcomeText } - if (groupInfo.canEdit) { + if (groupInfo.isOwner && groupInfo.businessChat?.chatType == null) { if (editMode.value) { val focusRequester = remember { FocusRequester() } TextEditor( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt index d338c57e61..c3e97dd27b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.graphics.* import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.InspectableValue import androidx.compose.ui.unit.* +import chat.simplex.common.model.BusinessChatType import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import chat.simplex.common.model.ChatInfo @@ -30,7 +31,12 @@ import kotlin.math.max fun ChatInfoImage(chatInfo: ChatInfo, size: Dp, iconColor: Color = MaterialTheme.colors.secondaryVariant, shadow: Boolean = false) { val icon = when (chatInfo) { - is ChatInfo.Group -> MR.images.ic_supervised_user_circle_filled + is ChatInfo.Group -> + when (chatInfo.groupInfo.businessChat?.chatType) { + BusinessChatType.Business -> MR.images.ic_work_filled_padded + BusinessChatType.Customer -> MR.images.ic_account_circle_filled + null -> MR.images.ic_supervised_user_circle_filled + } is ChatInfo.Local -> MR.images.ic_folder_filled else -> MR.images.ic_account_circle_filled } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt index 7cd272c109..e8190e0767 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt @@ -275,10 +275,17 @@ suspend fun planAndConnect( Log.d(TAG, "planAndConnect, .GroupLink, .ConnectingProhibit, incognito=$incognito") val groupInfo = connectionPlan.groupLinkPlan.groupInfo_ if (groupInfo != null) { - AlertManager.privacySensitive.showAlertMsg( - generalGetString(MR.strings.connect_plan_group_already_exists), - String.format(generalGetString(MR.strings.connect_plan_you_are_already_joining_the_group_vName), groupInfo.displayName) + linkText - ) + if (groupInfo.businessChat == null) { + AlertManager.privacySensitive.showAlertMsg( + generalGetString(MR.strings.connect_plan_group_already_exists), + String.format(generalGetString(MR.strings.connect_plan_you_are_already_joining_the_group_vName), groupInfo.displayName) + linkText + ) + } else { + AlertManager.privacySensitive.showAlertMsg( + generalGetString(MR.strings.connect_plan_chat_already_exists), + String.format(generalGetString(MR.strings.connect_plan_you_are_already_connecting_to_vName), groupInfo.displayName) + linkText + ) + } } else { AlertManager.privacySensitive.showAlertMsg( generalGetString(MR.strings.connect_plan_already_joining_the_group), @@ -295,11 +302,19 @@ suspend fun planAndConnect( filterKnownGroup(groupInfo) } else { openKnownGroup(chatModel, rhId, close, groupInfo) - AlertManager.privacySensitive.showAlertMsg( - generalGetString(MR.strings.connect_plan_group_already_exists), - String.format(generalGetString(MR.strings.connect_plan_you_are_already_in_group_vName), groupInfo.displayName) + linkText, - hostDevice = hostDevice(rhId), - ) + if (groupInfo.businessChat == null) { + AlertManager.privacySensitive.showAlertMsg( + generalGetString(MR.strings.connect_plan_group_already_exists), + String.format(generalGetString(MR.strings.connect_plan_you_are_already_in_group_vName), groupInfo.displayName) + linkText, + hostDevice = hostDevice(rhId), + ) + } else { + AlertManager.privacySensitive.showAlertMsg( + generalGetString(MR.strings.connect_plan_chat_already_exists), + String.format(generalGetString(MR.strings.connect_plan_you_are_already_connected_with_vName), groupInfo.displayName) + linkText, + hostDevice = hostDevice(rhId), + ) + } cleanup?.invoke() } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt index bc27773ca6..5132516669 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Preferences.kt @@ -123,9 +123,9 @@ private fun TimedMessagesFeatureSection(allowFeature: State, onS ChatFeature.TimedMessages.text, ChatFeature.TimedMessages.icon, MaterialTheme.colors.secondary, - allowFeature.value == FeatureAllowed.ALWAYS || allowFeature.value == FeatureAllowed.YES, + checked = allowFeature.value == FeatureAllowed.ALWAYS || allowFeature.value == FeatureAllowed.YES, extraPadding = false, - onSelected + onChange = onSelected ) } SectionTextFooter(ChatFeature.TimedMessages.allowDescription(allowFeature.value)) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt index ac6431f6fc..51a0ffad8d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt @@ -408,6 +408,7 @@ fun PreferenceToggleWithIcon( text: String, icon: Painter? = null, iconColor: Color? = MaterialTheme.colors.secondary, + disabled: Boolean = false, checked: Boolean, extraPadding: Boolean = false, onChange: (Boolean) -> Unit = {}, @@ -418,6 +419,7 @@ fun PreferenceToggleWithIcon( onCheckedChange = { onChange(it) }, + enabled = !disabled ) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt index 836faee49b..7bc35bc0de 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserAddressView.kt @@ -196,14 +196,22 @@ private fun UserAddressLayout( LearnMoreButton(learnMore) } } else { + val autoAcceptState = remember { mutableStateOf(AutoAcceptState(userAddress)) } + val autoAcceptStateSaved = remember { mutableStateOf(autoAcceptState.value) } + SectionView(stringResource(MR.strings.for_social_media).uppercase()) { SimpleXLinkQRCode(userAddress.connReqContact) ShareAddressButton { share(simplexChatLink(userAddress.connReqContact)) } // ShareViaEmailButton { sendEmail(userAddress) } + BusinessAddressToggle(autoAcceptState) { saveAas(autoAcceptState.value, autoAcceptStateSaved) } AddressSettingsButton(user, userAddress, shareViaProfile, setProfileAddress, saveAas) + + if (autoAcceptState.value.business) { + SectionTextFooter(stringResource(MR.strings.add_your_team_members_to_conversations)) + } } - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = autoAcceptState.value.business) SectionView(generalGetString(MR.strings.or_to_share_privately).uppercase()) { CreateOneTimeLinkButton() } @@ -385,17 +393,37 @@ fun ShareWithContactsButton(shareViaProfile: MutableState, setProfileAd onDismissRequest = { shareViaProfile.value = !on }) + } } +} + +@Composable +private fun BusinessAddressToggle(autoAcceptState: MutableState, saveAas: (AutoAcceptState) -> Unit) { + PreferenceToggleWithIcon( + stringResource(MR.strings.business_address), + painterResource(MR.images.ic_work), + checked = autoAcceptState.value.business, + ) { ba -> + autoAcceptState.value = if (ba) + AutoAcceptState(enable = true, incognito = false, business = true, autoAcceptState.value.welcomeText) + else + AutoAcceptState(autoAcceptState.value.enable, autoAcceptState.value.incognito, business = false, autoAcceptState.value.welcomeText) + saveAas(autoAcceptState.value) } } @Composable private fun AutoAcceptToggle(autoAcceptState: MutableState, saveAas: (AutoAcceptState) -> Unit) { - PreferenceToggleWithIcon(stringResource(MR.strings.auto_accept_contact), painterResource(MR.images.ic_check), checked = autoAcceptState.value.enable) { + PreferenceToggleWithIcon( + stringResource(MR.strings.auto_accept_contact), + painterResource(MR.images.ic_check), + disabled = autoAcceptState.value.business, + checked = autoAcceptState.value.enable + ) { autoAcceptState.value = if (!it) AutoAcceptState() else - AutoAcceptState(it, autoAcceptState.value.incognito, autoAcceptState.value.welcomeText) + AutoAcceptState(it, autoAcceptState.value.incognito, autoAcceptState.value.business, autoAcceptState.value.welcomeText) saveAas(autoAcceptState.value) } } @@ -416,12 +444,15 @@ private class AutoAcceptState { private set var incognito: Boolean = false private set + var business: Boolean = false + private set var welcomeText: String = "" private set - constructor(enable: Boolean = false, incognito: Boolean = false, welcomeText: String = "") { + constructor(enable: Boolean = false, incognito: Boolean = false, business: Boolean = false, welcomeText: String = "") { this.enable = enable this.incognito = incognito + this.business = business this.welcomeText = welcomeText } @@ -429,6 +460,7 @@ private class AutoAcceptState { contactLink.autoAccept?.let { aa -> enable = true incognito = aa.acceptIncognito + business = aa.businessAddress aa.autoReply?.let { msg -> welcomeText = msg.text } ?: run { @@ -445,19 +477,20 @@ private class AutoAcceptState { if (s != "") { autoReply = MsgContent.MCText(s) } - return AutoAccept(incognito, autoReply) + return AutoAccept(business, incognito, autoReply) } return null } override fun equals(other: Any?): Boolean { if (other !is AutoAcceptState) return false - return this.enable == other.enable && this.incognito == other.incognito && this.welcomeText == other.welcomeText + return this.enable == other.enable && this.incognito == other.incognito && this.business == other.business && this.welcomeText == other.welcomeText } override fun hashCode(): Int { var result = enable.hashCode() result = 31 * result + incognito.hashCode() + result = 31 * result + business.hashCode() result = 31 * result + welcomeText.hashCode() return result } @@ -470,7 +503,9 @@ private fun AutoAcceptSection( saveAas: (AutoAcceptState, MutableState) -> Unit ) { SectionView(stringResource(MR.strings.auto_accept_contact).uppercase()) { - AcceptIncognitoToggle(autoAcceptState) + if (!autoAcceptState.value.business) { + AcceptIncognitoToggle(autoAcceptState) + } WelcomeMessageEditor(autoAcceptState) SaveAASButton(autoAcceptState.value == savedAutoAcceptState.value) { saveAas(autoAcceptState.value, savedAutoAcceptState) } } @@ -482,9 +517,9 @@ private fun AcceptIncognitoToggle(autoAcceptState: MutableState stringResource(MR.strings.accept_contact_incognito_button), if (autoAcceptState.value.incognito) painterResource(MR.images.ic_theater_comedy_filled) else painterResource(MR.images.ic_theater_comedy), if (autoAcceptState.value.incognito) Indigo else MaterialTheme.colors.secondary, - autoAcceptState.value.incognito, + checked = autoAcceptState.value.incognito, ) { - autoAcceptState.value = AutoAcceptState(autoAcceptState.value.enable, it, autoAcceptState.value.welcomeText) + autoAcceptState.value = AutoAcceptState(autoAcceptState.value.enable, it, autoAcceptState.value.business, autoAcceptState.value.welcomeText) } } @@ -494,7 +529,7 @@ private fun WelcomeMessageEditor(autoAcceptState: MutableState) TextEditor(welcomeText, Modifier.height(100.dp), placeholder = stringResource(MR.strings.enter_welcome_message_optional)) LaunchedEffect(welcomeText.value) { if (welcomeText.value != autoAcceptState.value.welcomeText) { - autoAcceptState.value = AutoAcceptState(autoAcceptState.value.enable, autoAcceptState.value.incognito, welcomeText.value) + autoAcceptState.value = AutoAcceptState(autoAcceptState.value.enable, autoAcceptState.value.incognito, autoAcceptState.value.business, welcomeText.value) } } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index d931abab70..55b7e2b0e7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -936,6 +936,8 @@ SimpleX address or 1-time link? Create 1-time link Address settings + Business address + Add your team members to the conversations. Continue @@ -1551,6 +1553,8 @@ Invite members + Add team members + Add friends %1$s MEMBERS you: %1$s Delete group @@ -2275,10 +2279,12 @@ Open group Repeat join request? Group already exists! + Chat already exists! %1$s.]]> Already joining the group! You are already joining the group via this link. %1$s.]]> + %1$s.]]> Connect via link? diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work.svg new file mode 100644 index 0000000000..4ea483b006 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled_padded.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled_padded.svg new file mode 100644 index 0000000000..3d8c05e2c8 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_work_filled_padded.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From 29b9abf2411b04c1eddea06901153309b2e0bd67 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 3 Dec 2024 15:22:41 +0000 Subject: [PATCH 16/22] ui: translations (#5267) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (German) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (Russian) Currently translated at 95.6% (2087 of 2182 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 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (Italian) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 80.7% (1763 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hant/ * Translated using Weblate (Dutch) Currently translated at 95.6% (2087 of 2182 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 88.6% (1935 of 2182 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 91.9% (2006 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * Translated using Weblate (Arabic) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Ukrainian) Currently translated at 95.5% (2085 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/ * Translated using Weblate (Finnish) Currently translated at 67.5% (1474 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fi/ * Translated using Weblate (Polish) Currently translated at 95.6% (2086 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Portuguese) Currently translated at 43.9% (959 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt/ * Translated using Weblate (Hebrew) Currently translated at 86.2% (1883 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/he/ * Translated using Weblate (Bulgarian) Currently translated at 79.1% (1726 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/ * Translated using Weblate (Turkish) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/ * Translated using Weblate (Persian) Currently translated at 83.3% (1819 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (Romanian) Currently translated at 33.1% (723 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ro/ * Translated using Weblate (Vietnamese) Currently translated at 61.5% (1342 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/vi/ * Translated using Weblate (German) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (Russian) Currently translated at 95.6% (2087 of 2182 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 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (Italian) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 80.7% (1763 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hant/ * Translated using Weblate (Dutch) Currently translated at 95.6% (2087 of 2182 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 88.6% (1935 of 2182 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 91.9% (2006 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * Translated using Weblate (Arabic) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Ukrainian) Currently translated at 95.5% (2085 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/ * Translated using Weblate (Finnish) Currently translated at 67.5% (1474 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fi/ * Translated using Weblate (Polish) Currently translated at 95.6% (2086 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Portuguese) Currently translated at 43.9% (959 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt/ * Translated using Weblate (Hebrew) Currently translated at 86.2% (1883 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/he/ * Translated using Weblate (Bulgarian) Currently translated at 79.1% (1726 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/ * Translated using Weblate (Turkish) Currently translated at 95.6% (2087 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/ * Translated using Weblate (Persian) Currently translated at 83.3% (1819 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (Romanian) Currently translated at 33.1% (723 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ro/ * Translated using Weblate (Vietnamese) Currently translated at 61.5% (1342 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/vi/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (2182 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 95.9% (2093 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Turkish) Currently translated at 96.1% (2099 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2182 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (German) Currently translated at 100.0% (2182 of 2182 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% (1918 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ * Translated using Weblate (Italian) Currently translated at 100.0% (2182 of 2182 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% (1918 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (2182 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Spanish) Currently translated at 98.4% (2148 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (2182 of 2182 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 99.0% (1900 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Arabic) Currently translated at 100.0% (2182 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Ukrainian) Currently translated at 100.0% (2182 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/ * Translated using Weblate (Ukrainian) Currently translated at 100.0% (2182 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/ * Translated using Weblate (Ukrainian) Currently translated at 100.0% (1918 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2182 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1918 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/ * Translated using Weblate (Vietnamese) Currently translated at 62.4% (1362 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/vi/ * Translated using Weblate (Spanish) Currently translated at 99.0% (2161 of 2182 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1918 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Spanish) Currently translated at 100.0% (2182 of 2182 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 99.5% (1910 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Spanish) Currently translated at 99.6% (1911 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (2178 of 2178 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% (1918 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2178 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (2178 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Ukrainian) Currently translated at 100.0% (2178 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/ * Translated using Weblate (Italian) Currently translated at 100.0% (2178 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (2178 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Korean) Currently translated at 66.6% (1452 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ko/ * Translated using Weblate (Vietnamese) Currently translated at 62.7% (1367 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/vi/ * Translated using Weblate (Indonesian) Currently translated at 59.3% (1293 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/id/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1918 of 1918 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 99.9% (2177 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Czech) Currently translated at 91.9% (2002 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * Translated using Weblate (Vietnamese) Currently translated at 62.9% (1372 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/vi/ * Translated using Weblate (Vietnamese) Currently translated at 63.6% (1387 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/vi/ * Translated using Weblate (German) Currently translated at 100.0% (2178 of 2178 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (Japanese) Currently translated at 62.5% (1199 of 1918 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/ * fix/process localizations --------- Co-authored-by: Anonymous Co-authored-by: 大王叫我来巡山 Co-authored-by: M1K4 Co-authored-by: Abdullah Koyuncu Co-authored-by: summoner001 Co-authored-by: mlanp Co-authored-by: Random Co-authored-by: No name Co-authored-by: jonnysemon Co-authored-by: Max Co-authored-by: Bezruchenko Simon Co-authored-by: tuananh-ng <158744840+tuananh-ng@users.noreply.github.com> Co-authored-by: Ghost of Sparta Co-authored-by: Максим Горпиніч Co-authored-by: translatorforkr Co-authored-by: Rafi Co-authored-by: zenobit Co-authored-by: Miyu Sakatsuki --- .../bg.xcloc/Localized Contents/bg.xliff | 28 ++ .../cs.xcloc/Localized Contents/cs.xliff | 28 ++ .../de.xcloc/Localized Contents/de.xliff | 131 +++++ .../en.xcloc/Localized Contents/en.xliff | 35 ++ .../es.xcloc/Localized Contents/es.xliff | 148 +++++- .../fi.xcloc/Localized Contents/fi.xliff | 28 ++ .../fr.xcloc/Localized Contents/fr.xliff | 28 ++ .../hu.xcloc/Localized Contents/hu.xliff | 165 +++++- .../it.xcloc/Localized Contents/it.xliff | 131 +++++ .../ja.xcloc/Localized Contents/ja.xliff | 50 ++ .../nl.xcloc/Localized Contents/nl.xliff | 131 +++++ .../pl.xcloc/Localized Contents/pl.xliff | 28 ++ .../ru.xcloc/Localized Contents/ru.xliff | 28 ++ .../th.xcloc/Localized Contents/th.xliff | 28 ++ .../tr.xcloc/Localized Contents/tr.xliff | 28 ++ .../uk.xcloc/Localized Contents/uk.xliff | 195 +++++++ .../Localized Contents/zh-Hans.xliff | 28 ++ .../SimpleX NSE/de.lproj/Localizable.strings | 20 +- .../SimpleX NSE/es.lproj/Localizable.strings | 20 +- .../SimpleX NSE/hu.lproj/Localizable.strings | 20 +- .../SimpleX NSE/it.lproj/Localizable.strings | 20 +- .../SimpleX NSE/nl.lproj/Localizable.strings | 20 +- .../SimpleX NSE/uk.lproj/Localizable.strings | 20 +- apps/ios/de.lproj/Localizable.strings | 291 +++++++++++ apps/ios/es.lproj/Localizable.strings | 310 +++++++++++- apps/ios/hu.lproj/Localizable.strings | 325 +++++++++++- apps/ios/it.lproj/Localizable.strings | 291 +++++++++++ apps/ios/ja.lproj/Localizable.strings | 66 +++ apps/ios/nl.lproj/Localizable.strings | 291 +++++++++++ apps/ios/uk.lproj/Localizable.strings | 474 ++++++++++++++++++ .../commonMain/resources/MR/ar/strings.xml | 112 ++++- .../commonMain/resources/MR/base/strings.xml | 1 - .../commonMain/resources/MR/bg/strings.xml | 3 +- .../commonMain/resources/MR/cs/strings.xml | 5 +- .../commonMain/resources/MR/de/strings.xml | 103 +++- .../commonMain/resources/MR/es/strings.xml | 103 +++- .../commonMain/resources/MR/fa/strings.xml | 3 +- .../commonMain/resources/MR/fi/strings.xml | 3 +- .../commonMain/resources/MR/fr/strings.xml | 3 +- .../commonMain/resources/MR/hu/strings.xml | 205 +++++--- .../commonMain/resources/MR/in/strings.xml | 17 + .../commonMain/resources/MR/it/strings.xml | 100 +++- .../commonMain/resources/MR/iw/strings.xml | 3 +- .../commonMain/resources/MR/ja/strings.xml | 3 +- .../commonMain/resources/MR/ko/strings.xml | 52 +- .../commonMain/resources/MR/nl/strings.xml | 99 +++- .../commonMain/resources/MR/pl/strings.xml | 3 +- .../commonMain/resources/MR/pt/strings.xml | 3 +- .../commonMain/resources/MR/ro/strings.xml | 3 +- .../commonMain/resources/MR/ru/strings.xml | 3 +- .../commonMain/resources/MR/tr/strings.xml | 14 +- .../commonMain/resources/MR/uk/strings.xml | 126 ++++- .../commonMain/resources/MR/vi/strings.xml | 52 +- .../resources/MR/zh-rCN/strings.xml | 100 +++- .../resources/MR/zh-rTW/strings.xml | 3 +- 55 files changed, 4293 insertions(+), 235 deletions(-) diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index 2964742c85..f1e9ee0f39 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -618,6 +618,10 @@ Добавете адрес към вашия профил, така че вашите контакти да могат да го споделят с други хора. Актуализацията на профила ще бъде изпратена до вашите контакти. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Добави профил @@ -633,6 +637,10 @@ Добави сървъри чрез сканиране на QR кодове. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Добави към друго устройство @@ -643,6 +651,10 @@ Добави съобщение при посрещане No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1183,6 +1195,10 @@ Български, финландски, тайландски и украински - благодарение на потребителите и [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Чрез чат профил (по подразбиране) или [чрез връзка](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА). @@ -1318,6 +1334,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors No comment provided by engineer. @@ -7590,6 +7614,10 @@ To connect, please ask your contact to create another connection link and check Вече сте вече свързани с %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Вече се свързвате с %@. 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 bf9436afe3..a4bff0f321 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -600,6 +600,10 @@ 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 friends + No comment provided by engineer. + Add profile Přidat profil @@ -615,6 +619,10 @@ Přidejte servery skenováním QR kódů. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Přidat do jiného zařízení @@ -625,6 +633,10 @@ Přidat uvítací zprávu No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1145,6 +1157,10 @@ Bulharský, finský, thajský a ukrajinský - díky uživatelům a [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Podle chat profilu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1277,6 +1293,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors No comment provided by engineer. @@ -7338,6 +7362,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu Již jste připojeni k %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 6a92589851..3770207e39 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -114,10 +114,12 @@ %@ server + %@ Server No comment provided by engineer. %@ servers + %@ Server No comment provided by engineer. @@ -382,6 +384,7 @@ **Scan / Paste link**: to connect via a link you received. + **Link scannen / einfügen**: Um eine Verbindung über den Link herzustellen, den Sie erhalten haben. No comment provided by engineer. @@ -492,10 +495,12 @@ 1-time link + Einmal-Link No comment provided by engineer. 1-time link can be used *with one contact only* - share in person or via any messenger. + Ein Einmal-Link kann *nur mit einem Kontakt* genutzt werden - teilen Sie in nur persönlich oder über einen beliebigen Messenger. No comment provided by engineer. @@ -586,6 +591,7 @@ Accept conditions + Nutzungsbedingungen akzeptieren No comment provided by engineer. @@ -606,6 +612,7 @@ Accepted conditions + Akzeptierte Nutzungsbedingungen No comment provided by engineer. @@ -628,6 +635,10 @@ Fügen Sie die Adresse Ihrem Profil hinzu, damit Ihre Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Profil hinzufügen @@ -643,6 +654,10 @@ Fügen Sie Server durch Scannen der QR Codes hinzu. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Einem anderen Gerät hinzufügen @@ -653,12 +668,18 @@ Begrüßungsmeldung hinzufügen No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers + Medien- und Dateiserver hinzugefügt No comment provided by engineer. Added message servers + Nachrichtenserver hinzugefügt No comment provided by engineer. @@ -688,10 +709,12 @@ Address or 1-time link? + Adress- oder Einmal-Link? No comment provided by engineer. Address settings + Adress-Einstellungen No comment provided by engineer. @@ -741,6 +764,7 @@ All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages. + Alle Nachrichten und Dateien werden **Ende-zu-Ende verschlüsselt** versendet - in Direkt-Nachrichten mit Post-Quantum-Security. No comment provided by engineer. @@ -1218,6 +1242,10 @@ Bulgarisch, Finnisch, Thailändisch und Ukrainisch - Dank der Nutzer und [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1357,8 +1385,17 @@ Change user profiles + Chat-Profile wechseln authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Chat-Farben @@ -1441,10 +1478,12 @@ Check messages every 20 min. + Alle 20min Nachrichten überprüfen. No comment provided by engineer. Check messages when allowed. + Wenn es erlaubt ist, Nachrichten überprüfen. No comment provided by engineer. @@ -1539,38 +1578,47 @@ Conditions accepted on: %@. + Die Nutzungsbedingungen wurden akzeptiert am: %@. No comment provided by engineer. Conditions are accepted for the operator(s): **%@**. + Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**. No comment provided by engineer. Conditions are already accepted for following operator(s): **%@**. + Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**. No comment provided by engineer. Conditions of use + Nutzungsbedingungen No comment provided by engineer. Conditions will be accepted for enabled operators after 30 days. + Die Nutzungsbedingungen der aktivierten Betreiber werden nach 30 Tagen akzeptiert. No comment provided by engineer. Conditions will be accepted for operator(s): **%@**. + Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**. No comment provided by engineer. Conditions will be accepted for the operator(s): **%@**. + Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**. No comment provided by engineer. Conditions will be accepted on: %@. + Die Nutzungsbedingungen werden akzeptiert am: %@. No comment provided by engineer. Conditions will be automatically accepted for enabled operators on: %@. + Die Nutzungsbedingungen der aktivierten Betreiber werden automatisch akzeptiert am: %@. No comment provided by engineer. @@ -1769,6 +1817,7 @@ Das ist Ihr eigener Einmal-Link! Connection security + Verbindungs-Sicherheit No comment provided by engineer. @@ -1888,6 +1937,7 @@ Das ist Ihr eigener Einmal-Link! Create 1-time link + Einmal-Link erstellen No comment provided by engineer. @@ -1977,6 +2027,7 @@ Das ist Ihr eigener Einmal-Link! Current conditions text couldn't be loaded, you can review conditions via this link: + Der Text der aktuellen Nutzungsbedingungen konnte nicht geladen werden. Sie können die Nutzungsbedingungen unter diesem Link einsehen: No comment provided by engineer. @@ -2346,6 +2397,7 @@ Das ist Ihr eigener Einmal-Link! Delivered even when Apple drops them. + Auslieferung, selbst wenn Apple sie löscht. No comment provided by engineer. @@ -2631,6 +2683,7 @@ Das ist Ihr eigener Einmal-Link! E2E encrypted notifications. + E2E-verschlüsselte Benachrichtigungen. No comment provided by engineer. @@ -2655,6 +2708,7 @@ Das ist Ihr eigener Einmal-Link! Enable Flux + Flux aktivieren No comment provided by engineer. @@ -2864,6 +2918,7 @@ Das ist Ihr eigener Einmal-Link! Error accepting conditions + Fehler beim Akzeptieren der Nutzungsbedingungen alert title @@ -2878,6 +2933,7 @@ Das ist Ihr eigener Einmal-Link! Error adding server + Fehler beim Hinzufügen des Servers alert title @@ -3022,6 +3078,7 @@ Das ist Ihr eigener Einmal-Link! Error loading servers + Fehler beim Laden der Server alert title @@ -3081,6 +3138,7 @@ Das ist Ihr eigener Einmal-Link! Error saving servers + Fehler beim Speichern der Server alert title @@ -3155,6 +3213,7 @@ Das ist Ihr eigener Einmal-Link! Error updating server + Fehler beim Aktualisieren des Servers alert title @@ -3204,6 +3263,7 @@ Das ist Ihr eigener Einmal-Link! Errors in servers configuration. + Fehler in der Server-Konfiguration. servers error @@ -3410,6 +3470,7 @@ Das ist Ihr eigener Einmal-Link! For chat profile %@: + Für das Chat-Profil %@: servers error @@ -3419,14 +3480,17 @@ Das ist Ihr eigener Einmal-Link! For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. + Wenn Ihr Kontakt beispielsweise Nachrichten über einen SimpleX-Chatserver empfängt, wird Ihre App diese über einen der Server von Flux versenden. No comment provided by engineer. For private routing + Für privates Routing No comment provided by engineer. For social media + Für soziale Medien No comment provided by engineer. @@ -3740,10 +3804,12 @@ Fehler: %2$@ How it affects privacy + Wie es die Privatsphäre beeinflusst No comment provided by engineer. How it helps privacy + Wie es die Privatsphäre schützt No comment provided by engineer. @@ -4565,6 +4631,7 @@ Das ist Ihr Link für die Gruppe %@! More reliable notifications + Zuverlässigere Benachrichtigungen No comment provided by engineer. @@ -4604,6 +4671,7 @@ Das ist Ihr Link für die Gruppe %@! Network decentralization + Dezentralisiertes Netzwerk No comment provided by engineer. @@ -4618,6 +4686,7 @@ Das ist Ihr Link für die Gruppe %@! Network operator + Netzwerk-Betreiber No comment provided by engineer. @@ -4677,6 +4746,7 @@ Das ist Ihr Link für die Gruppe %@! New events + Neue Ereignisse notification @@ -4706,6 +4776,7 @@ Das ist Ihr Link für die Gruppe %@! New server + Neuer Server No comment provided by engineer. @@ -4765,10 +4836,12 @@ Das ist Ihr Link für die Gruppe %@! No media & file servers. + Keine Medien- und Dateiserver. servers error No message servers. + Keine Nachrichten-Server. servers error @@ -4803,18 +4876,22 @@ Das ist Ihr Link für die Gruppe %@! No servers for private message routing. + Keine Server für privates Nachrichten-Routing. servers error No servers to receive files. + Keine Server für den Empfang von Dateien. servers error No servers to receive messages. + Keine Server für den Empfang von Nachrichten. servers error No servers to send files. + Keine Server für das Versenden von Dateien. servers error @@ -4849,6 +4926,7 @@ Das ist Ihr Link für die Gruppe %@! Notifications privacy + Datenschutz für Benachrichtigungen No comment provided by engineer. @@ -4991,6 +5069,7 @@ Dies erfordert die Aktivierung eines VPNs. Open changes + Änderungen öffnen No comment provided by engineer. @@ -5005,6 +5084,7 @@ Dies erfordert die Aktivierung eines VPNs. Open conditions + Nutzungsbedingungen öffnen No comment provided by engineer. @@ -5024,10 +5104,12 @@ Dies erfordert die Aktivierung eines VPNs. Operator + Betreiber No comment provided by engineer. Operator server + Betreiber-Server alert title @@ -5056,6 +5138,7 @@ Dies erfordert die Aktivierung eines VPNs. Or to share privately + Oder zum privaten Teilen No comment provided by engineer. @@ -5276,6 +5359,7 @@ Fehler: %@ Preset servers + Voreingestellte Server No comment provided by engineer. @@ -5452,6 +5536,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Push Notifications + Push-Benachrichtigungen No comment provided by engineer. @@ -5827,10 +5912,12 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Review conditions + Nutzungsbedingungen einsehen No comment provided by engineer. Review later + Später einsehen No comment provided by engineer. @@ -5880,10 +5967,12 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Same conditions will apply to operator **%@**. + Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**. No comment provided by engineer. Same conditions will apply to operator(s): **%@**. + Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**. No comment provided by engineer. @@ -6289,6 +6378,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Server added to operator %@. + Der Server wurde dem Betreiber %@ hinzugefügt. alert message @@ -6308,14 +6398,17 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Server operator changed. + Der Server-Betreiber wurde geändert. alert title Server operators + Server-Betreiber No comment provided by engineer. Server protocol changed. + Das Server-Protokoll wurde geändert. alert title @@ -6446,10 +6539,12 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Share 1-time link with a friend + Den Einmal-Einladungslink mit einem Freund teilen No comment provided by engineer. Share SimpleX address on social media. + Die SimpleX-Adresse auf sozialen Medien teilen. No comment provided by engineer. @@ -6459,6 +6554,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Share address publicly + Die Adresse öffentlich teilen No comment provided by engineer. @@ -6583,10 +6679,12 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. SimpleX address and 1-time links are safe to share via any messenger. + Die SimpleX-Adresse und Einmal-Links können sicher über beliebige Messenger geteilt werden. No comment provided by engineer. SimpleX address or 1-time link? + SimpleX-Adresse oder Einmal-Link? No comment provided by engineer. @@ -6682,6 +6780,8 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Some servers failed the test: %@ + Einige Server haben den Test nicht bestanden: +%@ alert message @@ -6952,6 +7052,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro The app protects your privacy by using different operators in each conversation. + Durch Verwendung verschiedener Netzwerk-Betreiber für jede Unterhaltung schützt die App Ihre Privatsphäre. No comment provided by engineer. @@ -6971,6 +7072,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro The connection reached the limit of undelivered messages, your contact may be offline. + Diese Verbindung hat das Limit der nicht ausgelieferten Nachrichten erreicht. Ihr Kontakt ist möglicherweise offline. No comment provided by engineer. @@ -7035,6 +7137,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro The second preset operator in the app! + Der zweite voreingestellte Netzwerk-Betreiber in der App! No comment provided by engineer. @@ -7054,6 +7157,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro The servers for new files of your current chat profile **%@**. + Die Server Deines aktuellen Chat-Profils für neue Dateien **%@**. No comment provided by engineer. @@ -7073,6 +7177,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro These conditions will also apply for: **%@**. + Diese Nutzungsbedingungen gelten auch für: **%@**. No comment provided by engineer. @@ -7177,6 +7282,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro To protect against your link being replaced, you can compare contact security codes. + Zum Schutz vor dem Austausch Ihres Links können Sie die Sicherheitscodes Ihrer Kontakte vergleichen. No comment provided by engineer. @@ -7203,6 +7309,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt To receive + Für den Empfang No comment provided by engineer. @@ -7227,6 +7334,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt To send + Für das Senden No comment provided by engineer. @@ -7236,6 +7344,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt To use the servers of **%@**, accept conditions of use. + Um die Server von **%@** zu nutzen, müssen Sie dessen Nutzungsbedingungen akzeptieren. No comment provided by engineer. @@ -7330,6 +7439,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Undelivered messages + Nicht ausgelieferte Nachrichten No comment provided by engineer. @@ -7491,6 +7601,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Use %@ + Verwende %@ No comment provided by engineer. @@ -7520,10 +7631,12 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Use for files + Für Dateien verwenden No comment provided by engineer. Use for messages + Für Nachrichten verwenden No comment provided by engineer. @@ -7568,6 +7681,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Use servers + Verwende Server No comment provided by engineer. @@ -7662,6 +7776,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s View conditions + Nutzungsbedingungen anschauen No comment provided by engineer. @@ -7671,6 +7786,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s View updated conditions + Aktualisierte Nutzungsbedingungen anschauen No comment provided by engineer. @@ -7785,6 +7901,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + Wenn mehrere Netzwerk-Betreiber aktiviert sind, hat keiner von ihnen Metadaten, um zu erfahren, wer mit wem kommuniziert. No comment provided by engineer. @@ -7882,6 +7999,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Sie sind bereits mit %@ verbunden. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Sie sind bereits mit %@ verbunden. @@ -7946,10 +8067,12 @@ Verbindungsanfrage wiederholen? You can configure operators in Network & servers settings. + Sie können die Betreiber in den Netzwerk- und Servereinstellungen konfigurieren. No comment provided by engineer. You can configure servers via settings. + Sie können die Server über die Einstellungen konfigurieren. No comment provided by engineer. @@ -7994,6 +8117,7 @@ Verbindungsanfrage wiederholen? You can set connection name, to remember who the link was shared with. + Sie können einen Verbindungsnamen festlegen, um sich zu merken, mit wem der Link geteilt wurde. No comment provided by engineer. @@ -8295,6 +8419,7 @@ Verbindungsanfrage wiederholen? Your servers + Ihre Server No comment provided by engineer. @@ -8719,6 +8844,7 @@ Verbindungsanfrage wiederholen? for better metadata privacy. + für einen besseren Metadatenschutz. No comment provided by engineer. @@ -9350,22 +9476,27 @@ Zuletzt empfangene Nachricht: %2$@ %d new events + %d neue Ereignisse notification body From: %@ + Von: %@ notification body New events + Neue Ereignisse notification New messages + Neue Nachrichten notification New messages in %d chats + Neue Nachrichten in %d Chats notification body 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 09a63ab3c4..72ad43f136 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -635,6 +635,11 @@ Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts. No comment provided by engineer. + + Add friends + Add friends + No comment provided by engineer. + Add profile Add profile @@ -650,6 +655,11 @@ Add servers by scanning QR codes. No comment provided by engineer. + + Add team members + Add team members + No comment provided by engineer. + Add to another device Add to another device @@ -660,6 +670,11 @@ Add welcome message No comment provided by engineer. + + Add your team members to the conversations. + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers Added media & file servers @@ -1230,6 +1245,11 @@ Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1372,6 +1392,16 @@ Change user profiles authentication reason + + Chat already exists + Chat already exists + No comment provided by engineer. + + + Chat already exists! + Chat already exists! + No comment provided by engineer. + Chat colors Chat colors @@ -7977,6 +8007,11 @@ To connect, please ask your contact to create another connection link and check You are already connected to %@. No comment provided by engineer. + + You are already connected with %@. + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. You are already connecting to %@. 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 8d109187c2..cfffd783d9 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -114,10 +114,12 @@ %@ server + %@ servidor No comment provided by engineer. %@ servers + %@ servidores No comment provided by engineer. @@ -152,7 +154,7 @@ %d days - %d días + %d día(s) time interval @@ -177,37 +179,37 @@ %d hours - %d horas + %d hora(s) time interval %d messages not forwarded - %d mensajes no enviados + %d mensaje(s) no enviado(s) alert title %d min - %d minutos + %d minuto(s) time interval %d months - %d meses + %d mes(es) time interval %d sec - %d segundos + %d segundo(s) time interval %d skipped message(s) - %d mensaje(s) saltado(s + %d mensaje(s) omitido(s) integrity error chat item %d weeks - %d semanas + %d semana(s) time interval @@ -382,6 +384,7 @@ **Scan / Paste link**: to connect via a link you received. + **Escanear / Pegar enlace**: para conectar mediante un enlace recibido. No comment provided by engineer. @@ -492,10 +495,12 @@ 1-time link + Enlace de un uso No comment provided by engineer. 1-time link can be used *with one contact only* - share in person or via any messenger. + Los enlaces de un uso pueden ser usados *solamente con un contacto* - compártelos en persona o mediante cualquier aplicación de mensajería. No comment provided by engineer. @@ -586,6 +591,7 @@ Accept conditions + Aceptar condiciones No comment provided by engineer. @@ -606,6 +612,7 @@ Accepted conditions + Condiciones aceptadas No comment provided by engineer. @@ -628,6 +635,10 @@ Añade la dirección a tu perfil para que tus contactos puedan compartirla con otros. La actualización del perfil se enviará a tus contactos. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Añadir perfil @@ -643,6 +654,10 @@ Añadir servidores mediante el escaneo de códigos QR. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Añadir a otro dispositivo @@ -653,12 +668,18 @@ Añadir mensaje de bienvenida No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers + Servidores de archivos y multimedia añadidos No comment provided by engineer. Added message servers + Servidores de mensajes añadidos No comment provided by engineer. @@ -688,10 +709,12 @@ Address or 1-time link? + ¿Dirección o enlace de un uso? No comment provided by engineer. Address settings + Configuración de dirección No comment provided by engineer. @@ -741,6 +764,7 @@ All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages. + Todos los mensajes y archivos son enviados **cifrados de extremo a extremo** y con seguridad de cifrado postcuántico en mensajes directos. No comment provided by engineer. @@ -1218,6 +1242,10 @@ Búlgaro, Finlandés, Tailandés y Ucraniano - gracias a los usuarios y [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Mediante perfil (predeterminado) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1357,8 +1385,17 @@ Change user profiles + Cambiar perfil de usuario authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Colores del chat @@ -1441,10 +1478,12 @@ Check messages every 20 min. + Comprobar mensajes cada 20 min. No comment provided by engineer. Check messages when allowed. + Comprobar mensajes cuando se permita. No comment provided by engineer. @@ -1539,38 +1578,47 @@ Conditions accepted on: %@. + Condiciones aceptadas el: %@. No comment provided by engineer. Conditions are accepted for the operator(s): **%@**. + Las condiciones se han aceptado para el(los) operador(s): **%@**. No comment provided by engineer. Conditions are already accepted for following operator(s): **%@**. + Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**. No comment provided by engineer. Conditions of use + Condiciones de uso No comment provided by engineer. Conditions will be accepted for enabled operators after 30 days. + Las condiciones de los operadores habilitados serán aceptadas después de 30 días. No comment provided by engineer. Conditions will be accepted for operator(s): **%@**. + Las condiciones serán aceptadas para el/los operador(es): **%@**. No comment provided by engineer. Conditions will be accepted for the operator(s): **%@**. + Las condiciones serán aceptadas para el/los operador(es): **%@**. No comment provided by engineer. Conditions will be accepted on: %@. + Las condiciones serán aceptadas el: %@. No comment provided by engineer. Conditions will be automatically accepted for enabled operators on: %@. + Las condiciones serán aceptadas automáticamente para los operadores habilitados el: %@. No comment provided by engineer. @@ -1769,6 +1817,7 @@ This is your own one-time link! Connection security + Seguridad de conexión No comment provided by engineer. @@ -1888,6 +1937,7 @@ This is your own one-time link! Create 1-time link + Crear enlace de un uso No comment provided by engineer. @@ -1977,6 +2027,7 @@ This is your own one-time link! Current conditions text couldn't be loaded, you can review conditions via this link: + El texto con las condiciones actuales no se ha podido cargar, puedes revisar las condiciones en el siguiente enlace: No comment provided by engineer. @@ -2346,6 +2397,7 @@ This is your own one-time link! Delivered even when Apple drops them. + Entregados incluso cuando Apple los descarta. No comment provided by engineer. @@ -2631,6 +2683,7 @@ This is your own one-time link! E2E encrypted notifications. + Notificaciones cifradas E2E. No comment provided by engineer. @@ -2655,6 +2708,7 @@ This is your own one-time link! Enable Flux + Habilitar Flux No comment provided by engineer. @@ -2864,6 +2918,7 @@ This is your own one-time link! Error accepting conditions + Error al aceptar las condiciones alert title @@ -2878,6 +2933,7 @@ This is your own one-time link! Error adding server + Error al añadir servidor alert title @@ -3022,6 +3078,7 @@ This is your own one-time link! Error loading servers + Error al cargar servidores alert title @@ -3081,6 +3138,7 @@ This is your own one-time link! Error saving servers + Error al guardar servidores alert title @@ -3155,6 +3213,7 @@ This is your own one-time link! Error updating server + Error al actualizar el servidor alert title @@ -3204,6 +3263,7 @@ This is your own one-time link! Errors in servers configuration. + Error en la configuración del servidor. servers error @@ -3410,6 +3470,7 @@ This is your own one-time link! For chat profile %@: + Para el perfil de chat %@: servers error @@ -3419,14 +3480,17 @@ This is your own one-time link! For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. + Si por ejemplo tu contacto recibe los mensajes a través de un servidor de SimpleX Chat, tu aplicación los entregará a través de un servidor de Flux. No comment provided by engineer. For private routing + Para el enrutamiento privado No comment provided by engineer. For social media + Para redes sociales No comment provided by engineer. @@ -3740,10 +3804,12 @@ Error: %2$@ How it affects privacy + Cómo afecta a la privacidad No comment provided by engineer. How it helps privacy + Cómo ayuda a la privacidad No comment provided by engineer. @@ -4565,6 +4631,7 @@ This is your link for group %@! More reliable notifications + Notificaciones más fiables No comment provided by engineer. @@ -4604,6 +4671,7 @@ This is your link for group %@! Network decentralization + Descentralización de la red No comment provided by engineer. @@ -4618,6 +4686,7 @@ This is your link for group %@! Network operator + Operador de red No comment provided by engineer. @@ -4677,6 +4746,7 @@ This is your link for group %@! New events + Eventos nuevos notification @@ -4706,6 +4776,7 @@ This is your link for group %@! New server + Servidor nuevo No comment provided by engineer. @@ -4765,10 +4836,12 @@ This is your link for group %@! No media & file servers. + Ningún servidor de archivos y multimedia. servers error No message servers. + Ningún servidor de mensajes. servers error @@ -4793,6 +4866,7 @@ This is your link for group %@! No push server + Ningún servidor push No comment provided by engineer. @@ -4802,18 +4876,22 @@ This is your link for group %@! No servers for private message routing. + Ningún servidor para enrutamiento privado. servers error No servers to receive files. + Ningún servidor para recibir archivos. servers error No servers to receive messages. + Ningún servidor para recibir mensajes. servers error No servers to send files. + Ningún servidor para enviar archivos. servers error @@ -4848,6 +4926,7 @@ This is your link for group %@! Notifications privacy + Privacidad en las notificaciones No comment provided by engineer. @@ -4990,6 +5069,7 @@ Requiere activación de la VPN. Open changes + Abrir cambios No comment provided by engineer. @@ -5004,6 +5084,7 @@ Requiere activación de la VPN. Open conditions + Abrir condiciones No comment provided by engineer. @@ -5023,10 +5104,12 @@ Requiere activación de la VPN. Operator + Operador No comment provided by engineer. Operator server + Servidor del operador alert title @@ -5055,6 +5138,7 @@ Requiere activación de la VPN. Or to share privately + O para compartir en privado No comment provided by engineer. @@ -5275,6 +5359,7 @@ Error: %@ Preset servers + Servidores predefinidos No comment provided by engineer. @@ -5451,6 +5536,7 @@ Actívalo en ajustes de *Servidores y Redes*. Push Notifications + Notificaciones push No comment provided by engineer. @@ -5826,10 +5912,12 @@ Actívalo en ajustes de *Servidores y Redes*. Review conditions + Revisar condiciones No comment provided by engineer. Review later + Revisar más tarde No comment provided by engineer. @@ -5879,10 +5967,12 @@ Actívalo en ajustes de *Servidores y Redes*. Same conditions will apply to operator **%@**. + Las mismas condiciones se aplicarán al operador **%@**. No comment provided by engineer. Same conditions will apply to operator(s): **%@**. + Las mismas condiciones se aplicarán a el/los operador(es) **%@**. No comment provided by engineer. @@ -6288,6 +6378,7 @@ Actívalo en ajustes de *Servidores y Redes*. Server added to operator %@. + Servidor añadido al operador %@. alert message @@ -6307,14 +6398,17 @@ Actívalo en ajustes de *Servidores y Redes*. Server operator changed. + El operador del servidor ha cambiado. alert title Server operators + Operadores de servidores No comment provided by engineer. Server protocol changed. + El protocolo del servidor ha cambiado. alert title @@ -6445,10 +6539,12 @@ Actívalo en ajustes de *Servidores y Redes*. Share 1-time link with a friend + Compartir enlace de un uso con un amigo No comment provided by engineer. Share SimpleX address on social media. + Compartir dirección SimpleX en redes sociales. No comment provided by engineer. @@ -6458,6 +6554,7 @@ Actívalo en ajustes de *Servidores y Redes*. Share address publicly + Campartir dirección públicamente No comment provided by engineer. @@ -6582,10 +6679,12 @@ Actívalo en ajustes de *Servidores y Redes*. SimpleX address and 1-time links are safe to share via any messenger. + Compartir enlaces de un uso y direcciones SimpleX es seguro a través de cualquier medio. No comment provided by engineer. SimpleX address or 1-time link? + Dirección SimpleX o enlace de un uso? No comment provided by engineer. @@ -6681,6 +6780,8 @@ Actívalo en ajustes de *Servidores y Redes*. Some servers failed the test: %@ + Algunos servidores no han superado la prueba: +%@ alert message @@ -6951,6 +7052,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. The app protects your privacy by using different operators in each conversation. + La aplicación protege tu privacidad mediante el uso de diferentes operadores en cada conversación. No comment provided by engineer. @@ -6970,6 +7072,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. The connection reached the limit of undelivered messages, your contact may be offline. + La conexión ha alcanzado el límite de mensajes no entregados. es posible que tu contacto esté desconectado. No comment provided by engineer. @@ -7034,6 +7137,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. The second preset operator in the app! + El segundo operador predefinido! No comment provided by engineer. @@ -7053,6 +7157,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. The servers for new files of your current chat profile **%@**. + Los servidores para archivos nuevos en tu perfil actual **%@**. No comment provided by engineer. @@ -7072,6 +7177,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. These conditions will also apply for: **%@**. + Estas condiciones también se aplican para: **%@**. No comment provided by engineer. @@ -7176,6 +7282,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. To protect against your link being replaced, you can compare contact security codes. + Para protegerte contra una sustitución del enlace, puedes comparar los códigos de seguridad con tu contacto. No comment provided by engineer. @@ -7202,6 +7309,7 @@ Se te pedirá que completes la autenticación antes de activar esta función. To receive + Para recibir No comment provided by engineer. @@ -7226,6 +7334,7 @@ Se te pedirá que completes la autenticación antes de activar esta función. To send + Para enviar No comment provided by engineer. @@ -7235,6 +7344,7 @@ Se te pedirá que completes la autenticación antes de activar esta función. To use the servers of **%@**, accept conditions of use. + Para usar los servidores de **%@**, acepta las condiciones de uso. No comment provided by engineer. @@ -7329,6 +7439,7 @@ Se te pedirá que completes la autenticación antes de activar esta función. Undelivered messages + Mensajes no entregados No comment provided by engineer. @@ -7490,6 +7601,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Use %@ + Usar %@ No comment provided by engineer. @@ -7519,10 +7631,12 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Use for files + Usar para archivos No comment provided by engineer. Use for messages + Usar para mensajes No comment provided by engineer. @@ -7567,6 +7681,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Use servers + Usar servidores No comment provided by engineer. @@ -7661,6 +7776,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión View conditions + Ver condiciones No comment provided by engineer. @@ -7670,6 +7786,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión View updated conditions + Ver condiciones actualizadas No comment provided by engineer. @@ -7784,6 +7901,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + Cuando está habilitado más de un operador, ninguno dispone de los metadatos para conocer quién se comunica con quién. No comment provided by engineer. @@ -7881,6 +7999,10 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Ya estás conectado a %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Ya estás conectando con %@. @@ -7945,10 +8067,12 @@ Repeat join request? You can configure operators in Network & servers settings. + Puedes configurar los operadores desde Servidores y Redes. No comment provided by engineer. You can configure servers via settings. + Puedes configurar los servidores a través de su configuración. No comment provided by engineer. @@ -7993,6 +8117,7 @@ Repeat join request? You can set connection name, to remember who the link was shared with. + Puedes añadir un nombre a la conexión para recordar a quién corresponde. No comment provided by engineer. @@ -8294,6 +8419,7 @@ Repeat connection request? Your servers + Tus servidores No comment provided by engineer. @@ -8718,6 +8844,7 @@ Repeat connection request? for better metadata privacy. + para mayor privacidad de los metadatos. No comment provided by engineer. @@ -9349,22 +9476,27 @@ last received msg: %2$@ %d new events + %d evento(s) nuevo(s) notification body From: %@ + De: %@ notification body New events + Eventos nuevos notification New messages + Mensajes nuevos notification New messages in %d chats + Mensajes nuevos en %d chat(s) notification body diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index 325732cb8d..763b502ddb 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -595,6 +595,10 @@ Lisää osoite profiiliisi, jotta kontaktisi voivat jakaa sen muiden kanssa. Profiilipäivitys lähetetään kontakteillesi. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Lisää profiili @@ -610,6 +614,10 @@ Lisää palvelimia skannaamalla QR-koodeja. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Lisää toiseen laitteeseen @@ -620,6 +628,10 @@ Lisää tervetuloviesti No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1138,6 +1150,10 @@ Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Chat-profiilin mukaan (oletus) tai [yhteyden mukaan](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1270,6 +1286,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors No comment provided by engineer. @@ -7323,6 +7347,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja Olet jo muodostanut yhteyden %@:n kanssa. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 56c57a2237..d91ce3c106 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -628,6 +628,10 @@ Ajoutez une adresse à votre profil, afin que vos contacts puissent la partager avec d'autres personnes. La mise à jour du profil sera envoyée à vos contacts. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Ajouter un profil @@ -643,6 +647,10 @@ Ajoutez des serveurs en scannant des codes QR. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Ajouter à un autre appareil @@ -653,6 +661,10 @@ Ajouter un message d'accueil No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1218,6 +1230,10 @@ Bulgare, finnois, thaïlandais et ukrainien - grâce aux utilisateurs et à [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat) ! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Par profil de chat (par défaut) ou [par connexion](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1359,6 +1375,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Couleurs de chat @@ -7882,6 +7906,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Vous êtes déjà connecté·e à %@ via ce lien. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Vous êtes déjà en train de vous connecter à %@. diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff index b8b760b5a0..44750dfbb2 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -44,7 +44,7 @@ #secret# - #titkos# + #titok# No comment provided by engineer. @@ -114,10 +114,12 @@ %@ server + %@ kiszolgáló No comment provided by engineer. %@ servers + %@ kiszolgáló No comment provided by engineer. @@ -267,7 +269,7 @@ %lld new interface languages - %lld új nyelvi csomag + %lld új kezelőfelületi nyelv No comment provided by engineer. @@ -382,6 +384,7 @@ **Scan / Paste link**: to connect via a link you received. + **Hivatkozás beolvasása / beillesztése**: egy kapott hivatkozáson keresztüli kapcsolódáshoz. No comment provided by engineer. @@ -492,10 +495,12 @@ 1-time link + Egyszer használható meghívó-hivatkozás No comment provided by engineer. 1-time link can be used *with one contact only* - share in person or via any messenger. + Az egyszer használható meghívó-hivatkozás csak *egyetlen ismerőssel használható* - személyesen vagy bármilyen üzenetküldőn keresztül megosztható. No comment provided by engineer. @@ -586,6 +591,7 @@ Accept conditions + Feltételek elfogadása No comment provided by engineer. @@ -606,6 +612,7 @@ Accepted conditions + Elfogadott feltételek No comment provided by engineer. @@ -628,6 +635,10 @@ Cím hozzáadása a profilhoz, hogy az ismerősei megoszthassák másokkal. A profilfrissítés elküldésre kerül az ismerősei számára. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Profil hozzáadása @@ -643,6 +654,10 @@ Kiszolgáló hozzáadása QR-kód beolvasásával. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Hozzáadás egy másik eszközhöz @@ -653,12 +668,18 @@ Üdvözlőüzenet hozzáadása No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers + Hozzáadott média- és fájlkiszolgálók No comment provided by engineer. Added message servers + Hozzáadott üzenetkiszolgálók No comment provided by engineer. @@ -688,10 +709,12 @@ Address or 1-time link? + Cím vagy egyszer használható meghívó-hivatkozás? No comment provided by engineer. Address settings + Címbeállítások No comment provided by engineer. @@ -741,6 +764,7 @@ All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages. + Az összes üzenetet és fájlt **végpontok közötti titkosítással** küldi, a közvetlen üzenetekben pedig kvantumrezisztens biztonsággal. No comment provided by engineer. @@ -1218,6 +1242,10 @@ Bolgár, finn, thai és ukrán – köszönet a felhasználóknak és a [Weblate-nek](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). A csevegési profillal (alapértelmezett), vagy a [kapcsolattal] (https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BÉTA). @@ -1357,8 +1385,17 @@ Change user profiles + Felhasználói profilok megváltoztatása authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Csevegés színei @@ -1441,10 +1478,12 @@ Check messages every 20 min. + Üzenetek ellenőrzése 20 percenként. No comment provided by engineer. Check messages when allowed. + Üzenetek ellenőrzése, amikor engedélyezett. No comment provided by engineer. @@ -1539,38 +1578,47 @@ Conditions accepted on: %@. + Feltételek elfogadva ekkor: %@. No comment provided by engineer. Conditions are accepted for the operator(s): **%@**. + A következő üzemeltető(k) számára elfogadott feltételek: **%@**. No comment provided by engineer. Conditions are already accepted for following operator(s): **%@**. + A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**. No comment provided by engineer. Conditions of use + Használati feltételek No comment provided by engineer. Conditions will be accepted for enabled operators after 30 days. + A feltételek 30 nap elteltével lesznek elfogadva az engedélyezett üzemeltető számára. No comment provided by engineer. Conditions will be accepted for operator(s): **%@**. + A feltételek el lesznek fogadva a következő üzemeltető(k) számára: **%@**. No comment provided by engineer. Conditions will be accepted for the operator(s): **%@**. + A feltételek el lesznek fogadva a következő üzemeltető(k) számára: **%@**. No comment provided by engineer. Conditions will be accepted on: %@. + A feltételek ekkor lesznek elfogadva: %@. No comment provided by engineer. Conditions will be automatically accepted for enabled operators on: %@. + A feltételek automatikusan elfogadásra kerülnek az engedélyezett üzemeltető számára: %@. No comment provided by engineer. @@ -1669,7 +1717,7 @@ Ez az Ön SimpleX-címe! Connect to yourself? This is your own one-time link! Kapcsolódás saját magához? -Ez az Ön egyszer használható hivatkozása! +Ez az Ön egyszer használható meghívó-hivatkozása! No comment provided by engineer. @@ -1684,7 +1732,7 @@ Ez az Ön egyszer használható hivatkozása! Connect via one-time link - Kapcsolódás egyszer használható hivatkozáson keresztül + Kapcsolódás egyszer használható meghívó-hivatkozáson keresztül No comment provided by engineer. @@ -1769,6 +1817,7 @@ Ez az Ön egyszer használható hivatkozása! Connection security + Kapcsolatbiztonság No comment provided by engineer. @@ -1888,6 +1937,7 @@ Ez az Ön egyszer használható hivatkozása! Create 1-time link + Egyszer használható meghívó-hivatkozás létrehozása No comment provided by engineer. @@ -1977,6 +2027,7 @@ Ez az Ön egyszer használható hivatkozása! Current conditions text couldn't be loaded, you can review conditions via this link: + A jelenlegi feltételek szövegét nem lehetett betölteni, a feltételeket ezen a hivatkozáson keresztül vizsgálhatja felül: No comment provided by engineer. @@ -2346,6 +2397,7 @@ Ez az Ön egyszer használható hivatkozása! Delivered even when Apple drops them. + Kézbesítés akkor is, amikor az Apple eldobja őket. No comment provided by engineer. @@ -2631,6 +2683,7 @@ Ez az Ön egyszer használható hivatkozása! E2E encrypted notifications. + Végpontok közötti titkosított értesítések. No comment provided by engineer. @@ -2655,6 +2708,7 @@ Ez az Ön egyszer használható hivatkozása! Enable Flux + Flux engedélyezése No comment provided by engineer. @@ -2864,6 +2918,7 @@ Ez az Ön egyszer használható hivatkozása! Error accepting conditions + Hiba a feltételek elfogadásakor alert title @@ -2878,6 +2933,7 @@ Ez az Ön egyszer használható hivatkozása! Error adding server + Hiba a kiszolgáló hozzáadásakor alert title @@ -3022,6 +3078,7 @@ Ez az Ön egyszer használható hivatkozása! Error loading servers + Hiba a kiszolgálók betöltésekor alert title @@ -3081,6 +3138,7 @@ Ez az Ön egyszer használható hivatkozása! Error saving servers + Hiba a kiszolgálók mentésekor alert title @@ -3155,6 +3213,7 @@ Ez az Ön egyszer használható hivatkozása! Error updating server + Hiba a kiszolgáló frissítésekor alert title @@ -3204,6 +3263,7 @@ Ez az Ön egyszer használható hivatkozása! Errors in servers configuration. + Hibák a kiszolgálók konfigurációjában. servers error @@ -3410,6 +3470,7 @@ Ez az Ön egyszer használható hivatkozása! For chat profile %@: + A(z) %@ nevű csevegési profilhoz: servers error @@ -3419,14 +3480,17 @@ Ez az Ön egyszer használható hivatkozása! For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. + Ha például az ismerőse a SimpleX Chat kiszolgálón keresztül fogadja az üzeneteket, az Ön alkalmazása a Flux egyik kiszolgálóját használja a kézbesítéshez. No comment provided by engineer. For private routing + A privát útválasztáshoz No comment provided by engineer. For social media + A közösségi médiához No comment provided by engineer. @@ -3740,10 +3804,12 @@ Hiba: %2$@ How it affects privacy + Hogyan érinti az adatvédelmet No comment provided by engineer. How it helps privacy + Hogyan segíti az adatvédelmet No comment provided by engineer. @@ -3972,7 +4038,7 @@ További fejlesztések hamarosan! Interface - Felület + Kezelőfelület No comment provided by engineer. @@ -4062,7 +4128,7 @@ További fejlesztések hamarosan! It allows having many anonymous connections without any shared data between them in a single chat profile. - Lehetővé teszi, hogy egyetlen csevegőprofilon belül több anonim kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük. + Lehetővé teszi, hogy egyetlen csevegőprofilon belül több névtelen kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük. No comment provided by engineer. @@ -4565,6 +4631,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! More reliable notifications + Megbízhatóbb értesítések No comment provided by engineer. @@ -4604,6 +4671,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Network decentralization + Hálózati decentralizáció No comment provided by engineer. @@ -4618,6 +4686,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Network operator + Hálózati üzemeltető No comment provided by engineer. @@ -4677,6 +4746,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! New events + Új események notification @@ -4706,6 +4776,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! New server + Új kiszolgáló No comment provided by engineer. @@ -4765,10 +4836,12 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! No media & file servers. + Nincsenek média- és fájlkiszolgálók. servers error No message servers. + Nincsenek üzenet-kiszolgálók. servers error @@ -4803,18 +4876,22 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! No servers for private message routing. + Nincsenek kiszolgálók a privát üzenet-útválasztáshoz. servers error No servers to receive files. + Nincsenek fájlfogadó-kiszolgálók. servers error No servers to receive messages. + Nincsenek üzenetfogadó-kiszolgálók. servers error No servers to send files. + Nincsenek fájlküldő-kiszolgálók. servers error @@ -4849,6 +4926,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Notifications privacy + Értesítési adatvédelem No comment provided by engineer. @@ -4991,6 +5069,7 @@ VPN engedélyezése szükséges. Open changes + Változások megnyitása No comment provided by engineer. @@ -5005,6 +5084,7 @@ VPN engedélyezése szükséges. Open conditions + Feltételek megnyitása No comment provided by engineer. @@ -5024,10 +5104,12 @@ VPN engedélyezése szükséges. Operator + Üzemeltető No comment provided by engineer. Operator server + Kiszolgáló üzemeltető alert title @@ -5056,6 +5138,7 @@ VPN engedélyezése szükséges. Or to share privately + Vagy a privát megosztáshoz No comment provided by engineer. @@ -5276,6 +5359,7 @@ Hiba: %@ Preset servers + Előre beállított kiszolgálók No comment provided by engineer. @@ -5452,6 +5536,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Push Notifications + Push értesítések No comment provided by engineer. @@ -5827,10 +5912,12 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Review conditions + Feltételek felülvizsgálata No comment provided by engineer. Review later + Felülvizsgálat később No comment provided by engineer. @@ -5880,10 +5967,12 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Same conditions will apply to operator **%@**. + Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**. No comment provided by engineer. Same conditions will apply to operator(s): **%@**. + Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**. No comment provided by engineer. @@ -6289,6 +6378,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Server added to operator %@. + Kiszolgáló hozzáadva a következő üzemeltetőhöz: %@. alert message @@ -6308,14 +6398,17 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Server operator changed. + A kiszolgáló üzemeltetője megváltozott. alert title Server operators + Kiszolgáló-üzemeltetők No comment provided by engineer. Server protocol changed. + A kiszolgáló-protokoll megváltozott. alert title @@ -6446,10 +6539,12 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Share 1-time link with a friend + Egyszer használható meghívó-hivatkozás megosztása egy baráttal No comment provided by engineer. Share SimpleX address on social media. + SimpleX-cím megosztása a közösségi médiában. No comment provided by engineer. @@ -6459,6 +6554,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Share address publicly + Cím nyilvános megosztása No comment provided by engineer. @@ -6583,10 +6679,12 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. SimpleX address and 1-time links are safe to share via any messenger. + A SimpleX-cím és az egyszer használható meghívó-hivatkozás biztonságosan megosztható bármilyen üzenetküldőn keresztül. No comment provided by engineer. SimpleX address or 1-time link? + SimpleX-cím vagy egyszer használható meghívó-hivatkozás? No comment provided by engineer. @@ -6621,12 +6719,12 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. SimpleX one-time invitation - Egyszer használható SimpleX-meghívó + Egyszer használható SimpleX-meghívó-hivatkozás simplex link type SimpleX protocols reviewed by Trail of Bits. - A SimpleX Chat biztonsága a Trail of Bits által lett újraauditálva. + A SimpleX Chat biztonsága a Trail of Bits által lett felülvizsgálva. No comment provided by engineer. @@ -6682,6 +6780,8 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Some servers failed the test: %@ + Néhány kiszolgáló megbukott a teszten: +%@ alert message @@ -6811,7 +6911,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Switch chat profile for 1-time invitations. - Csevegési profilváltás az egyszer használható meghívókhoz. + Csevegési profilváltás az egyszer használható meghívó-hivatkozásokhoz. No comment provided by engineer. @@ -6952,6 +7052,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. The app protects your privacy by using different operators in each conversation. + Az alkalmazás úgy védi az adatait, hogy minden egyes beszélgetésben más-más üzemeltetőket használ. No comment provided by engineer. @@ -6971,6 +7072,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. The connection reached the limit of undelivered messages, your contact may be offline. + A kapcsolat elérte a kézbesítetlen üzenetek számának határát, az Ön ismerőse lehet, hogy offline állapotban van. No comment provided by engineer. @@ -7035,6 +7137,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. The second preset operator in the app! + A második előre beállított üzemeltető az alkalmazásban! No comment provided by engineer. @@ -7054,6 +7157,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. The servers for new files of your current chat profile **%@**. + Az Ön jelenlegi **%@** nevű csevegőprofiljához tartozó új fájlok kiszolgálói. No comment provided by engineer. @@ -7073,6 +7177,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. These conditions will also apply for: **%@**. + Ezek a feltételek lesznek elfogadva a következő számára is: **%@**. No comment provided by engineer. @@ -7137,7 +7242,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. This is your own one-time link! - Ez az Ön egyszer használható hivatkozása! + Ez az Ön egyszer használható meghívó-hivatkozása! No comment provided by engineer. @@ -7177,6 +7282,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. To protect against your link being replaced, you can compare contact security codes. + A hivatkozás cseréje elleni védelem érdekében összehasonlíthatja a biztonsági kódokat az ismerősével. No comment provided by engineer. @@ -7203,6 +7309,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll To receive + A fogadáshoz No comment provided by engineer. @@ -7227,6 +7334,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll To send + A küldéshez No comment provided by engineer. @@ -7236,6 +7344,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll To use the servers of **%@**, accept conditions of use. + A(z) **%@** kiszolgálóinak használatához fogadja el a használati feltételeket. No comment provided by engineer. @@ -7330,6 +7439,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll Undelivered messages + Kézbesítetlen üzenetek No comment provided by engineer. @@ -7491,6 +7601,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Use %@ + %@ használata No comment provided by engineer. @@ -7520,10 +7631,12 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Use for files + Használat a fájlokhoz No comment provided by engineer. Use for messages + Használat az üzenetekhez No comment provided by engineer. @@ -7538,7 +7651,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Use iOS call interface - Az iOS hívófelület használata + Az iOS hívási felületét használata No comment provided by engineer. @@ -7568,6 +7681,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Use servers + Kiszolgálók használata No comment provided by engineer. @@ -7662,6 +7776,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc View conditions + Feltételek megtekintése No comment provided by engineer. @@ -7671,6 +7786,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc View updated conditions + Frissített feltételek megtekintése No comment provided by engineer. @@ -7785,6 +7901,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + Amikor egynél több hálózati üzemeltető van engedélyezve, egyikük sem rendelkezik olyan metaadatokkal ahhoz, hogy felderítse, ki kommunikál kivel. No comment provided by engineer. @@ -7882,6 +7999,10 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Ön már kapcsolódva van ehhez: %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Már folyamatban van a kapcsolódás ehhez: %@. @@ -7889,7 +8010,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc You are already connecting via this one-time link! - A kapcsolódás már folyamatban van ezen az egyszer használható hivatkozáson keresztül! + A kapcsolódás már folyamatban van ezen az egyszer használható meghívó-hivatkozáson keresztül! No comment provided by engineer. @@ -7946,10 +8067,12 @@ Csatlakozáskérés megismétlése? You can configure operators in Network & servers settings. + Az üzemeltetőket a „Hálózat és kiszolgálók” beállításaban konfigurálhatja. No comment provided by engineer. You can configure servers via settings. + A kiszolgálókat a beállításokon keresztül konfigurálhatja. No comment provided by engineer. @@ -7994,6 +8117,7 @@ Csatlakozáskérés megismétlése? You can set connection name, to remember who the link was shared with. + Beállíthatja az ismerős nevét, hogy emlékezzen arra, hogy kivel osztotta meg a hivatkozást. No comment provided by engineer. @@ -8295,6 +8419,7 @@ Kapcsolatkérés megismétlése? Your servers + Az Ön kiszolgálói No comment provided by engineer. @@ -8719,6 +8844,7 @@ Kapcsolatkérés megismétlése? for better metadata privacy. + a metaadatok jobb védelme érdekében. No comment provided by engineer. @@ -8768,7 +8894,7 @@ Kapcsolatkérés megismétlése? incognito via one-time link - inkognitó egy egyszer használható hivatkozáson keresztül + inkognitó egy egyszer használható meghívó-hivatkozáson keresztül chat list item description @@ -8903,7 +9029,7 @@ Kapcsolatkérés megismétlése? new message - Rejtett üzenet + új üzenet notification @@ -9159,7 +9285,7 @@ utoljára fogadott üzenet: %2$@ via one-time link - egyszer használható hivatkozáson keresztül + egyszer használható meghívó-hivatkozáson keresztül chat list item description @@ -9259,12 +9385,12 @@ utoljára fogadott üzenet: %2$@ you shared one-time link - egyszer használható hivatkozást osztott meg + Ön egy egyszer használható meghívó-hivatkozást osztott meg chat list item description you shared one-time link incognito - egyszer használható hivatkozást osztott meg inkognitóban + Ön egy egyszer használható meghívó-hivatkozást osztott meg inkognitóban chat list item description @@ -9350,22 +9476,27 @@ utoljára fogadott üzenet: %2$@ %d new events + %d új esemény notification body From: %@ + Tőle: %@ notification body New events + Új események notification New messages + Új üzenetek notification New messages in %d chats + Új üzenetek %d csevegésben notification body 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 55eee758d5..8e54ba40dd 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -114,10 +114,12 @@ %@ server + %@ server No comment provided by engineer. %@ servers + %@ server No comment provided by engineer. @@ -382,6 +384,7 @@ **Scan / Paste link**: to connect via a link you received. + **Scansiona / Incolla link**: per connetterti tramite un link che hai ricevuto. No comment provided by engineer. @@ -492,10 +495,12 @@ 1-time link + Link una tantum No comment provided by engineer. 1-time link can be used *with one contact only* - share in person or via any messenger. + Il link una tantum può essere usato *con un solo contatto* - condividilo di persona o tramite qualsiasi messenger. No comment provided by engineer. @@ -586,6 +591,7 @@ Accept conditions + Accetta le condizioni No comment provided by engineer. @@ -606,6 +612,7 @@ Accepted conditions + Condizioni accettate No comment provided by engineer. @@ -628,6 +635,10 @@ Aggiungi l'indirizzo al tuo profilo, in modo che i tuoi contatti possano condividerlo con altre persone. L'aggiornamento del profilo verrà inviato ai tuoi contatti. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Aggiungi profilo @@ -643,6 +654,10 @@ Aggiungi server scansionando codici QR. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Aggiungi ad un altro dispositivo @@ -653,12 +668,18 @@ Aggiungi messaggio di benvenuto No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers + Server di multimediali e file aggiunti No comment provided by engineer. Added message servers + Server dei messaggi aggiunti No comment provided by engineer. @@ -688,10 +709,12 @@ Address or 1-time link? + Indirizzo o link una tantum? No comment provided by engineer. Address settings + Impostazioni dell'indirizzo No comment provided by engineer. @@ -741,6 +764,7 @@ All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages. + Tutti i messaggi e i file vengono inviati **crittografati end-to-end**, con sicurezza resistenti alla quantistica nei messaggi diretti. No comment provided by engineer. @@ -1218,6 +1242,10 @@ Bulgaro, finlandese, tailandese e ucraino - grazie agli utenti e a [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1357,8 +1385,17 @@ Change user profiles + Modifica profili utente authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Colori della chat @@ -1441,10 +1478,12 @@ Check messages every 20 min. + Controlla i messaggi ogni 20 min. No comment provided by engineer. Check messages when allowed. + Controlla i messaggi quando consentito. No comment provided by engineer. @@ -1539,38 +1578,47 @@ Conditions accepted on: %@. + Condizioni accettate il: %@. No comment provided by engineer. Conditions are accepted for the operator(s): **%@**. + Le condizioni sono state accettate per gli operatori: **%@**. No comment provided by engineer. Conditions are already accepted for following operator(s): **%@**. + Le condizioni sono già state accettate per i seguenti operatori: **%@**. No comment provided by engineer. Conditions of use + Condizioni d'uso No comment provided by engineer. Conditions will be accepted for enabled operators after 30 days. + Le condizioni verranno accettate per gli operatori attivati dopo 30 giorni. No comment provided by engineer. Conditions will be accepted for operator(s): **%@**. + Le condizioni verranno accettate per gli operatori: **%@**. No comment provided by engineer. Conditions will be accepted for the operator(s): **%@**. + Le condizioni verranno accettate per gli operatori: **%@**. No comment provided by engineer. Conditions will be accepted on: %@. + Le condizioni verranno accettate il: %@. No comment provided by engineer. Conditions will be automatically accepted for enabled operators on: %@. + Le condizioni verranno accettate automaticamente per gli operatori attivi il: %@. No comment provided by engineer. @@ -1769,6 +1817,7 @@ Questo è il tuo link una tantum! Connection security + Sicurezza della connessione No comment provided by engineer. @@ -1888,6 +1937,7 @@ Questo è il tuo link una tantum! Create 1-time link + Crea link una tantum No comment provided by engineer. @@ -1977,6 +2027,7 @@ Questo è il tuo link una tantum! Current conditions text couldn't be loaded, you can review conditions via this link: + Il testo delle condizioni attuali testo non è stato caricato, puoi consultare le condizioni tramite questo link: No comment provided by engineer. @@ -2346,6 +2397,7 @@ Questo è il tuo link una tantum! Delivered even when Apple drops them. + Consegnati anche quando Apple li scarta. No comment provided by engineer. @@ -2631,6 +2683,7 @@ Questo è il tuo link una tantum! E2E encrypted notifications. + Notifiche crittografate E2E. No comment provided by engineer. @@ -2655,6 +2708,7 @@ Questo è il tuo link una tantum! Enable Flux + Attiva Flux No comment provided by engineer. @@ -2864,6 +2918,7 @@ Questo è il tuo link una tantum! Error accepting conditions + Errore di accettazione delle condizioni alert title @@ -2878,6 +2933,7 @@ Questo è il tuo link una tantum! Error adding server + Errore di aggiunta del server alert title @@ -3022,6 +3078,7 @@ Questo è il tuo link una tantum! Error loading servers + Errore nel caricamento dei server alert title @@ -3081,6 +3138,7 @@ Questo è il tuo link una tantum! Error saving servers + Errore di salvataggio dei server alert title @@ -3155,6 +3213,7 @@ Questo è il tuo link una tantum! Error updating server + Errore di aggiornamento del server alert title @@ -3204,6 +3263,7 @@ Questo è il tuo link una tantum! Errors in servers configuration. + Errori nella configurazione dei server. servers error @@ -3410,6 +3470,7 @@ Questo è il tuo link una tantum! For chat profile %@: + Per il profilo di chat %@: servers error @@ -3419,14 +3480,17 @@ Questo è il tuo link una tantum! For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. + Ad esempio, se il tuo contatto riceve messaggi tramite un server di SimpleX Chat, la tua app li consegnerà tramite un server Flux. No comment provided by engineer. For private routing + Per l'instradamento privato No comment provided by engineer. For social media + Per i social media No comment provided by engineer. @@ -3740,10 +3804,12 @@ Errore: %2$@ How it affects privacy + Come influisce sulla privacy No comment provided by engineer. How it helps privacy + Come aiuta la privacy No comment provided by engineer. @@ -4565,6 +4631,7 @@ Questo è il tuo link per il gruppo %@! More reliable notifications + Notifiche più affidabili No comment provided by engineer. @@ -4604,6 +4671,7 @@ Questo è il tuo link per il gruppo %@! Network decentralization + Decentralizzazione della rete No comment provided by engineer. @@ -4618,6 +4686,7 @@ Questo è il tuo link per il gruppo %@! Network operator + Operatore di rete No comment provided by engineer. @@ -4677,6 +4746,7 @@ Questo è il tuo link per il gruppo %@! New events + Nuovi eventi notification @@ -4706,6 +4776,7 @@ Questo è il tuo link per il gruppo %@! New server + Nuovo server No comment provided by engineer. @@ -4765,10 +4836,12 @@ Questo è il tuo link per il gruppo %@! No media & file servers. + Nessun server di multimediali e file. servers error No message servers. + Nessun server dei messaggi. servers error @@ -4803,18 +4876,22 @@ Questo è il tuo link per il gruppo %@! No servers for private message routing. + Nessun server per l'instradamento dei messaggi privati. servers error No servers to receive files. + Nessun server per ricevere file. servers error No servers to receive messages. + Nessun server per ricevere messaggi. servers error No servers to send files. + Nessun server per inviare file. servers error @@ -4849,6 +4926,7 @@ Questo è il tuo link per il gruppo %@! Notifications privacy + Privacy delle notifiche No comment provided by engineer. @@ -4991,6 +5069,7 @@ Richiede l'attivazione della VPN. Open changes + Apri le modifiche No comment provided by engineer. @@ -5005,6 +5084,7 @@ Richiede l'attivazione della VPN. Open conditions + Apri le condizioni No comment provided by engineer. @@ -5024,10 +5104,12 @@ Richiede l'attivazione della VPN. Operator + Operatore No comment provided by engineer. Operator server + Server dell'operatore alert title @@ -5056,6 +5138,7 @@ Richiede l'attivazione della VPN. Or to share privately + O per condividere in modo privato No comment provided by engineer. @@ -5276,6 +5359,7 @@ Errore: %@ Preset servers + Server preimpostati No comment provided by engineer. @@ -5452,6 +5536,7 @@ Attivalo nelle impostazioni *Rete e server*. Push Notifications + Notifiche push No comment provided by engineer. @@ -5827,10 +5912,12 @@ Attivalo nelle impostazioni *Rete e server*. Review conditions + Esamina le condizioni No comment provided by engineer. Review later + Esamina più tardi No comment provided by engineer. @@ -5880,10 +5967,12 @@ Attivalo nelle impostazioni *Rete e server*. Same conditions will apply to operator **%@**. + Le stesse condizioni si applicheranno all'operatore **%@**. No comment provided by engineer. Same conditions will apply to operator(s): **%@**. + Le stesse condizioni si applicheranno agli operatori **%@**. No comment provided by engineer. @@ -6289,6 +6378,7 @@ Attivalo nelle impostazioni *Rete e server*. Server added to operator %@. + Server aggiunto all'operatore %@. alert message @@ -6308,14 +6398,17 @@ Attivalo nelle impostazioni *Rete e server*. Server operator changed. + L'operatore del server è cambiato. alert title Server operators + Operatori server No comment provided by engineer. Server protocol changed. + Il protocollo del server è cambiato. alert title @@ -6446,10 +6539,12 @@ Attivalo nelle impostazioni *Rete e server*. Share 1-time link with a friend + Condividi link una tantum con un amico No comment provided by engineer. Share SimpleX address on social media. + Condividi indirizzo SimpleX sui social media. No comment provided by engineer. @@ -6459,6 +6554,7 @@ Attivalo nelle impostazioni *Rete e server*. Share address publicly + Condividi indirizzo pubblicamente No comment provided by engineer. @@ -6583,10 +6679,12 @@ Attivalo nelle impostazioni *Rete e server*. SimpleX address and 1-time links are safe to share via any messenger. + L'indirizzo SimpleX e i link una tantum sono sicuri da condividere tramite qualsiasi messenger. No comment provided by engineer. SimpleX address or 1-time link? + Indirizzo SimpleX o link una tantum? No comment provided by engineer. @@ -6682,6 +6780,8 @@ Attivalo nelle impostazioni *Rete e server*. Some servers failed the test: %@ + Alcuni server hanno fallito il test: +%@ alert message @@ -6952,6 +7052,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. The app protects your privacy by using different operators in each conversation. + L'app protegge la tua privacy usando diversi operatori in ogni conversazione. No comment provided by engineer. @@ -6971,6 +7072,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. The connection reached the limit of undelivered messages, your contact may be offline. + La connessione ha raggiunto il limite di messaggi non consegnati, il contatto potrebbe essere offline. No comment provided by engineer. @@ -7035,6 +7137,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. The second preset operator in the app! + Il secondo operatore preimpostato nell'app! No comment provided by engineer. @@ -7054,6 +7157,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. The servers for new files of your current chat profile **%@**. + I server per nuovi file del tuo profilo di chat attuale **%@**. No comment provided by engineer. @@ -7073,6 +7177,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. These conditions will also apply for: **%@**. + Queste condizioni si applicheranno anche per: **%@**. No comment provided by engineer. @@ -7177,6 +7282,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. To protect against your link being replaced, you can compare contact security codes. + Per proteggerti dalla sostituzione del tuo link, puoi confrontare i codici di sicurezza del contatto. No comment provided by engineer. @@ -7203,6 +7309,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio To receive + Per ricevere No comment provided by engineer. @@ -7227,6 +7334,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio To send + Per inviare No comment provided by engineer. @@ -7236,6 +7344,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio To use the servers of **%@**, accept conditions of use. + Per usare i server di **%@**, accetta le condizioni d'uso. No comment provided by engineer. @@ -7330,6 +7439,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Undelivered messages + Messaggi non consegnati No comment provided by engineer. @@ -7491,6 +7601,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Use %@ + Usa %@ No comment provided by engineer. @@ -7520,10 +7631,12 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Use for files + Usa per i file No comment provided by engineer. Use for messages + Usa per i messaggi No comment provided by engineer. @@ -7568,6 +7681,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Use servers + Usa i server No comment provided by engineer. @@ -7662,6 +7776,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e View conditions + Vedi le condizioni No comment provided by engineer. @@ -7671,6 +7786,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e View updated conditions + Vedi le condizioni aggiornate No comment provided by engineer. @@ -7785,6 +7901,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + Quando più di un operatore è attivato, nessuno di essi ha metadati per scoprire chi comunica con chi. No comment provided by engineer. @@ -7882,6 +7999,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Sei già connesso/a a %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Ti stai già connettendo a %@. @@ -7946,10 +8067,12 @@ Ripetere la richiesta di ingresso? You can configure operators in Network & servers settings. + Puoi configurare gli operatori nelle impostazioni di rete e server. No comment provided by engineer. You can configure servers via settings. + Puoi configurare i server nelle impostazioni. No comment provided by engineer. @@ -7994,6 +8117,7 @@ Ripetere la richiesta di ingresso? You can set connection name, to remember who the link was shared with. + Puoi impostare il nome della connessione per ricordare con chi è stato condiviso il link. No comment provided by engineer. @@ -8295,6 +8419,7 @@ Ripetere la richiesta di connessione? Your servers + I tuoi server No comment provided by engineer. @@ -8719,6 +8844,7 @@ Ripetere la richiesta di connessione? for better metadata privacy. + per una migliore privacy dei metadati. No comment provided by engineer. @@ -9350,22 +9476,27 @@ ultimo msg ricevuto: %2$@ %d new events + %d nuovi eventi notification body From: %@ + Da: %@ notification body New events + Nuovi eventi notification New messages + Nuovi messaggi notification New messages in %d chats + Nuovi messaggi in %d chat notification body 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 6b833800c0..1a5ffdd680 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -612,6 +612,10 @@ プロフィールにアドレスを追加し、連絡先があなたのアドレスを他の人と共有できるようにします。プロフィールの更新は連絡先に送信されます。 No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile プロフィールを追加 @@ -627,6 +631,10 @@ QRコードでサーバを追加する。 No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device 別の端末に追加 @@ -637,6 +645,10 @@ ウェルカムメッセージを追加 No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1162,6 +1174,10 @@ ブルガリア語、フィンランド語、タイ語、ウクライナ語 - ユーザーと [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)に感謝します! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). チャット プロファイル経由 (デフォルト) または [接続経由](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1294,6 +1310,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors No comment provided by engineer. @@ -1360,6 +1384,7 @@ Chat theme + チャットテーマ No comment provided by engineer. @@ -1401,10 +1426,12 @@ Chunks deleted + チャンクが削除されました No comment provided by engineer. Chunks downloaded + チャンクがダウンロードされました No comment provided by engineer. @@ -1428,6 +1455,7 @@ Clear private notes? + プライベートノートを消しますか? No comment provided by engineer. @@ -1441,6 +1469,7 @@ Color mode + 色設定 No comment provided by engineer. @@ -1455,6 +1484,7 @@ Completed + 完了 No comment provided by engineer. @@ -1559,10 +1589,12 @@ Connect to desktop + デスクトップに接続 No comment provided by engineer. Connect to your friends faster. + 友達ともっと速くつながりましょう。 No comment provided by engineer. @@ -1599,22 +1631,27 @@ This is your own one-time link! Connected + 接続中 No comment provided by engineer. Connected desktop + デスクトップに接続済 No comment provided by engineer. Connected servers + 接続中のサーバ No comment provided by engineer. Connected to desktop + デスクトップに接続済 No comment provided by engineer. Connecting + 接続待ち No comment provided by engineer. @@ -1629,10 +1666,12 @@ This is your own one-time link! Connecting to contact, please wait or check later! + 連絡先に接続中です。しばらくお待ちいただくか、後で確認してください! No comment provided by engineer. Connecting to desktop + デスクトップに接続中 No comment provided by engineer. @@ -1642,6 +1681,7 @@ This is your own one-time link! Connection and servers status. + 接続とサーバーのステータス No comment provided by engineer. @@ -1669,6 +1709,7 @@ This is your own one-time link! Connection terminated + 接続停止 No comment provided by engineer. @@ -1882,6 +1923,7 @@ This is your own one-time link! Customize theme + カスタムテーマ No comment provided by engineer. @@ -1891,6 +1933,7 @@ This is your own one-time link! Dark mode colors + ダークモードカラー No comment provided by engineer. @@ -1993,6 +2036,7 @@ This is your own one-time link! Debug delivery + 配信のデバッグ No comment provided by engineer. @@ -2241,6 +2285,7 @@ This is your own one-time link! Desktop devices + デスクトップ機器 No comment provided by engineer. @@ -2270,6 +2315,7 @@ This is your own one-time link! Developer options + 開発者向けの設定 No comment provided by engineer. @@ -7343,6 +7389,10 @@ To connect, please ask your contact to create another connection link and check すでに %@ に接続されています。 No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 603db9d75a..50b3fdae3e 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -114,10 +114,12 @@ %@ server + %@ server No comment provided by engineer. %@ servers + %@ servers No comment provided by engineer. @@ -382,6 +384,7 @@ **Scan / Paste link**: to connect via a link you received. + **Link scannen/plakken**: om verbinding te maken via een link die u hebt ontvangen. No comment provided by engineer. @@ -492,10 +495,12 @@ 1-time link + Eenmalige link No comment provided by engineer. 1-time link can be used *with one contact only* - share in person or via any messenger. + Eenmalige link die *slechts met één contactpersoon* kan worden gebruikt - deel persoonlijk of via een messenger. No comment provided by engineer. @@ -586,6 +591,7 @@ Accept conditions + Accepteer voorwaarden No comment provided by engineer. @@ -606,6 +612,7 @@ Accepted conditions + Geaccepteerde voorwaarden No comment provided by engineer. @@ -628,6 +635,10 @@ Voeg een adres toe aan uw profiel, zodat uw contacten het met andere mensen kunnen delen. Profiel update wordt naar uw contacten verzonden. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Profiel toevoegen @@ -643,6 +654,10 @@ Servers toevoegen door QR-codes te scannen. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Toevoegen aan een ander apparaat @@ -653,12 +668,18 @@ Welkom bericht toevoegen No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers + Media- en bestandsservers toegevoegd No comment provided by engineer. Added message servers + Berichtservers toegevoegd No comment provided by engineer. @@ -688,10 +709,12 @@ Address or 1-time link? + Adres of eenmalige link? No comment provided by engineer. Address settings + Adres instellingen No comment provided by engineer. @@ -741,6 +764,7 @@ All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages. + Alle berichten en bestanden worden **end-to-end versleuteld** verzonden, met post-quantumbeveiliging in directe berichten. No comment provided by engineer. @@ -1218,6 +1242,10 @@ Bulgaars, Fins, Thais en Oekraïens - dankzij de gebruikers en [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Via chatprofiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1357,8 +1385,17 @@ Change user profiles + Gebruikersprofielen wijzigen authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Chat kleuren @@ -1441,10 +1478,12 @@ Check messages every 20 min. + Controleer uw berichten elke 20 minuten. No comment provided by engineer. Check messages when allowed. + Controleer berichten indien toegestaan. No comment provided by engineer. @@ -1539,38 +1578,47 @@ Conditions accepted on: %@. + Voorwaarden geaccepteerd op: %@. No comment provided by engineer. Conditions are accepted for the operator(s): **%@**. + Voorwaarden worden geaccepteerd voor de operator(s): **%@**. No comment provided by engineer. Conditions are already accepted for following operator(s): **%@**. + Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**. No comment provided by engineer. Conditions of use + Gebruiksvoorwaarden No comment provided by engineer. Conditions will be accepted for enabled operators after 30 days. + Voor ingeschakelde operators worden de voorwaarden na 30 dagen geaccepteerd. No comment provided by engineer. Conditions will be accepted for operator(s): **%@**. + Voorwaarden worden geaccepteerd voor operator(s): **%@**. No comment provided by engineer. Conditions will be accepted for the operator(s): **%@**. + Voorwaarden worden geaccepteerd voor de operator(s): **%@**. No comment provided by engineer. Conditions will be accepted on: %@. + Voorwaarden worden geaccepteerd op: %@. No comment provided by engineer. Conditions will be automatically accepted for enabled operators on: %@. + Voorwaarden worden automatisch geaccepteerd voor ingeschakelde operators op: %@. No comment provided by engineer. @@ -1769,6 +1817,7 @@ Dit is uw eigen eenmalige link! Connection security + Beveiliging van de verbinding No comment provided by engineer. @@ -1888,6 +1937,7 @@ Dit is uw eigen eenmalige link! Create 1-time link + Eenmalige link maken No comment provided by engineer. @@ -1977,6 +2027,7 @@ Dit is uw eigen eenmalige link! Current conditions text couldn't be loaded, you can review conditions via this link: + De tekst van de huidige voorwaarden kon niet worden geladen. U kunt de voorwaarden bekijken via deze link: No comment provided by engineer. @@ -2346,6 +2397,7 @@ Dit is uw eigen eenmalige link! Delivered even when Apple drops them. + Geleverd ook als Apple ze verliest No comment provided by engineer. @@ -2631,6 +2683,7 @@ Dit is uw eigen eenmalige link! E2E encrypted notifications. + E2E versleutelde meldingen. No comment provided by engineer. @@ -2655,6 +2708,7 @@ Dit is uw eigen eenmalige link! Enable Flux + Flux inschakelen No comment provided by engineer. @@ -2864,6 +2918,7 @@ Dit is uw eigen eenmalige link! Error accepting conditions + Fout bij het accepteren van voorwaarden alert title @@ -2878,6 +2933,7 @@ Dit is uw eigen eenmalige link! Error adding server + Fout bij toevoegen server alert title @@ -3022,6 +3078,7 @@ Dit is uw eigen eenmalige link! Error loading servers + Fout bij het laden van servers alert title @@ -3081,6 +3138,7 @@ Dit is uw eigen eenmalige link! Error saving servers + Fout bij het opslaan van servers alert title @@ -3155,6 +3213,7 @@ Dit is uw eigen eenmalige link! Error updating server + Fout bij het updaten van de server alert title @@ -3204,6 +3263,7 @@ Dit is uw eigen eenmalige link! Errors in servers configuration. + Fouten in de serverconfiguratie. servers error @@ -3410,6 +3470,7 @@ Dit is uw eigen eenmalige link! For chat profile %@: + Voor chatprofiel %@: servers error @@ -3419,14 +3480,17 @@ Dit is uw eigen eenmalige link! For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. + Als uw contactpersoon bijvoorbeeld berichten ontvangt via een SimpleX Chat-server, worden deze door uw app via een Flux-server verzonden. No comment provided by engineer. For private routing + Voor privé-routering No comment provided by engineer. For social media + Voor social media No comment provided by engineer. @@ -3740,10 +3804,12 @@ Fout: %2$@ How it affects privacy + Hoe het de privacy beïnvloedt No comment provided by engineer. How it helps privacy + Hoe het de privacy helpt No comment provided by engineer. @@ -4565,6 +4631,7 @@ Dit is jouw link voor groep %@! More reliable notifications + Betrouwbaardere meldingen No comment provided by engineer. @@ -4604,6 +4671,7 @@ Dit is jouw link voor groep %@! Network decentralization + Netwerk decentralisatie No comment provided by engineer. @@ -4618,6 +4686,7 @@ Dit is jouw link voor groep %@! Network operator + Netwerkbeheerder No comment provided by engineer. @@ -4677,6 +4746,7 @@ Dit is jouw link voor groep %@! New events + Nieuwe gebeurtenissen notification @@ -4706,6 +4776,7 @@ Dit is jouw link voor groep %@! New server + Nieuwe server No comment provided by engineer. @@ -4765,10 +4836,12 @@ Dit is jouw link voor groep %@! No media & file servers. + Geen media- en bestandsservers. servers error No message servers. + Geen berichtenservers. servers error @@ -4803,18 +4876,22 @@ Dit is jouw link voor groep %@! No servers for private message routing. + Geen servers voor het routeren van privéberichten. servers error No servers to receive files. + Geen servers om bestanden te ontvangen. servers error No servers to receive messages. + Geen servers om berichten te ontvangen. servers error No servers to send files. + Geen servers om bestanden te verzenden. servers error @@ -4849,6 +4926,7 @@ Dit is jouw link voor groep %@! Notifications privacy + Privacy van meldingen No comment provided by engineer. @@ -4991,6 +5069,7 @@ Vereist het inschakelen van VPN. Open changes + Wijzigingen openen No comment provided by engineer. @@ -5005,6 +5084,7 @@ Vereist het inschakelen van VPN. Open conditions + Open voorwaarden No comment provided by engineer. @@ -5024,10 +5104,12 @@ Vereist het inschakelen van VPN. Operator + Operator No comment provided by engineer. Operator server + Operatorserver alert title @@ -5056,6 +5138,7 @@ Vereist het inschakelen van VPN. Or to share privately + Of om privé te delen No comment provided by engineer. @@ -5276,6 +5359,7 @@ Fout: %@ Preset servers + Vooraf ingestelde servers No comment provided by engineer. @@ -5452,6 +5536,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Push Notifications + Pushmeldingen No comment provided by engineer. @@ -5827,10 +5912,12 @@ Schakel dit in in *Netwerk en servers*-instellingen. Review conditions + Voorwaarden bekijken No comment provided by engineer. Review later + Later beoordelen No comment provided by engineer. @@ -5880,10 +5967,12 @@ Schakel dit in in *Netwerk en servers*-instellingen. Same conditions will apply to operator **%@**. + Dezelfde voorwaarden gelden voor operator **%@**. No comment provided by engineer. Same conditions will apply to operator(s): **%@**. + Dezelfde voorwaarden gelden voor operator(s): **%@**. No comment provided by engineer. @@ -6289,6 +6378,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Server added to operator %@. + Server toegevoegd aan operator %@. alert message @@ -6308,14 +6398,17 @@ Schakel dit in in *Netwerk en servers*-instellingen. Server operator changed. + Serveroperator gewijzigd. alert title Server operators + Serverbeheerders No comment provided by engineer. Server protocol changed. + Serverprotocol gewijzigd. alert title @@ -6446,10 +6539,12 @@ Schakel dit in in *Netwerk en servers*-instellingen. Share 1-time link with a friend + Deel eenmalig een link met een vriend No comment provided by engineer. Share SimpleX address on social media. + Deel het SimpleX-adres op sociale media. No comment provided by engineer. @@ -6459,6 +6554,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Share address publicly + Adres openbaar delen No comment provided by engineer. @@ -6583,10 +6679,12 @@ Schakel dit in in *Netwerk en servers*-instellingen. SimpleX address and 1-time links are safe to share via any messenger. + SimpleX-adressen en eenmalige links kunnen veilig worden gedeeld via elke messenger. No comment provided by engineer. SimpleX address or 1-time link? + SimpleX adres of eenmalige link? No comment provided by engineer. @@ -6682,6 +6780,8 @@ Schakel dit in in *Netwerk en servers*-instellingen. Some servers failed the test: %@ + Sommige servers zijn niet geslaagd voor de test: +%@ alert message @@ -6952,6 +7052,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. The app protects your privacy by using different operators in each conversation. + De app beschermt uw privacy door in elk gesprek andere operatoren te gebruiken. No comment provided by engineer. @@ -6971,6 +7072,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. The connection reached the limit of undelivered messages, your contact may be offline. + De verbinding heeft de limiet van niet-afgeleverde berichten bereikt. Uw contactpersoon is mogelijk offline. No comment provided by engineer. @@ -7035,6 +7137,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. The second preset operator in the app! + De tweede vooraf ingestelde operator in de app! No comment provided by engineer. @@ -7054,6 +7157,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. The servers for new files of your current chat profile **%@**. + De servers voor nieuwe bestanden van uw huidige chatprofiel **%@**. No comment provided by engineer. @@ -7073,6 +7177,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. These conditions will also apply for: **%@**. + Deze voorwaarden zijn ook van toepassing op: **%@**. No comment provided by engineer. @@ -7177,6 +7282,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. To protect against your link being replaced, you can compare contact security codes. + Om te voorkomen dat uw link wordt vervangen, kunt u contactbeveiligingscodes vergelijken. No comment provided by engineer. @@ -7203,6 +7309,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc To receive + Om te ontvangen No comment provided by engineer. @@ -7227,6 +7334,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc To send + Om te verzenden No comment provided by engineer. @@ -7236,6 +7344,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc To use the servers of **%@**, accept conditions of use. + Om de servers van **%@** te gebruiken, moet u de gebruiksvoorwaarden accepteren. No comment provided by engineer. @@ -7330,6 +7439,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Undelivered messages + Niet afgeleverde berichten No comment provided by engineer. @@ -7491,6 +7601,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Use %@ + Gebruik %@ No comment provided by engineer. @@ -7520,10 +7631,12 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Use for files + Gebruik voor bestanden No comment provided by engineer. Use for messages + Gebruik voor berichten No comment provided by engineer. @@ -7568,6 +7681,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Use servers + Gebruik servers No comment provided by engineer. @@ -7662,6 +7776,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak View conditions + Bekijk voorwaarden No comment provided by engineer. @@ -7671,6 +7786,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak View updated conditions + Bekijk de bijgewerkte voorwaarden No comment provided by engineer. @@ -7785,6 +7901,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + Wanneer er meer dan één operator is ingeschakeld, beschikt geen enkele operator over metagegevens om te achterhalen wie met wie communiceert. No comment provided by engineer. @@ -7882,6 +7999,10 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak U bent al verbonden met %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. U maakt al verbinding met %@. @@ -7946,10 +8067,12 @@ Deelnameverzoek herhalen? You can configure operators in Network & servers settings. + U kunt operators configureren in Netwerk- en serverinstellingen. No comment provided by engineer. You can configure servers via settings. + U kunt servers configureren via instellingen. No comment provided by engineer. @@ -7994,6 +8117,7 @@ Deelnameverzoek herhalen? You can set connection name, to remember who the link was shared with. + U kunt een verbindingsnaam instellen, zodat u kunt onthouden met wie de link is gedeeld. No comment provided by engineer. @@ -8295,6 +8419,7 @@ Verbindingsverzoek herhalen? Your servers + Uw servers No comment provided by engineer. @@ -8719,6 +8844,7 @@ Verbindingsverzoek herhalen? for better metadata privacy. + voor betere privacy van metagegevens. No comment provided by engineer. @@ -9350,22 +9476,27 @@ laatst ontvangen bericht: %2$@ %d new events + ‐%d nieuwe gebeurtenissen notification body From: %@ + Van: %@ notification body New events + Nieuwe gebeurtenissen notification New messages + Nieuwe berichten notification New messages in %d chats + Nieuwe berichten in %d chats notification body 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 8a772bf470..0095b5e031 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -628,6 +628,10 @@ Dodaj adres do swojego profilu, aby Twoje kontakty mogły go udostępnić innym osobom. Aktualizacja profilu zostanie wysłana do Twoich kontaktów. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Dodaj profil @@ -643,6 +647,10 @@ Dodaj serwery, skanując kody QR. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Dodaj do innego urządzenia @@ -653,6 +661,10 @@ Dodaj wiadomość powitalną No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1213,6 +1225,10 @@ Bułgarski, fiński, tajski i ukraiński – dzięki użytkownikom i [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1354,6 +1370,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Kolory czatu @@ -7869,6 +7893,10 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Jesteś już połączony z %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Już się łączysz z %@. 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 9b6cbf519e..e7230dbcb2 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -628,6 +628,10 @@ Добавьте адрес в свой профиль, чтобы Ваши контакты могли поделиться им. Профиль будет отправлен Вашим контактам. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Добавить профиль @@ -643,6 +647,10 @@ Добавить серверы через QR код. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Добавить на другое устройство @@ -653,6 +661,10 @@ Добавить приветственное сообщение No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1219,6 +1231,10 @@ Болгарский, финский, тайский и украинский - благодаря пользователям и [Weblate] (https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). По профилю чата или [по соединению](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА). @@ -1360,6 +1376,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Цвета чата @@ -7882,6 +7906,10 @@ To connect, please ask your contact to create another connection link and check Вы уже соединены с контактом %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Вы уже соединяетесь с %@. diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index 8066daf54d..f3097bf8f2 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -587,6 +587,10 @@ เพิ่มที่อยู่ลงในโปรไฟล์ของคุณ เพื่อให้ผู้ติดต่อของคุณสามารถแชร์กับผู้อื่นได้ การอัปเดตโปรไฟล์จะถูกส่งไปยังผู้ติดต่อของคุณ No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile เพิ่มโปรไฟล์ @@ -602,6 +606,10 @@ เพิ่มเซิร์ฟเวอร์โดยการสแกนรหัสคิวอาร์โค้ด No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device เพิ่มเข้าไปในอุปกรณ์อื่น @@ -612,6 +620,10 @@ เพิ่มข้อความต้อนรับ No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1130,6 +1142,10 @@ Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). ตามโปรไฟล์แชท (ค่าเริ่มต้น) หรือ [โดยการเชื่อมต่อ](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (เบต้า) @@ -1262,6 +1278,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors No comment provided by engineer. @@ -7293,6 +7317,10 @@ To connect, please ask your contact to create another connection link and check คุณได้เชื่อมต่อกับ %@ แล้ว No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index f578a6225d..eca1c67b85 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -628,6 +628,10 @@ Kişilerinizin başkalarıyla paylaşabilmesi için profilinize adres ekleyin. Profil güncellemesi kişilerinize gönderilecek. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Profil ekle @@ -643,6 +647,10 @@ Karekod taratarak sunucuları ekleyin. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Başka bir cihaza ekle @@ -653,6 +661,10 @@ Karşılama mesajı ekleyin No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1218,6 +1230,10 @@ Bulgarca, Fince, Tayca ve Ukraynaca - kullanıcılara ve [Weblate] e teşekkürler! (https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Sohbet profiline göre (varsayılan) veya [bağlantıya göre](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1359,6 +1375,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Sohbet renkleri @@ -7882,6 +7906,10 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Zaten %@'a bağlısınız. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Zaten %@'a bağlanıyorsunuz. diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 136f45830b..0d05edbfbe 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -114,10 +114,12 @@ %@ server + %@ сервер No comment provided by engineer. %@ servers + %@ сервери No comment provided by engineer. @@ -132,6 +134,7 @@ %1$@, %2$@ + %1$@, %2$@ format for date separator in chat @@ -171,6 +174,7 @@ %d file(s) were not downloaded. + %d файл(и) не було завантажено. forward confirmation reason @@ -180,6 +184,7 @@ %d messages not forwarded + %d повідомлень не переслано alert title @@ -379,6 +384,7 @@ **Scan / Paste link**: to connect via a link you received. + **Відсканувати / Вставити посилання**: підключитися за отриманим посиланням. No comment provided by engineer. @@ -489,10 +495,12 @@ 1-time link + Одноразове посилання No comment provided by engineer. 1-time link can be used *with one contact only* - share in person or via any messenger. + Одноразове посилання можна використовувати *тільки з одним контактом* - поділіться ним особисто або через будь-який месенджер. No comment provided by engineer. @@ -583,6 +591,7 @@ Accept conditions + Прийняти умови No comment provided by engineer. @@ -603,6 +612,7 @@ Accepted conditions + Прийняті умови No comment provided by engineer. @@ -625,6 +635,10 @@ Додайте адресу до свого профілю, щоб ваші контакти могли поділитися нею з іншими людьми. Повідомлення про оновлення профілю буде надіслано вашим контактам. No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile Додати профіль @@ -640,6 +654,10 @@ Додайте сервери, відсканувавши QR-код. No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device Додати до іншого пристрою @@ -650,12 +668,18 @@ Додати вітальне повідомлення No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers + Додано медіа та файлові сервери No comment provided by engineer. Added message servers + Додано сервери повідомлень No comment provided by engineer. @@ -685,10 +709,12 @@ Address or 1-time link? + Адреса чи одноразове посилання? No comment provided by engineer. Address settings + Налаштування адреси No comment provided by engineer. @@ -738,6 +764,7 @@ All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages. + Всі повідомлення та файли надсилаються **наскрізним шифруванням**, з пост-квантовим захистом у прямих повідомленнях. No comment provided by engineer. @@ -957,6 +984,7 @@ App session + Сесія програми No comment provided by engineer. @@ -1066,6 +1094,7 @@ Auto-accept settings + Автоприйняття налаштувань alert title @@ -1095,6 +1124,7 @@ Better calls + Кращі дзвінки No comment provided by engineer. @@ -1104,6 +1134,7 @@ Better message dates. + Кращі дати повідомлень. No comment provided by engineer. @@ -1118,14 +1149,17 @@ Better notifications + Кращі сповіщення No comment provided by engineer. Better security ✅ + Краща безпека ✅ No comment provided by engineer. Better user experience + Покращений користувацький досвід No comment provided by engineer. @@ -1208,6 +1242,10 @@ Болгарською, фінською, тайською та українською мовами - завдяки користувачам та [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Через профіль чату (за замовчуванням) або [за з'єднанням](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1347,8 +1385,17 @@ Change user profiles + Зміна профілів користувачів authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors Кольори чату @@ -1411,6 +1458,7 @@ Chat preferences were changed. + Змінено налаштування чату. alert message @@ -1430,10 +1478,12 @@ Check messages every 20 min. + Перевіряйте повідомлення кожні 20 хв. No comment provided by engineer. Check messages when allowed. + Перевірте повідомлення, коли це дозволено. No comment provided by engineer. @@ -1528,38 +1578,47 @@ Conditions accepted on: %@. + Умови приймаються на: %@. No comment provided by engineer. Conditions are accepted for the operator(s): **%@**. + Для оператора(ів) приймаються умови: **%@**. No comment provided by engineer. Conditions are already accepted for following operator(s): **%@**. + Умови вже прийняті для наступних операторів: **%@**. No comment provided by engineer. Conditions of use + Умови використання No comment provided by engineer. Conditions will be accepted for enabled operators after 30 days. + Умови будуть прийняті для ввімкнених операторів через 30 днів. No comment provided by engineer. Conditions will be accepted for operator(s): **%@**. + Умови приймаються для оператора(ів): **%@**. No comment provided by engineer. Conditions will be accepted for the operator(s): **%@**. + Для оператора(ів) приймаються умови: **%@**. No comment provided by engineer. Conditions will be accepted on: %@. + Умови приймаються на: %@. No comment provided by engineer. Conditions will be automatically accepted for enabled operators on: %@. + Умови будуть автоматично прийняті для увімкнених операторів на: %@. No comment provided by engineer. @@ -1758,6 +1817,7 @@ This is your own one-time link! Connection security + Безпека з'єднання No comment provided by engineer. @@ -1862,6 +1922,7 @@ This is your own one-time link! Corner + Кут No comment provided by engineer. @@ -1876,6 +1937,7 @@ This is your own one-time link! Create 1-time link + Створити одноразове посилання No comment provided by engineer. @@ -1965,6 +2027,7 @@ This is your own one-time link! Current conditions text couldn't be loaded, you can review conditions via this link: + Текст поточних умов не вдалося завантажити, ви можете переглянути умови за цим посиланням: No comment provided by engineer. @@ -1989,6 +2052,7 @@ This is your own one-time link! Customizable message shape. + Налаштовується форма повідомлення. No comment provided by engineer. @@ -2278,6 +2342,7 @@ This is your own one-time link! Delete or moderate up to 200 messages. + Видалити або модерувати до 200 повідомлень. No comment provided by engineer. @@ -2332,6 +2397,7 @@ This is your own one-time link! Delivered even when Apple drops them. + Доставляються навіть тоді, коли Apple кидає їх. No comment provided by engineer. @@ -2536,6 +2602,7 @@ This is your own one-time link! Do not use credentials with proxy. + Не використовуйте облікові дані з проксі. No comment provided by engineer. @@ -2581,6 +2648,7 @@ This is your own one-time link! Download files + Завантажити файли alert action @@ -2615,6 +2683,7 @@ This is your own one-time link! E2E encrypted notifications. + Зашифровані сповіщення E2E. No comment provided by engineer. @@ -2639,6 +2708,7 @@ This is your own one-time link! Enable Flux + Увімкнути Flux No comment provided by engineer. @@ -2848,6 +2918,7 @@ This is your own one-time link! Error accepting conditions + Помилка прийняття умов alert title @@ -2862,6 +2933,7 @@ This is your own one-time link! Error adding server + Помилка додавання сервера alert title @@ -2871,6 +2943,7 @@ This is your own one-time link! Error changing connection profile + Помилка при зміні профілю з'єднання No comment provided by engineer. @@ -2885,6 +2958,7 @@ This is your own one-time link! Error changing to incognito! + Помилка переходу на інкогніто! No comment provided by engineer. @@ -3004,10 +3078,12 @@ This is your own one-time link! Error loading servers + Помилка завантаження серверів alert title Error migrating settings + Помилка міграції налаштувань No comment provided by engineer. @@ -3062,6 +3138,7 @@ This is your own one-time link! Error saving servers + Сервери збереження помилок alert title @@ -3111,6 +3188,7 @@ This is your own one-time link! Error switching profile + Помилка перемикання профілю No comment provided by engineer. @@ -3135,6 +3213,7 @@ This is your own one-time link! Error updating server + Помилка оновлення сервера alert title @@ -3184,6 +3263,7 @@ This is your own one-time link! Errors in servers configuration. + Помилки в конфігурації серверів. servers error @@ -3259,6 +3339,8 @@ This is your own one-time link! File errors: %@ + Помилки файлів: +%@ alert message @@ -3388,6 +3470,7 @@ This is your own one-time link! For chat profile %@: + Для профілю чату %@: servers error @@ -3397,14 +3480,17 @@ This is your own one-time link! For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server. + Наприклад, якщо ваш контакт отримує повідомлення через сервер SimpleX Chat, ваш додаток доставлятиме їх через сервер Flux. No comment provided by engineer. For private routing + Для приватної маршрутизації No comment provided by engineer. For social media + Для соціальних мереж No comment provided by engineer. @@ -3414,6 +3500,7 @@ This is your own one-time link! Forward %d message(s)? + Переслати %d повідомлення(ь)? alert title @@ -3423,14 +3510,17 @@ This is your own one-time link! Forward messages + Пересилання повідомлень alert action Forward messages without files? + Пересилати повідомлення без файлів? alert message Forward up to 20 messages at once. + Пересилайте до 20 повідомлень одночасно. No comment provided by engineer. @@ -3445,6 +3535,7 @@ This is your own one-time link! Forwarding %lld messages + Пересилання повідомлень %lld No comment provided by engineer. @@ -3713,10 +3804,12 @@ Error: %2$@ How it affects privacy + Як це впливає на конфіденційність No comment provided by engineer. How it helps privacy + Як це захищає приватність No comment provided by engineer. @@ -3746,6 +3839,7 @@ Error: %2$@ IP address + IP-адреса No comment provided by engineer. @@ -3826,6 +3920,8 @@ Error: %2$@ Improved delivery, reduced traffic usage. More improvements are coming soon! + Покращена доставка, зменшене використання трафіку. +Незабаром з'являться нові покращення! No comment provided by engineer. @@ -4380,6 +4476,7 @@ This is your link for group %@! Message shape + Форма повідомлення No comment provided by engineer. @@ -4434,6 +4531,7 @@ This is your link for group %@! Messages were deleted after you selected them. + Повідомлення були видалені після того, як ви їх вибрали. alert message @@ -4533,6 +4631,7 @@ This is your link for group %@! More reliable notifications + Більш надійні сповіщення No comment provided by engineer. @@ -4572,6 +4671,7 @@ This is your link for group %@! Network decentralization + Децентралізація мережі No comment provided by engineer. @@ -4586,6 +4686,7 @@ This is your link for group %@! Network operator + Мережевий оператор No comment provided by engineer. @@ -4605,10 +4706,12 @@ This is your link for group %@! New SOCKS credentials will be used every time you start the app. + Нові облікові дані SOCKS будуть використовуватися при кожному запуску програми. No comment provided by engineer. New SOCKS credentials will be used for each server. + Для кожного сервера будуть використовуватися нові облікові дані SOCKS. No comment provided by engineer. @@ -4643,6 +4746,7 @@ This is your link for group %@! New events + Нові події notification @@ -4672,6 +4776,7 @@ This is your link for group %@! New server + Новий сервер No comment provided by engineer. @@ -4731,10 +4836,12 @@ This is your link for group %@! No media & file servers. + Ніяких медіа та файлових серверів. servers error No message servers. + Ніяких серверів повідомлень. servers error @@ -4744,10 +4851,12 @@ This is your link for group %@! No permission to record speech + Немає дозволу на запис промови No comment provided by engineer. No permission to record video + Немає дозволу на запис відео No comment provided by engineer. @@ -4767,18 +4876,22 @@ This is your link for group %@! No servers for private message routing. + Немає серверів для маршрутизації приватних повідомлень. servers error No servers to receive files. + Немає серверів для отримання файлів. servers error No servers to receive messages. + Немає серверів для отримання повідомлень. servers error No servers to send files. + Немає серверів для надсилання файлів. servers error @@ -4798,6 +4911,7 @@ This is your link for group %@! Nothing to forward! + Нічого пересилати! alert title @@ -4812,6 +4926,7 @@ This is your link for group %@! Notifications privacy + Сповіщення про приватність No comment provided by engineer. @@ -4954,6 +5069,7 @@ Requires compatible VPN. Open changes + Відкриті зміни No comment provided by engineer. @@ -4968,6 +5084,7 @@ Requires compatible VPN. Open conditions + Відкриті умови No comment provided by engineer. @@ -4987,10 +5104,12 @@ Requires compatible VPN. Operator + Оператор No comment provided by engineer. Operator server + Сервер оператора alert title @@ -5019,6 +5138,7 @@ Requires compatible VPN. Or to share privately + Або поділитися приватно No comment provided by engineer. @@ -5029,6 +5149,8 @@ Requires compatible VPN. Other file errors: %@ + Інші помилки файлів: +%@ alert message @@ -5068,6 +5190,7 @@ Requires compatible VPN. Password + Пароль No comment provided by engineer. @@ -5216,6 +5339,7 @@ Error: %@ Port + Порт No comment provided by engineer. @@ -5235,6 +5359,7 @@ Error: %@ Preset servers + Попередньо встановлені сервери No comment provided by engineer. @@ -5406,10 +5531,12 @@ Enable in *Network & servers* settings. Proxy requires password + Проксі вимагає пароль No comment provided by engineer. Push Notifications + Push-сповіщення No comment provided by engineer. @@ -5630,6 +5757,7 @@ Enable in *Network & servers* settings. Remove archive? + Видалити архів? No comment provided by engineer. @@ -5784,10 +5912,12 @@ Enable in *Network & servers* settings. Review conditions + Умови перегляду No comment provided by engineer. Review later + Перегляньте пізніше No comment provided by engineer. @@ -5822,6 +5952,7 @@ Enable in *Network & servers* settings. SOCKS proxy + Проксі SOCKS No comment provided by engineer. @@ -5836,10 +5967,12 @@ Enable in *Network & servers* settings. Same conditions will apply to operator **%@**. + Такі ж умови діятимуть і для оператора **%@**. No comment provided by engineer. Same conditions will apply to operator(s): **%@**. + Такі ж умови будуть застосовуватися до оператора(ів): **%@**. No comment provided by engineer. @@ -5915,6 +6048,7 @@ Enable in *Network & servers* settings. Save your profile? + Зберегти свій профіль? alert title @@ -5939,6 +6073,7 @@ Enable in *Network & servers* settings. Saving %lld messages + Збереження повідомлень %lld No comment provided by engineer. @@ -6023,6 +6158,7 @@ Enable in *Network & servers* settings. Select chat profile + Виберіть профіль чату No comment provided by engineer. @@ -6237,10 +6373,12 @@ Enable in *Network & servers* settings. Server + Сервер No comment provided by engineer. Server added to operator %@. + Сервер додано до оператора %@. alert message @@ -6260,14 +6398,17 @@ Enable in *Network & servers* settings. Server operator changed. + Оператор сервера змінився. alert title Server operators + Оператори серверів No comment provided by engineer. Server protocol changed. + Протокол сервера змінено. alert title @@ -6377,6 +6518,7 @@ Enable in *Network & servers* settings. Settings were changed. + Налаштування були змінені. alert message @@ -6397,10 +6539,12 @@ Enable in *Network & servers* settings. Share 1-time link with a friend + Поділіться одноразовим посиланням з другом No comment provided by engineer. Share SimpleX address on social media. + Поділіться адресою SimpleX у соціальних мережах. No comment provided by engineer. @@ -6410,6 +6554,7 @@ Enable in *Network & servers* settings. Share address publicly + Поділіться адресою публічно No comment provided by engineer. @@ -6429,6 +6574,7 @@ Enable in *Network & servers* settings. Share profile + Поділіться профілем No comment provided by engineer. @@ -6533,10 +6679,12 @@ Enable in *Network & servers* settings. SimpleX address and 1-time links are safe to share via any messenger. + SimpleX-адреси та одноразові посилання можна безпечно ділитися через будь-який месенджер. No comment provided by engineer. SimpleX address or 1-time link? + SimpleX адреса або одноразове посилання? No comment provided by engineer. @@ -6576,6 +6724,7 @@ Enable in *Network & servers* settings. SimpleX protocols reviewed by Trail of Bits. + Протоколи SimpleX, розглянуті Trail of Bits. No comment provided by engineer. @@ -6610,6 +6759,7 @@ Enable in *Network & servers* settings. Some app settings were not migrated. + Деякі налаштування програми не були перенесені. No comment provided by engineer. @@ -6630,6 +6780,8 @@ Enable in *Network & servers* settings. Some servers failed the test: %@ + Деякі сервери не пройшли тестування: +%@ alert message @@ -6754,10 +6906,12 @@ Enable in *Network & servers* settings. Switch audio and video during the call. + Перемикайте аудіо та відео під час дзвінка. No comment provided by engineer. Switch chat profile for 1-time invitations. + Переключіть профіль чату для отримання одноразових запрошень. No comment provided by engineer. @@ -6797,6 +6951,7 @@ Enable in *Network & servers* settings. Tail + Хвіст No comment provided by engineer. @@ -6897,6 +7052,7 @@ It can happen because of some bug or when the connection is compromised. The app protects your privacy by using different operators in each conversation. + Додаток захищає вашу конфіденційність, використовуючи різних операторів у кожній розмові. No comment provided by engineer. @@ -6916,6 +7072,7 @@ It can happen because of some bug or when the connection is compromised. The connection reached the limit of undelivered messages, your contact may be offline. + З'єднання досягло ліміту недоставлених повідомлень, ваш контакт може бути офлайн. No comment provided by engineer. @@ -6980,6 +7137,7 @@ It can happen because of some bug or when the connection is compromised. The second preset operator in the app! + Другий попередньо встановлений оператор у застосунку! No comment provided by engineer. @@ -6999,6 +7157,7 @@ It can happen because of some bug or when the connection is compromised. The servers for new files of your current chat profile **%@**. + Сервери для нових файлів вашого поточного профілю чату **%@**. No comment provided by engineer. @@ -7008,6 +7167,7 @@ It can happen because of some bug or when the connection is compromised. The uploaded database archive will be permanently removed from the servers. + Завантажений архів бази даних буде назавжди видалено з серверів. No comment provided by engineer. @@ -7017,6 +7177,7 @@ It can happen because of some bug or when the connection is compromised. These conditions will also apply for: **%@**. + Ці умови також поширюються на: **%@**. No comment provided by engineer. @@ -7121,6 +7282,7 @@ It can happen because of some bug or when the connection is compromised. To protect against your link being replaced, you can compare contact security codes. + Щоб захиститися від заміни вашого посилання, ви можете порівняти коди безпеки контактів. No comment provided by engineer. @@ -7147,14 +7309,17 @@ You will be prompted to complete authentication before this feature is enabled.< To receive + Щоб отримати No comment provided by engineer. To record speech please grant permission to use Microphone. + Для запису промови, будь ласка, надайте дозвіл на використання мікрофону. No comment provided by engineer. To record video please grant permission to use Camera. + Для запису відео, будь ласка, надайте дозвіл на використання камери. No comment provided by engineer. @@ -7169,6 +7334,7 @@ You will be prompted to complete authentication before this feature is enabled.< To send + Щоб відправити No comment provided by engineer. @@ -7178,6 +7344,7 @@ You will be prompted to complete authentication before this feature is enabled.< To use the servers of **%@**, accept conditions of use. + Щоб користуватися серверами **%@**, прийміть умови використання. No comment provided by engineer. @@ -7272,6 +7439,7 @@ You will be prompted to complete authentication before this feature is enabled.< Undelivered messages + Недоставлені повідомлення No comment provided by engineer. @@ -7433,6 +7601,7 @@ To connect, please ask your contact to create another connection link and check Use %@ + Використовуйте %@ No comment provided by engineer. @@ -7442,6 +7611,7 @@ To connect, please ask your contact to create another connection link and check Use SOCKS proxy + Використовуйте SOCKS проксі No comment provided by engineer. @@ -7461,10 +7631,12 @@ To connect, please ask your contact to create another connection link and check Use for files + Використовуйте для файлів No comment provided by engineer. Use for messages + Використовуйте для повідомлень No comment provided by engineer. @@ -7509,6 +7681,7 @@ To connect, please ask your contact to create another connection link and check Use servers + Використовуйте сервери No comment provided by engineer. @@ -7528,6 +7701,7 @@ To connect, please ask your contact to create another connection link and check Username + Ім'я користувача No comment provided by engineer. @@ -7602,6 +7776,7 @@ To connect, please ask your contact to create another connection link and check View conditions + Умови перегляду No comment provided by engineer. @@ -7611,6 +7786,7 @@ To connect, please ask your contact to create another connection link and check View updated conditions + Переглянути оновлені умови No comment provided by engineer. @@ -7725,6 +7901,7 @@ To connect, please ask your contact to create another connection link and check When more than one operator is enabled, none of them has metadata to learn who communicates with whom. + Коли увімкнено більше одного оператора, жоден з них не має метаданих, щоб дізнатися, хто з ким спілкується. No comment provided by engineer. @@ -7822,6 +7999,10 @@ To connect, please ask your contact to create another connection link and check Ви вже підключені до %@. No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. Ви вже з'єднані з %@. @@ -7886,10 +8067,12 @@ Repeat join request? You can configure operators in Network & servers settings. + Ви можете налаштувати операторів у налаштуваннях Мережі та серверів. No comment provided by engineer. You can configure servers via settings. + Ви можете налаштувати сервери за допомогою налаштувань. No comment provided by engineer. @@ -7934,6 +8117,7 @@ Repeat join request? You can set connection name, to remember who the link was shared with. + Ви можете задати ім'я з'єднання, щоб запам'ятати, з ким ви поділилися посиланням. No comment provided by engineer. @@ -8145,6 +8329,7 @@ Repeat connection request? Your chat preferences + Ваші налаштування чату alert title @@ -8154,6 +8339,7 @@ Repeat connection request? Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile. + Ваше з'єднання було переміщено на %@, але під час перенаправлення на профіль сталася несподівана помилка. No comment provided by engineer. @@ -8173,6 +8359,7 @@ Repeat connection request? Your credentials may be sent unencrypted. + Ваші облікові дані можуть бути надіслані незашифрованими. No comment provided by engineer. @@ -8212,6 +8399,7 @@ Repeat connection request? Your profile was changed. If you save it, the updated profile will be sent to all your contacts. + Ваш профіль було змінено. Якщо ви збережете його, оновлений профіль буде надіслано всім вашим контактам. alert message @@ -8231,6 +8419,7 @@ Repeat connection request? Your servers + Ваші сервери No comment provided by engineer. @@ -8655,6 +8844,7 @@ Repeat connection request? for better metadata privacy. + для кращої конфіденційності метаданих. No comment provided by engineer. @@ -9286,22 +9476,27 @@ last received msg: %2$@ %d new events + %d нових подій notification body From: %@ + Від: %@ notification body New events + Нові події notification New messages + Нові повідомлення notification New messages in %d chats + Нові повідомлення в чатах %d notification body diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 1663530290..300a33d7b4 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 @@ -622,6 +622,10 @@ 将地址添加到您的个人资料,以便您的联系人可以与其他人共享。个人资料更新将发送给您的联系人。 No comment provided by engineer. + + Add friends + No comment provided by engineer. + Add profile 添加个人资料 @@ -637,6 +641,10 @@ 扫描二维码来添加服务器。 No comment provided by engineer. + + Add team members + No comment provided by engineer. + Add to another device 添加另一设备 @@ -647,6 +655,10 @@ 添加欢迎信息 No comment provided by engineer. + + Add your team members to the conversations. + No comment provided by engineer. + Added media & file servers No comment provided by engineer. @@ -1205,6 +1217,10 @@ 保加利亚语、芬兰语、泰语和乌克兰语——感谢用户和[Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)! No comment provided by engineer. + + Business address + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). 通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。 @@ -1346,6 +1362,14 @@ Change user profiles authentication reason + + Chat already exists + No comment provided by engineer. + + + Chat already exists! + No comment provided by engineer. + Chat colors 聊天颜色 @@ -7819,6 +7843,10 @@ To connect, please ask your contact to create another connection link and check 您已经连接到 %@。 No comment provided by engineer. + + You are already connected with %@. + No comment provided by engineer. + You are already connecting to %@. 您已连接到 %@。 diff --git a/apps/ios/SimpleX NSE/de.lproj/Localizable.strings b/apps/ios/SimpleX NSE/de.lproj/Localizable.strings index 5ef592ec70..f9779c6e05 100644 --- a/apps/ios/SimpleX NSE/de.lproj/Localizable.strings +++ b/apps/ios/SimpleX NSE/de.lproj/Localizable.strings @@ -1,7 +1,15 @@ -/* - Localizable.strings - SimpleX +/* notification body */ +"%d new events" = "%d neue Ereignisse"; + +/* notification body */ +"From: %@" = "Von: %@"; + +/* notification */ +"New events" = "Neue Ereignisse"; + +/* notification */ +"New messages" = "Neue Nachrichten"; + +/* notification body */ +"New messages in %d chats" = "Neue Nachrichten in %d Chats"; - Created by EP on 30/07/2024. - Copyright © 2024 SimpleX Chat. All rights reserved. -*/ diff --git a/apps/ios/SimpleX NSE/es.lproj/Localizable.strings b/apps/ios/SimpleX NSE/es.lproj/Localizable.strings index 5ef592ec70..fb190400e1 100644 --- a/apps/ios/SimpleX NSE/es.lproj/Localizable.strings +++ b/apps/ios/SimpleX NSE/es.lproj/Localizable.strings @@ -1,7 +1,15 @@ -/* - Localizable.strings - SimpleX +/* notification body */ +"%d new events" = "%d evento(s) nuevo(s)"; + +/* notification body */ +"From: %@" = "De: %@"; + +/* notification */ +"New events" = "Eventos nuevos"; + +/* notification */ +"New messages" = "Mensajes nuevos"; + +/* notification body */ +"New messages in %d chats" = "Mensajes nuevos en %d chat(s)"; - Created by EP on 30/07/2024. - Copyright © 2024 SimpleX Chat. All rights reserved. -*/ diff --git a/apps/ios/SimpleX NSE/hu.lproj/Localizable.strings b/apps/ios/SimpleX NSE/hu.lproj/Localizable.strings index 5ef592ec70..e64c98df9e 100644 --- a/apps/ios/SimpleX NSE/hu.lproj/Localizable.strings +++ b/apps/ios/SimpleX NSE/hu.lproj/Localizable.strings @@ -1,7 +1,15 @@ -/* - Localizable.strings - SimpleX +/* notification body */ +"%d new events" = "%d új esemény"; + +/* notification body */ +"From: %@" = "Tőle: %@"; + +/* notification */ +"New events" = "Új események"; + +/* notification */ +"New messages" = "Új üzenetek"; + +/* notification body */ +"New messages in %d chats" = "Új üzenetek %d csevegésben"; - Created by EP on 30/07/2024. - Copyright © 2024 SimpleX Chat. All rights reserved. -*/ diff --git a/apps/ios/SimpleX NSE/it.lproj/Localizable.strings b/apps/ios/SimpleX NSE/it.lproj/Localizable.strings index 5ef592ec70..31f463eb5b 100644 --- a/apps/ios/SimpleX NSE/it.lproj/Localizable.strings +++ b/apps/ios/SimpleX NSE/it.lproj/Localizable.strings @@ -1,7 +1,15 @@ -/* - Localizable.strings - SimpleX +/* notification body */ +"%d new events" = "%d nuovi eventi"; + +/* notification body */ +"From: %@" = "Da: %@"; + +/* notification */ +"New events" = "Nuovi eventi"; + +/* notification */ +"New messages" = "Nuovi messaggi"; + +/* notification body */ +"New messages in %d chats" = "Nuovi messaggi in %d chat"; - Created by EP on 30/07/2024. - Copyright © 2024 SimpleX Chat. All rights reserved. -*/ diff --git a/apps/ios/SimpleX NSE/nl.lproj/Localizable.strings b/apps/ios/SimpleX NSE/nl.lproj/Localizable.strings index 5ef592ec70..4cf91689b5 100644 --- a/apps/ios/SimpleX NSE/nl.lproj/Localizable.strings +++ b/apps/ios/SimpleX NSE/nl.lproj/Localizable.strings @@ -1,7 +1,15 @@ -/* - Localizable.strings - SimpleX +/* notification body */ +"%d new events" = "‐%d nieuwe gebeurtenissen"; + +/* notification body */ +"From: %@" = "Van: %@"; + +/* notification */ +"New events" = "Nieuwe gebeurtenissen"; + +/* notification */ +"New messages" = "Nieuwe berichten"; + +/* notification body */ +"New messages in %d chats" = "Nieuwe berichten in %d chats"; - Created by EP on 30/07/2024. - Copyright © 2024 SimpleX Chat. All rights reserved. -*/ diff --git a/apps/ios/SimpleX NSE/uk.lproj/Localizable.strings b/apps/ios/SimpleX NSE/uk.lproj/Localizable.strings index 5ef592ec70..69cc53bff1 100644 --- a/apps/ios/SimpleX NSE/uk.lproj/Localizable.strings +++ b/apps/ios/SimpleX NSE/uk.lproj/Localizable.strings @@ -1,7 +1,15 @@ -/* - Localizable.strings - SimpleX +/* notification body */ +"%d new events" = "%d нових подій"; + +/* notification body */ +"From: %@" = "Від: %@"; + +/* notification */ +"New events" = "Нові події"; + +/* notification */ +"New messages" = "Нові повідомлення"; + +/* notification body */ +"New messages in %d chats" = "Нові повідомлення в чатах %d"; - Created by EP on 30/07/2024. - Copyright © 2024 SimpleX Chat. All rights reserved. -*/ diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index f680727010..1e92d094b4 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -82,6 +82,9 @@ /* No comment provided by engineer. */ "**Recommended**: device token and end-to-end encrypted notifications are sent to SimpleX Chat push server, but it does not see the message content, size or who it is from." = "**Empfohlen**: Nur Ihr Geräte-Token und ihre Benachrichtigungen werden an den SimpleX-Chat-Benachrichtigungs-Server gesendet, aber weder der Nachrichteninhalt noch deren Größe oder von wem sie gesendet wurde."; +/* No comment provided by engineer. */ +"**Scan / Paste link**: to connect via a link you received." = "**Link scannen / einfügen**: Um eine Verbindung über den Link herzustellen, den Sie erhalten haben."; + /* No comment provided by engineer. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Warnung**: Sofortige Push-Benachrichtigungen erfordern die Eingabe eines Passworts, welches in Ihrem Schlüsselbund gespeichert ist."; @@ -142,6 +145,12 @@ /* No comment provided by engineer. */ "%@ is verified" = "%@ wurde erfolgreich überprüft"; +/* No comment provided by engineer. */ +"%@ server" = "%@ Server"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ Server"; + /* No comment provided by engineer. */ "%@ uploaded" = "%@ hochgeladen"; @@ -295,6 +304,12 @@ /* time interval */ "1 week" = "wöchentlich"; +/* No comment provided by engineer. */ +"1-time link" = "Einmal-Link"; + +/* No comment provided by engineer. */ +"1-time link can be used *with one contact only* - share in person or via any messenger." = "Ein Einmal-Link kann *nur mit einem Kontakt* genutzt werden - teilen Sie in nur persönlich oder über einen beliebigen Messenger."; + /* No comment provided by engineer. */ "5 minutes" = "5 Minuten"; @@ -342,6 +357,9 @@ swipe action */ "Accept" = "Annehmen"; +/* No comment provided by engineer. */ +"Accept conditions" = "Nutzungsbedingungen akzeptieren"; + /* No comment provided by engineer. */ "Accept connection request?" = "Kontaktanfrage annehmen?"; @@ -355,6 +373,9 @@ /* call status */ "accepted call" = "Anruf angenommen"; +/* No comment provided by engineer. */ +"Accepted conditions" = "Akzeptierte Nutzungsbedingungen"; + /* No comment provided by engineer. */ "Acknowledged" = "Bestätigt"; @@ -382,6 +403,12 @@ /* No comment provided by engineer. */ "Add welcome message" = "Begrüßungsmeldung hinzufügen"; +/* No comment provided by engineer. */ +"Added media & file servers" = "Medien- und Dateiserver hinzugefügt"; + +/* No comment provided by engineer. */ +"Added message servers" = "Nachrichtenserver hinzugefügt"; + /* No comment provided by engineer. */ "Additional accent" = "Erste Akzentfarbe"; @@ -397,6 +424,12 @@ /* No comment provided by engineer. */ "Address change will be aborted. Old receiving address will be used." = "Der Wechsel der Empfängeradresse wird beendet. Die bisherige Adresse wird weiter verwendet."; +/* No comment provided by engineer. */ +"Address or 1-time link?" = "Adress- oder Einmal-Link?"; + +/* No comment provided by engineer. */ +"Address settings" = "Adress-Einstellungen"; + /* member role */ "admin" = "Admin"; @@ -439,6 +472,9 @@ /* feature role */ "all members" = "Alle Mitglieder"; +/* No comment provided by engineer. */ +"All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages." = "Alle Nachrichten und Dateien werden **Ende-zu-Ende verschlüsselt** versendet - in Direkt-Nachrichten mit Post-Quantum-Security."; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Es werden alle Nachrichten gelöscht. Dies kann nicht rückgängig gemacht werden!"; @@ -855,6 +891,9 @@ set passcode view */ "Change self-destruct passcode" = "Selbstzerstörungs-Zugangscode ändern"; +/* authentication reason */ +"Change user profiles" = "Chat-Profile wechseln"; + /* chat item text */ "changed address for you" = "Wechselte die Empfängeradresse von Ihnen"; @@ -918,6 +957,12 @@ /* No comment provided by engineer. */ "Chats" = "Chats"; +/* No comment provided by engineer. */ +"Check messages every 20 min." = "Alle 20min Nachrichten überprüfen."; + +/* No comment provided by engineer. */ +"Check messages when allowed." = "Wenn es erlaubt ist, Nachrichten überprüfen."; + /* alert title */ "Check server address and try again." = "Überprüfen Sie die Serveradresse und versuchen Sie es nochmal."; @@ -978,6 +1023,33 @@ /* No comment provided by engineer. */ "Completed" = "Abgeschlossen"; +/* No comment provided by engineer. */ +"Conditions accepted on: %@." = "Die Nutzungsbedingungen wurden akzeptiert am: %@."; + +/* No comment provided by engineer. */ +"Conditions are accepted for the operator(s): **%@**." = "Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**."; + +/* No comment provided by engineer. */ +"Conditions are already accepted for following operator(s): **%@**." = "Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**."; + +/* No comment provided by engineer. */ +"Conditions of use" = "Nutzungsbedingungen"; + +/* No comment provided by engineer. */ +"Conditions will be accepted for enabled operators after 30 days." = "Die Nutzungsbedingungen der aktivierten Betreiber werden nach 30 Tagen akzeptiert."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for operator(s): **%@**." = "Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for the operator(s): **%@**." = "Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted on: %@." = "Die Nutzungsbedingungen werden akzeptiert am: %@."; + +/* No comment provided by engineer. */ +"Conditions will be automatically accepted for enabled operators on: %@." = "Die Nutzungsbedingungen der aktivierten Betreiber werden automatisch akzeptiert am: %@."; + /* No comment provided by engineer. */ "Configure ICE servers" = "ICE-Server konfigurieren"; @@ -1125,6 +1197,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "Verbindungsanfrage wurde gesendet!"; +/* No comment provided by engineer. */ +"Connection security" = "Verbindungs-Sicherheit"; + /* No comment provided by engineer. */ "Connection terminated" = "Verbindung beendet"; @@ -1206,6 +1281,9 @@ /* No comment provided by engineer. */ "Create" = "Erstellen"; +/* No comment provided by engineer. */ +"Create 1-time link" = "Einmal-Link erstellen"; + /* No comment provided by engineer. */ "Create a group using a random profile." = "Erstellen Sie eine Gruppe mit einem zufälligen Profil."; @@ -1257,6 +1335,9 @@ /* No comment provided by engineer. */ "creator" = "Ersteller"; +/* No comment provided by engineer. */ +"Current conditions text couldn't be loaded, you can review conditions via this link:" = "Der Text der aktuellen Nutzungsbedingungen konnte nicht geladen werden. Sie können die Nutzungsbedingungen unter diesem Link einsehen:"; + /* No comment provided by engineer. */ "Current Passcode" = "Aktueller Zugangscode"; @@ -1505,6 +1586,9 @@ /* No comment provided by engineer. */ "Deletion errors" = "Fehler beim Löschen"; +/* No comment provided by engineer. */ +"Delivered even when Apple drops them." = "Auslieferung, selbst wenn Apple sie löscht."; + /* No comment provided by engineer. */ "Delivery" = "Zustellung"; @@ -1692,6 +1776,9 @@ /* No comment provided by engineer. */ "e2e encrypted" = "E2E-verschlüsselt"; +/* No comment provided by engineer. */ +"E2E encrypted notifications." = "E2E-verschlüsselte Benachrichtigungen."; + /* chat item action */ "Edit" = "Bearbeiten"; @@ -1710,6 +1797,9 @@ /* No comment provided by engineer. */ "Enable camera access" = "Kamera-Zugriff aktivieren"; +/* No comment provided by engineer. */ +"Enable Flux" = "Flux aktivieren"; + /* No comment provided by engineer. */ "Enable for all" = "Für Alle aktivieren"; @@ -1869,12 +1959,18 @@ /* No comment provided by engineer. */ "Error aborting address change" = "Fehler beim Beenden des Adresswechsels"; +/* alert title */ +"Error accepting conditions" = "Fehler beim Akzeptieren der Nutzungsbedingungen"; + /* No comment provided by engineer. */ "Error accepting contact request" = "Fehler beim Annehmen der Kontaktanfrage"; /* No comment provided by engineer. */ "Error adding member(s)" = "Fehler beim Hinzufügen von Mitgliedern"; +/* alert title */ +"Error adding server" = "Fehler beim Hinzufügen des Servers"; + /* No comment provided by engineer. */ "Error changing address" = "Fehler beim Wechseln der Empfängeradresse"; @@ -1959,6 +2055,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Fehler beim Beitritt zur Gruppe"; +/* alert title */ +"Error loading servers" = "Fehler beim Laden der Server"; + /* No comment provided by engineer. */ "Error migrating settings" = "Fehler beim Migrieren der Einstellungen"; @@ -1992,6 +2091,9 @@ /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Fehler beim Speichern des Passworts in den Schlüsselbund"; +/* alert title */ +"Error saving servers" = "Fehler beim Speichern der Server"; + /* when migrating */ "Error saving settings" = "Fehler beim Abspeichern der Einstellungen"; @@ -2034,6 +2136,9 @@ /* No comment provided by engineer. */ "Error updating message" = "Fehler beim Aktualisieren der Nachricht"; +/* alert title */ +"Error updating server" = "Fehler beim Aktualisieren des Servers"; + /* No comment provided by engineer. */ "Error updating settings" = "Fehler beim Aktualisieren der Einstellungen"; @@ -2061,6 +2166,9 @@ /* No comment provided by engineer. */ "Errors" = "Fehler"; +/* servers error */ +"Errors in servers configuration." = "Fehler in der Server-Konfiguration."; + /* No comment provided by engineer. */ "Even when disabled in the conversation." = "Auch wenn sie im Chat deaktiviert sind."; @@ -2187,9 +2295,24 @@ /* No comment provided by engineer. */ "Fix not supported by group member" = "Reparatur wird vom Gruppenmitglied nicht unterstützt"; +/* No comment provided by engineer. */ +"for better metadata privacy." = "für einen besseren Metadatenschutz."; + +/* servers error */ +"For chat profile %@:" = "Für das Chat-Profil %@:"; + /* No comment provided by engineer. */ "For console" = "Für Konsole"; +/* No comment provided by engineer. */ +"For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server." = "Wenn Ihr Kontakt beispielsweise Nachrichten über einen SimpleX-Chatserver empfängt, wird Ihre App diese über einen der Server von Flux versenden."; + +/* No comment provided by engineer. */ +"For private routing" = "Für privates Routing"; + +/* No comment provided by engineer. */ +"For social media" = "Für soziale Medien"; + /* chat item action */ "Forward" = "Weiterleiten"; @@ -2382,6 +2505,12 @@ /* time unit */ "hours" = "Stunden"; +/* No comment provided by engineer. */ +"How it affects privacy" = "Wie es die Privatsphäre beeinflusst"; + +/* No comment provided by engineer. */ +"How it helps privacy" = "Wie es die Privatsphäre schützt"; + /* No comment provided by engineer. */ "How SimpleX works" = "Wie SimpleX funktioniert"; @@ -2958,6 +3087,9 @@ /* No comment provided by engineer. */ "More reliable network connection." = "Zuverlässigere Netzwerkverbindung."; +/* No comment provided by engineer. */ +"More reliable notifications" = "Zuverlässigere Benachrichtigungen"; + /* item status description */ "Most likely this connection is deleted." = "Wahrscheinlich ist diese Verbindung gelöscht worden."; @@ -2982,12 +3114,18 @@ /* No comment provided by engineer. */ "Network connection" = "Netzwerkverbindung"; +/* No comment provided by engineer. */ +"Network decentralization" = "Dezentralisiertes Netzwerk"; + /* snd error text */ "Network issues - message expired after many attempts to send it." = "Netzwerk-Fehler - die Nachricht ist nach vielen Sende-Versuchen abgelaufen."; /* No comment provided by engineer. */ "Network management" = "Netzwerk-Verwaltung"; +/* No comment provided by engineer. */ +"Network operator" = "Netzwerk-Betreiber"; + /* No comment provided by engineer. */ "Network settings" = "Netzwerkeinstellungen"; @@ -3015,6 +3153,9 @@ /* No comment provided by engineer. */ "New display name" = "Neuer Anzeigename"; +/* notification */ +"New events" = "Neue Ereignisse"; + /* No comment provided by engineer. */ "New in %@" = "Neu in %@"; @@ -3036,6 +3177,9 @@ /* No comment provided by engineer. */ "New passphrase…" = "Neues Passwort…"; +/* No comment provided by engineer. */ +"New server" = "Neuer Server"; + /* No comment provided by engineer. */ "New SOCKS credentials will be used every time you start the app." = "Jedes Mal wenn Sie die App starten, werden neue SOCKS-Anmeldeinformationen genutzt"; @@ -3081,6 +3225,12 @@ /* No comment provided by engineer. */ "No info, try to reload" = "Keine Information - es wird versucht neu zu laden"; +/* servers error */ +"No media & file servers." = "Keine Medien- und Dateiserver."; + +/* servers error */ +"No message servers." = "Keine Nachrichten-Server."; + /* No comment provided by engineer. */ "No network connection" = "Keine Netzwerkverbindung"; @@ -3099,6 +3249,18 @@ /* No comment provided by engineer. */ "No received or sent files" = "Keine empfangenen oder gesendeten Dateien"; +/* servers error */ +"No servers for private message routing." = "Keine Server für privates Nachrichten-Routing."; + +/* servers error */ +"No servers to receive files." = "Keine Server für den Empfang von Dateien."; + +/* servers error */ +"No servers to receive messages." = "Keine Server für den Empfang von Nachrichten."; + +/* servers error */ +"No servers to send files." = "Keine Server für das Versenden von Dateien."; + /* copied message info in history */ "no text" = "Kein Text"; @@ -3120,6 +3282,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Benachrichtigungen sind deaktiviert!"; +/* No comment provided by engineer. */ +"Notifications privacy" = "Datenschutz für Benachrichtigungen"; + /* No comment provided by engineer. */ "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Administratoren können nun\n- Nachrichten von Gruppenmitgliedern löschen\n- Gruppenmitglieder deaktivieren (\"Beobachter\"-Rolle)"; @@ -3212,12 +3377,18 @@ /* No comment provided by engineer. */ "Open" = "Öffnen"; +/* No comment provided by engineer. */ +"Open changes" = "Änderungen öffnen"; + /* No comment provided by engineer. */ "Open chat" = "Chat öffnen"; /* authentication reason */ "Open chat console" = "Chat-Konsole öffnen"; +/* No comment provided by engineer. */ +"Open conditions" = "Nutzungsbedingungen öffnen"; + /* No comment provided by engineer. */ "Open group" = "Gruppe öffnen"; @@ -3230,6 +3401,12 @@ /* No comment provided by engineer. */ "Opening app…" = "App wird geöffnet…"; +/* No comment provided by engineer. */ +"Operator" = "Betreiber"; + +/* alert title */ +"Operator server" = "Betreiber-Server"; + /* No comment provided by engineer. */ "Or paste archive link" = "Oder fügen Sie den Archiv-Link ein"; @@ -3242,6 +3419,9 @@ /* No comment provided by engineer. */ "Or show this code" = "Oder diesen QR-Code anzeigen"; +/* No comment provided by engineer. */ +"Or to share privately" = "Oder zum privaten Teilen"; + /* No comment provided by engineer. */ "other" = "Andere"; @@ -3383,6 +3563,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Voreingestellte Serveradresse"; +/* No comment provided by engineer. */ +"Preset servers" = "Voreingestellte Server"; + /* No comment provided by engineer. */ "Preview" = "Vorschau"; @@ -3488,6 +3671,9 @@ /* No comment provided by engineer. */ "Push notifications" = "Push-Benachrichtigungen"; +/* No comment provided by engineer. */ +"Push Notifications" = "Push-Benachrichtigungen"; + /* No comment provided by engineer. */ "Push server" = "Push-Server"; @@ -3735,6 +3921,12 @@ /* chat item action */ "Reveal" = "Aufdecken"; +/* No comment provided by engineer. */ +"Review conditions" = "Nutzungsbedingungen einsehen"; + +/* No comment provided by engineer. */ +"Review later" = "Später einsehen"; + /* No comment provided by engineer. */ "Revoke" = "Widerrufen"; @@ -3756,6 +3948,12 @@ /* No comment provided by engineer. */ "Safer groups" = "Sicherere Gruppen"; +/* No comment provided by engineer. */ +"Same conditions will apply to operator **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**."; + +/* No comment provided by engineer. */ +"Same conditions will apply to operator(s): **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den/die Betreiber: **%@**."; + /* alert button chat item action */ "Save" = "Speichern"; @@ -4021,6 +4219,9 @@ /* No comment provided by engineer. */ "Server" = "Server"; +/* alert message */ +"Server added to operator %@." = "Der Server wurde dem Betreiber %@ hinzugefügt."; + /* No comment provided by engineer. */ "Server address" = "Server-Adresse"; @@ -4030,6 +4231,15 @@ /* srv error text. */ "Server address is incompatible with network settings." = "Die Server-Adresse ist nicht mit den Netzwerkeinstellungen kompatibel."; +/* alert title */ +"Server operator changed." = "Der Server-Betreiber wurde geändert."; + +/* No comment provided by engineer. */ +"Server operators" = "Server-Betreiber"; + +/* alert title */ +"Server protocol changed." = "Das Server-Protokoll wurde geändert."; + /* queue info */ "server queue info: %@\n\nlast received msg: %@" = "Server-Warteschlangen-Information: %1$@\n\nZuletzt empfangene Nachricht: %2$@"; @@ -4115,9 +4325,15 @@ /* No comment provided by engineer. */ "Share 1-time link" = "Einmal-Link teilen"; +/* No comment provided by engineer. */ +"Share 1-time link with a friend" = "Den Einmal-Einladungslink mit einem Freund teilen"; + /* No comment provided by engineer. */ "Share address" = "Adresse teilen"; +/* No comment provided by engineer. */ +"Share address publicly" = "Die Adresse öffentlich teilen"; + /* alert title */ "Share address with contacts?" = "Die Adresse mit Kontakten teilen?"; @@ -4130,6 +4346,9 @@ /* No comment provided by engineer. */ "Share profile" = "Profil teilen"; +/* No comment provided by engineer. */ +"Share SimpleX address on social media." = "Die SimpleX-Adresse auf sozialen Medien teilen."; + /* No comment provided by engineer. */ "Share this 1-time invite link" = "Teilen Sie diesen Einmal-Einladungslink"; @@ -4175,6 +4394,12 @@ /* No comment provided by engineer. */ "SimpleX Address" = "SimpleX-Adresse"; +/* No comment provided by engineer. */ +"SimpleX address and 1-time links are safe to share via any messenger." = "Die SimpleX-Adresse und Einmal-Links können sicher über beliebige Messenger geteilt werden."; + +/* No comment provided by engineer. */ +"SimpleX address or 1-time link?" = "SimpleX-Adresse oder Einmal-Link?"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft."; @@ -4250,6 +4475,9 @@ /* No comment provided by engineer. */ "Some non-fatal errors occurred during import:" = "Während des Imports traten ein paar nicht schwerwiegende Fehler auf:"; +/* alert message */ +"Some servers failed the test:\n%@" = "Einige Server haben den Test nicht bestanden:\n%@"; + /* notification title */ "Somebody" = "Jemand"; @@ -4412,6 +4640,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "Wenn sie Nachrichten oder Kontaktanfragen empfangen, kann Sie die App benachrichtigen - Um dies zu aktivieren, öffnen Sie bitte die Einstellungen."; +/* No comment provided by engineer. */ +"The app protects your privacy by using different operators in each conversation." = "Durch Verwendung verschiedener Netzwerk-Betreiber für jede Unterhaltung schützt die App Ihre Privatsphäre."; + /* No comment provided by engineer. */ "The app will ask to confirm downloads from unknown file servers (except .onion)." = "Die App wird eine Bestätigung bei Downloads von unbekannten Datei-Servern anfordern (außer bei .onion)."; @@ -4421,6 +4652,9 @@ /* No comment provided by engineer. */ "The code you scanned is not a SimpleX link QR code." = "Der von Ihnen gescannte Code ist kein SimpleX-Link-QR-Code."; +/* No comment provided by engineer. */ +"The connection reached the limit of undelivered messages, your contact may be offline." = "Diese Verbindung hat das Limit der nicht ausgelieferten Nachrichten erreicht. Ihr Kontakt ist möglicherweise offline."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "Die von Ihnen akzeptierte Verbindung wird abgebrochen!"; @@ -4460,6 +4694,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Das Profil wird nur mit Ihren Kontakten geteilt."; +/* No comment provided by engineer. */ +"The second preset operator in the app!" = "Der zweite voreingestellte Netzwerk-Betreiber in der App!"; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "Wir haben das zweite Häkchen vermisst! ✅"; @@ -4469,6 +4706,9 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "Mögliche Server für neue Verbindungen von Ihrem aktuellen Chat-Profil **%@**."; +/* No comment provided by engineer. */ +"The servers for new files of your current chat profile **%@**." = "Die Server Deines aktuellen Chat-Profils für neue Dateien **%@**."; + /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "Der von Ihnen eingefügte Text ist kein SimpleX-Link."; @@ -4478,6 +4718,9 @@ /* No comment provided by engineer. */ "Themes" = "Design"; +/* No comment provided by engineer. */ +"These conditions will also apply for: **%@**." = "Diese Nutzungsbedingungen gelten auch für: **%@**."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Diese Einstellungen betreffen Ihr aktuelles Profil **%@**."; @@ -4541,6 +4784,9 @@ /* No comment provided by engineer. */ "To make a new connection" = "Um eine Verbindung mit einem neuen Kontakt zu erstellen"; +/* No comment provided by engineer. */ +"To protect against your link being replaced, you can compare contact security codes." = "Zum Schutz vor dem Austausch Ihres Links können Sie die Sicherheitscodes Ihrer Kontakte vergleichen."; + /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen."; @@ -4553,6 +4799,9 @@ /* No comment provided by engineer. */ "To protect your privacy, SimpleX uses separate IDs for each of your contacts." = "Zum Schutz Ihrer Privatsphäre verwendet SimpleX an Stelle von Benutzerkennungen, die von allen anderen Plattformen verwendet werden, Kennungen für Nachrichtenwarteschlangen, die für jeden Ihrer Kontakte individuell sind."; +/* No comment provided by engineer. */ +"To receive" = "Für den Empfang"; + /* No comment provided by engineer. */ "To record speech please grant permission to use Microphone." = "Bitte erteilen Sie für Sprach-Aufnahmen die Genehmigung das Mikrofon zu nutzen."; @@ -4565,9 +4814,15 @@ /* No comment provided by engineer. */ "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Geben Sie ein vollständiges Passwort in das Suchfeld auf der Seite **Ihre Chat-Profile** ein, um Ihr verborgenes Profil zu sehen."; +/* No comment provided by engineer. */ +"To send" = "Für das Senden"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Um sofortige Push-Benachrichtigungen zu unterstützen, muss die Chat-Datenbank migriert werden."; +/* No comment provided by engineer. */ +"To use the servers of **%@**, accept conditions of use." = "Um die Server von **%@** zu nutzen, müssen Sie dessen Nutzungsbedingungen akzeptieren."; + /* No comment provided by engineer. */ "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Um die Ende-zu-Ende-Verschlüsselung mit Ihrem Kontakt zu überprüfen, müssen Sie den Sicherheitscode in Ihren Apps vergleichen oder scannen."; @@ -4625,6 +4880,9 @@ /* rcv group event chat item */ "unblocked %@" = "%@ wurde freigegeben"; +/* No comment provided by engineer. */ +"Undelivered messages" = "Nicht ausgelieferte Nachrichten"; + /* No comment provided by engineer. */ "Unexpected migration state" = "Unerwarteter Migrationsstatus"; @@ -4742,12 +5000,21 @@ /* No comment provided by engineer. */ "Use .onion hosts" = "Verwende .onion-Hosts"; +/* No comment provided by engineer. */ +"Use %@" = "Verwende %@"; + /* No comment provided by engineer. */ "Use chat" = "Verwenden Sie Chat"; /* No comment provided by engineer. */ "Use current profile" = "Aktuelles Profil nutzen"; +/* No comment provided by engineer. */ +"Use for files" = "Für Dateien verwenden"; + +/* No comment provided by engineer. */ +"Use for messages" = "Für Nachrichten verwenden"; + /* No comment provided by engineer. */ "Use for new connections" = "Für neue Verbindungen nutzen"; @@ -4772,6 +5039,9 @@ /* No comment provided by engineer. */ "Use server" = "Server nutzen"; +/* No comment provided by engineer. */ +"Use servers" = "Verwende Server"; + /* No comment provided by engineer. */ "Use SimpleX Chat servers?" = "Verwenden Sie SimpleX-Chat-Server?"; @@ -4856,9 +5126,15 @@ /* No comment provided by engineer. */ "Videos and files up to 1gb" = "Videos und Dateien bis zu 1GB"; +/* No comment provided by engineer. */ +"View conditions" = "Nutzungsbedingungen anschauen"; + /* No comment provided by engineer. */ "View security code" = "Schauen Sie sich den Sicherheitscode an"; +/* No comment provided by engineer. */ +"View updated conditions" = "Aktualisierte Nutzungsbedingungen anschauen"; + /* chat feature */ "Visible history" = "Sichtbarer Nachrichtenverlauf"; @@ -4940,6 +5216,9 @@ /* No comment provided by engineer. */ "when IP hidden" = "Wenn die IP-Adresse versteckt ist"; +/* No comment provided by engineer. */ +"When more than one operator is enabled, none of them has metadata to learn who communicates with whom." = "Wenn mehrere Netzwerk-Betreiber aktiviert sind, hat keiner von ihnen Metadaten, um zu erfahren, wer mit wem kommuniziert."; + /* 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." = "Wenn Sie ein Inkognito-Profil mit Jemandem teilen, wird dieses Profil auch für die Gruppen verwendet, für die Sie von diesem Kontakt eingeladen werden."; @@ -5048,6 +5327,12 @@ /* No comment provided by engineer. */ "You can change it in Appearance settings." = "Kann von Ihnen in den Erscheinungsbild-Einstellungen geändert werden."; +/* No comment provided by engineer. */ +"You can configure operators in Network & servers settings." = "Sie können die Betreiber in den Netzwerk- und Servereinstellungen konfigurieren."; + +/* No comment provided by engineer. */ +"You can configure servers via settings." = "Sie können die Server über die Einstellungen konfigurieren."; + /* No comment provided by engineer. */ "You can create it later" = "Sie können dies später erstellen"; @@ -5072,6 +5357,9 @@ /* No comment provided by engineer. */ "You can send messages to %@ from Archived contacts." = "Sie können aus den archivierten Kontakten heraus Nachrichten an %@ versenden."; +/* No comment provided by engineer. */ +"You can set connection name, to remember who the link was shared with." = "Sie können einen Verbindungsnamen festlegen, um sich zu merken, mit wem der Link geteilt wurde."; + /* No comment provided by engineer. */ "You can set lock screen notification preview via settings." = "Über die Geräte-Einstellungen können Sie die Benachrichtigungsvorschau im Sperrbildschirm erlauben."; @@ -5273,6 +5561,9 @@ /* No comment provided by engineer. */ "Your server address" = "Ihre Serveradresse"; +/* No comment provided by engineer. */ +"Your servers" = "Ihre Server"; + /* No comment provided by engineer. */ "Your settings" = "Einstellungen"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 103065a05a..d02497515e 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -82,6 +82,9 @@ /* No comment provided by engineer. */ "**Recommended**: device token and end-to-end encrypted notifications are sent to SimpleX Chat push server, but it does not see the message content, size or who it is from." = "**Recomendado**: el token del dispositivo y las notificaciones se envían al servidor de notificaciones de SimpleX Chat, pero no el contenido del mensaje, su tamaño o su procedencia."; +/* No comment provided by engineer. */ +"**Scan / Paste link**: to connect via a link you received." = "**Escanear / Pegar enlace**: para conectar mediante un enlace recibido."; + /* No comment provided by engineer. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Advertencia**: Las notificaciones automáticas instantáneas requieren una contraseña guardada en Keychain."; @@ -142,6 +145,12 @@ /* No comment provided by engineer. */ "%@ is verified" = "%@ está verificado"; +/* No comment provided by engineer. */ +"%@ server" = "%@ servidor"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ servidores"; + /* No comment provided by engineer. */ "%@ uploaded" = "%@ subido"; @@ -161,7 +170,7 @@ "%@:" = "%@:"; /* time interval */ -"%d days" = "%d días"; +"%d days" = "%d día(s)"; /* forward confirmation reason */ "%d file(s) are still being downloaded." = "%d archivo(s) se está(n) descargando todavía."; @@ -176,25 +185,25 @@ "%d file(s) were not downloaded." = "%d archivo(s) no se ha(n) descargado."; /* time interval */ -"%d hours" = "%d horas"; +"%d hours" = "%d hora(s)"; /* alert title */ -"%d messages not forwarded" = "%d mensajes no enviados"; +"%d messages not forwarded" = "%d mensaje(s) no enviado(s)"; /* time interval */ -"%d min" = "%d minutos"; +"%d min" = "%d minuto(s)"; /* time interval */ -"%d months" = "%d meses"; +"%d months" = "%d mes(es)"; /* time interval */ -"%d sec" = "%d segundos"; +"%d sec" = "%d segundo(s)"; /* integrity error chat item */ -"%d skipped message(s)" = "%d mensaje(s) saltado(s"; +"%d skipped message(s)" = "%d mensaje(s) omitido(s)"; /* time interval */ -"%d weeks" = "%d semanas"; +"%d weeks" = "%d semana(s)"; /* No comment provided by engineer. */ "%lld" = "%lld"; @@ -295,6 +304,12 @@ /* time interval */ "1 week" = "una semana"; +/* No comment provided by engineer. */ +"1-time link" = "Enlace de un uso"; + +/* No comment provided by engineer. */ +"1-time link can be used *with one contact only* - share in person or via any messenger." = "Los enlaces de un uso pueden ser usados *solamente con un contacto* - compártelos en persona o mediante cualquier aplicación de mensajería."; + /* No comment provided by engineer. */ "5 minutes" = "5 minutos"; @@ -342,6 +357,9 @@ swipe action */ "Accept" = "Aceptar"; +/* No comment provided by engineer. */ +"Accept conditions" = "Aceptar condiciones"; + /* No comment provided by engineer. */ "Accept connection request?" = "¿Aceptar solicitud de conexión?"; @@ -355,6 +373,9 @@ /* call status */ "accepted call" = "llamada aceptada"; +/* No comment provided by engineer. */ +"Accepted conditions" = "Condiciones aceptadas"; + /* No comment provided by engineer. */ "Acknowledged" = "Confirmaciones"; @@ -382,6 +403,12 @@ /* No comment provided by engineer. */ "Add welcome message" = "Añadir mensaje de bienvenida"; +/* No comment provided by engineer. */ +"Added media & file servers" = "Servidores de archivos y multimedia añadidos"; + +/* No comment provided by engineer. */ +"Added message servers" = "Servidores de mensajes añadidos"; + /* No comment provided by engineer. */ "Additional accent" = "Acento adicional"; @@ -397,6 +424,12 @@ /* No comment provided by engineer. */ "Address change will be aborted. Old receiving address will be used." = "El cambio de dirección se cancelará. Se usará la antigua dirección de recepción."; +/* No comment provided by engineer. */ +"Address or 1-time link?" = "¿Dirección o enlace de un uso?"; + +/* No comment provided by engineer. */ +"Address settings" = "Configuración de dirección"; + /* member role */ "admin" = "administrador"; @@ -439,6 +472,9 @@ /* feature role */ "all members" = "todos los miembros"; +/* No comment provided by engineer. */ +"All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages." = "Todos los mensajes y archivos son enviados **cifrados de extremo a extremo** y con seguridad de cifrado postcuántico en mensajes directos."; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Todos los mensajes serán borrados. ¡No podrá deshacerse!"; @@ -855,6 +891,9 @@ set passcode view */ "Change self-destruct passcode" = "Cambiar código autodestrucción"; +/* authentication reason */ +"Change user profiles" = "Cambiar perfil de usuario"; + /* chat item text */ "changed address for you" = "ha cambiado tu servidor de envío"; @@ -918,6 +957,12 @@ /* No comment provided by engineer. */ "Chats" = "Chats"; +/* No comment provided by engineer. */ +"Check messages every 20 min." = "Comprobar mensajes cada 20 min."; + +/* No comment provided by engineer. */ +"Check messages when allowed." = "Comprobar mensajes cuando se permita."; + /* alert title */ "Check server address and try again." = "Comprueba la dirección del servidor e inténtalo de nuevo."; @@ -978,6 +1023,33 @@ /* No comment provided by engineer. */ "Completed" = "Completadas"; +/* No comment provided by engineer. */ +"Conditions accepted on: %@." = "Condiciones aceptadas el: %@."; + +/* No comment provided by engineer. */ +"Conditions are accepted for the operator(s): **%@**." = "Las condiciones se han aceptado para el(los) operador(s): **%@**."; + +/* No comment provided by engineer. */ +"Conditions are already accepted for following operator(s): **%@**." = "Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**."; + +/* No comment provided by engineer. */ +"Conditions of use" = "Condiciones de uso"; + +/* No comment provided by engineer. */ +"Conditions will be accepted for enabled operators after 30 days." = "Las condiciones de los operadores habilitados serán aceptadas después de 30 días."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for operator(s): **%@**." = "Las condiciones serán aceptadas para el/los operador(es): **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for the operator(s): **%@**." = "Las condiciones serán aceptadas para el/los operador(es): **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted on: %@." = "Las condiciones serán aceptadas el: %@."; + +/* No comment provided by engineer. */ +"Conditions will be automatically accepted for enabled operators on: %@." = "Las condiciones serán aceptadas automáticamente para los operadores habilitados el: %@."; + /* No comment provided by engineer. */ "Configure ICE servers" = "Configure servidores ICE"; @@ -1125,6 +1197,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "¡Solicitud de conexión enviada!"; +/* No comment provided by engineer. */ +"Connection security" = "Seguridad de conexión"; + /* No comment provided by engineer. */ "Connection terminated" = "Conexión finalizada"; @@ -1206,6 +1281,9 @@ /* No comment provided by engineer. */ "Create" = "Crear"; +/* No comment provided by engineer. */ +"Create 1-time link" = "Crear enlace de un uso"; + /* No comment provided by engineer. */ "Create a group using a random profile." = "Crear grupo usando perfil aleatorio."; @@ -1257,6 +1335,9 @@ /* No comment provided by engineer. */ "creator" = "creador"; +/* No comment provided by engineer. */ +"Current conditions text couldn't be loaded, you can review conditions via this link:" = "El texto con las condiciones actuales no se ha podido cargar, puedes revisar las condiciones en el siguiente enlace:"; + /* No comment provided by engineer. */ "Current Passcode" = "Código de Acceso"; @@ -1505,6 +1586,9 @@ /* No comment provided by engineer. */ "Deletion errors" = "Errores de eliminación"; +/* No comment provided by engineer. */ +"Delivered even when Apple drops them." = "Entregados incluso cuando Apple los descarta."; + /* No comment provided by engineer. */ "Delivery" = "Entrega"; @@ -1692,6 +1776,9 @@ /* No comment provided by engineer. */ "e2e encrypted" = "cifrado de extremo a extremo"; +/* No comment provided by engineer. */ +"E2E encrypted notifications." = "Notificaciones cifradas E2E."; + /* chat item action */ "Edit" = "Editar"; @@ -1710,6 +1797,9 @@ /* No comment provided by engineer. */ "Enable camera access" = "Permitir acceso a la cámara"; +/* No comment provided by engineer. */ +"Enable Flux" = "Habilitar Flux"; + /* No comment provided by engineer. */ "Enable for all" = "Activar para todos"; @@ -1869,12 +1959,18 @@ /* No comment provided by engineer. */ "Error aborting address change" = "Error al cancelar cambio de dirección"; +/* alert title */ +"Error accepting conditions" = "Error al aceptar las condiciones"; + /* No comment provided by engineer. */ "Error accepting contact request" = "Error al aceptar solicitud del contacto"; /* No comment provided by engineer. */ "Error adding member(s)" = "Error al añadir miembro(s)"; +/* alert title */ +"Error adding server" = "Error al añadir servidor"; + /* No comment provided by engineer. */ "Error changing address" = "Error al cambiar servidor"; @@ -1959,6 +2055,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Error al unirte al grupo"; +/* alert title */ +"Error loading servers" = "Error al cargar servidores"; + /* No comment provided by engineer. */ "Error migrating settings" = "Error al migrar la configuración"; @@ -1992,6 +2091,9 @@ /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Error al guardar contraseña en Keychain"; +/* alert title */ +"Error saving servers" = "Error al guardar servidores"; + /* when migrating */ "Error saving settings" = "Error al guardar ajustes"; @@ -2034,6 +2136,9 @@ /* No comment provided by engineer. */ "Error updating message" = "Error al actualizar mensaje"; +/* alert title */ +"Error updating server" = "Error al actualizar el servidor"; + /* No comment provided by engineer. */ "Error updating settings" = "Error al actualizar configuración"; @@ -2061,6 +2166,9 @@ /* No comment provided by engineer. */ "Errors" = "Errores"; +/* servers error */ +"Errors in servers configuration." = "Error en la configuración del servidor."; + /* No comment provided by engineer. */ "Even when disabled in the conversation." = "Incluso si está desactivado para la conversación."; @@ -2187,9 +2295,24 @@ /* No comment provided by engineer. */ "Fix not supported by group member" = "Corrección no compatible con miembro del grupo"; +/* No comment provided by engineer. */ +"for better metadata privacy." = "para mayor privacidad de los metadatos."; + +/* servers error */ +"For chat profile %@:" = "Para el perfil de chat %@:"; + /* No comment provided by engineer. */ "For console" = "Para consola"; +/* No comment provided by engineer. */ +"For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server." = "Si por ejemplo tu contacto recibe los mensajes a través de un servidor de SimpleX Chat, tu aplicación los entregará a través de un servidor de Flux."; + +/* No comment provided by engineer. */ +"For private routing" = "Para el enrutamiento privado"; + +/* No comment provided by engineer. */ +"For social media" = "Para redes sociales"; + /* chat item action */ "Forward" = "Reenviar"; @@ -2382,6 +2505,12 @@ /* time unit */ "hours" = "horas"; +/* No comment provided by engineer. */ +"How it affects privacy" = "Cómo afecta a la privacidad"; + +/* No comment provided by engineer. */ +"How it helps privacy" = "Cómo ayuda a la privacidad"; + /* No comment provided by engineer. */ "How SimpleX works" = "Cómo funciona SimpleX"; @@ -2958,6 +3087,9 @@ /* No comment provided by engineer. */ "More reliable network connection." = "Conexión de red más fiable."; +/* No comment provided by engineer. */ +"More reliable notifications" = "Notificaciones más fiables"; + /* item status description */ "Most likely this connection is deleted." = "Probablemente la conexión ha sido eliminada."; @@ -2982,12 +3114,18 @@ /* No comment provided by engineer. */ "Network connection" = "Conexión de red"; +/* No comment provided by engineer. */ +"Network decentralization" = "Descentralización de la red"; + /* snd error text */ "Network issues - message expired after many attempts to send it." = "Problema en la red - el mensaje ha expirado tras muchos intentos de envío."; /* No comment provided by engineer. */ "Network management" = "Gestión de la red"; +/* No comment provided by engineer. */ +"Network operator" = "Operador de red"; + /* No comment provided by engineer. */ "Network settings" = "Configuración de red"; @@ -3015,6 +3153,9 @@ /* No comment provided by engineer. */ "New display name" = "Nuevo nombre mostrado"; +/* notification */ +"New events" = "Eventos nuevos"; + /* No comment provided by engineer. */ "New in %@" = "Nuevo en %@"; @@ -3036,6 +3177,9 @@ /* No comment provided by engineer. */ "New passphrase…" = "Contraseña nueva…"; +/* No comment provided by engineer. */ +"New server" = "Servidor nuevo"; + /* No comment provided by engineer. */ "New SOCKS credentials will be used every time you start the app." = "Se usarán credenciales SOCKS nuevas cada vez que inicies la aplicación."; @@ -3081,6 +3225,12 @@ /* No comment provided by engineer. */ "No info, try to reload" = "No hay información, intenta recargar"; +/* servers error */ +"No media & file servers." = "Ningún servidor de archivos y multimedia."; + +/* servers error */ +"No message servers." = "Ningún servidor de mensajes."; + /* No comment provided by engineer. */ "No network connection" = "Sin conexión de red"; @@ -3093,9 +3243,24 @@ /* No comment provided by engineer. */ "No permission to record voice message" = "Sin permiso para grabar mensajes de voz"; +/* No comment provided by engineer. */ +"No push server" = "Ningún servidor push"; + /* No comment provided by engineer. */ "No received or sent files" = "Sin archivos recibidos o enviados"; +/* servers error */ +"No servers for private message routing." = "Ningún servidor para enrutamiento privado."; + +/* servers error */ +"No servers to receive files." = "Ningún servidor para recibir archivos."; + +/* servers error */ +"No servers to receive messages." = "Ningún servidor para recibir mensajes."; + +/* servers error */ +"No servers to send files." = "Ningún servidor para enviar archivos."; + /* copied message info in history */ "no text" = "sin texto"; @@ -3117,6 +3282,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "¡Las notificaciones están desactivadas!"; +/* No comment provided by engineer. */ +"Notifications privacy" = "Privacidad en las notificaciones"; + /* No comment provided by engineer. */ "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Ahora los administradores pueden:\n- eliminar mensajes de los miembros.\n- desactivar el rol miembro (a rol \"observador\")"; @@ -3209,12 +3377,18 @@ /* No comment provided by engineer. */ "Open" = "Abrir"; +/* No comment provided by engineer. */ +"Open changes" = "Abrir cambios"; + /* No comment provided by engineer. */ "Open chat" = "Abrir chat"; /* authentication reason */ "Open chat console" = "Abrir consola de Chat"; +/* No comment provided by engineer. */ +"Open conditions" = "Abrir condiciones"; + /* No comment provided by engineer. */ "Open group" = "Grupo abierto"; @@ -3227,6 +3401,12 @@ /* No comment provided by engineer. */ "Opening app…" = "Iniciando aplicación…"; +/* No comment provided by engineer. */ +"Operator" = "Operador"; + +/* alert title */ +"Operator server" = "Servidor del operador"; + /* No comment provided by engineer. */ "Or paste archive link" = "O pegar enlace del archivo"; @@ -3239,6 +3419,9 @@ /* No comment provided by engineer. */ "Or show this code" = "O muestra este código QR"; +/* No comment provided by engineer. */ +"Or to share privately" = "O para compartir en privado"; + /* No comment provided by engineer. */ "other" = "otros"; @@ -3380,6 +3563,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Dirección del servidor predefinida"; +/* No comment provided by engineer. */ +"Preset servers" = "Servidores predefinidos"; + /* No comment provided by engineer. */ "Preview" = "Vista previa"; @@ -3485,6 +3671,9 @@ /* No comment provided by engineer. */ "Push notifications" = "Notificaciones automáticas"; +/* No comment provided by engineer. */ +"Push Notifications" = "Notificaciones push"; + /* No comment provided by engineer. */ "Push server" = "Servidor push"; @@ -3732,6 +3921,12 @@ /* chat item action */ "Reveal" = "Revelar"; +/* No comment provided by engineer. */ +"Review conditions" = "Revisar condiciones"; + +/* No comment provided by engineer. */ +"Review later" = "Revisar más tarde"; + /* No comment provided by engineer. */ "Revoke" = "Revocar"; @@ -3753,6 +3948,12 @@ /* No comment provided by engineer. */ "Safer groups" = "Grupos más seguros"; +/* No comment provided by engineer. */ +"Same conditions will apply to operator **%@**." = "Las mismas condiciones se aplicarán al operador **%@**."; + +/* No comment provided by engineer. */ +"Same conditions will apply to operator(s): **%@**." = "Las mismas condiciones se aplicarán a el/los operador(es) **%@**."; + /* alert button chat item action */ "Save" = "Guardar"; @@ -4018,6 +4219,9 @@ /* No comment provided by engineer. */ "Server" = "Servidor"; +/* alert message */ +"Server added to operator %@." = "Servidor añadido al operador %@."; + /* No comment provided by engineer. */ "Server address" = "Dirección del servidor"; @@ -4027,6 +4231,15 @@ /* srv error text. */ "Server address is incompatible with network settings." = "La dirección del servidor es incompatible con la configuración de la red."; +/* alert title */ +"Server operator changed." = "El operador del servidor ha cambiado."; + +/* No comment provided by engineer. */ +"Server operators" = "Operadores de servidores"; + +/* alert title */ +"Server protocol changed." = "El protocolo del servidor ha cambiado."; + /* queue info */ "server queue info: %@\n\nlast received msg: %@" = "información cola del servidor: %1$@\n\núltimo mensaje recibido: %2$@"; @@ -4112,9 +4325,15 @@ /* No comment provided by engineer. */ "Share 1-time link" = "Compartir enlace de un uso"; +/* No comment provided by engineer. */ +"Share 1-time link with a friend" = "Compartir enlace de un uso con un amigo"; + /* No comment provided by engineer. */ "Share address" = "Compartir dirección"; +/* No comment provided by engineer. */ +"Share address publicly" = "Campartir dirección públicamente"; + /* alert title */ "Share address with contacts?" = "¿Compartir la dirección con los contactos?"; @@ -4127,6 +4346,9 @@ /* No comment provided by engineer. */ "Share profile" = "Comparte perfil"; +/* No comment provided by engineer. */ +"Share SimpleX address on social media." = "Compartir dirección SimpleX en redes sociales."; + /* No comment provided by engineer. */ "Share this 1-time invite link" = "Comparte este enlace de un solo uso"; @@ -4172,6 +4394,12 @@ /* No comment provided by engineer. */ "SimpleX Address" = "Dirección SimpleX"; +/* No comment provided by engineer. */ +"SimpleX address and 1-time links are safe to share via any messenger." = "Compartir enlaces de un uso y direcciones SimpleX es seguro a través de cualquier medio."; + +/* No comment provided by engineer. */ +"SimpleX address or 1-time link?" = "Dirección SimpleX o enlace de un uso?"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "La seguridad de SimpleX Chat ha sido auditada por Trail of Bits."; @@ -4247,6 +4475,9 @@ /* No comment provided by engineer. */ "Some non-fatal errors occurred during import:" = "Han ocurrido algunos errores no críticos durante la importación:"; +/* alert message */ +"Some servers failed the test:\n%@" = "Algunos servidores no han superado la prueba:\n%@"; + /* notification title */ "Somebody" = "Alguien"; @@ -4409,6 +4640,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "La aplicación puede notificarte cuando recibas mensajes o solicitudes de contacto: por favor, abre la configuración para activarlo."; +/* No comment provided by engineer. */ +"The app protects your privacy by using different operators in each conversation." = "La aplicación protege tu privacidad mediante el uso de diferentes operadores en cada conversación."; + /* No comment provided by engineer. */ "The app will ask to confirm downloads from unknown file servers (except .onion)." = "La aplicación pedirá que confirmes las descargas desde servidores de archivos desconocidos (excepto si son .onion)."; @@ -4418,6 +4652,9 @@ /* No comment provided by engineer. */ "The code you scanned is not a SimpleX link QR code." = "El código QR escaneado no es un enlace SimpleX."; +/* No comment provided by engineer. */ +"The connection reached the limit of undelivered messages, your contact may be offline." = "La conexión ha alcanzado el límite de mensajes no entregados. es posible que tu contacto esté desconectado."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "¡La conexión que has aceptado se cancelará!"; @@ -4457,6 +4694,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "El perfil sólo se comparte con tus contactos."; +/* No comment provided by engineer. */ +"The second preset operator in the app!" = "El segundo operador predefinido!"; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "¡El doble check que nos faltaba! ✅"; @@ -4466,6 +4706,9 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "Lista de servidores para las conexiones nuevas de tu perfil actual **%@**."; +/* No comment provided by engineer. */ +"The servers for new files of your current chat profile **%@**." = "Los servidores para archivos nuevos en tu perfil actual **%@**."; + /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "El texto pegado no es un enlace SimpleX."; @@ -4475,6 +4718,9 @@ /* No comment provided by engineer. */ "Themes" = "Temas"; +/* No comment provided by engineer. */ +"These conditions will also apply for: **%@**." = "Estas condiciones también se aplican para: **%@**."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Esta configuración afecta a tu perfil actual **%@**."; @@ -4538,6 +4784,9 @@ /* No comment provided by engineer. */ "To make a new connection" = "Para hacer una conexión nueva"; +/* No comment provided by engineer. */ +"To protect against your link being replaced, you can compare contact security codes." = "Para protegerte contra una sustitución del enlace, puedes comparar los códigos de seguridad con tu contacto."; + /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC."; @@ -4550,6 +4799,9 @@ /* No comment provided by engineer. */ "To protect your privacy, SimpleX uses separate IDs for each of your contacts." = "Para proteger tu privacidad, en lugar de los identificadores de usuario que usan el resto de plataformas, SimpleX dispone de identificadores para las colas de mensajes, independientes para cada uno de tus contactos."; +/* No comment provided by engineer. */ +"To receive" = "Para recibir"; + /* No comment provided by engineer. */ "To record speech please grant permission to use Microphone." = "Para grabación de voz, por favor concede el permiso para usar el micrófono."; @@ -4562,9 +4814,15 @@ /* No comment provided by engineer. */ "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Para hacer visible tu perfil oculto, introduce la contraseña en el campo de búsqueda del menú **Mis perfiles**."; +/* No comment provided by engineer. */ +"To send" = "Para enviar"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Para permitir las notificaciones automáticas instantáneas, la base de datos se debe migrar."; +/* No comment provided by engineer. */ +"To use the servers of **%@**, accept conditions of use." = "Para usar los servidores de **%@**, acepta las condiciones de uso."; + /* No comment provided by engineer. */ "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Para verificar el cifrado de extremo a extremo con tu contacto, compara (o escanea) el código en ambos dispositivos."; @@ -4622,6 +4880,9 @@ /* rcv group event chat item */ "unblocked %@" = "ha desbloqueado a %@"; +/* No comment provided by engineer. */ +"Undelivered messages" = "Mensajes no entregados"; + /* No comment provided by engineer. */ "Unexpected migration state" = "Estado de migración inesperado"; @@ -4739,12 +5000,21 @@ /* No comment provided by engineer. */ "Use .onion hosts" = "Usar hosts .onion"; +/* No comment provided by engineer. */ +"Use %@" = "Usar %@"; + /* No comment provided by engineer. */ "Use chat" = "Usar Chat"; /* No comment provided by engineer. */ "Use current profile" = "Usar perfil actual"; +/* No comment provided by engineer. */ +"Use for files" = "Usar para archivos"; + +/* No comment provided by engineer. */ +"Use for messages" = "Usar para mensajes"; + /* No comment provided by engineer. */ "Use for new connections" = "Usar para conexiones nuevas"; @@ -4769,6 +5039,9 @@ /* No comment provided by engineer. */ "Use server" = "Usar servidor"; +/* No comment provided by engineer. */ +"Use servers" = "Usar servidores"; + /* No comment provided by engineer. */ "Use SimpleX Chat servers?" = "¿Usar servidores SimpleX Chat?"; @@ -4853,9 +5126,15 @@ /* No comment provided by engineer. */ "Videos and files up to 1gb" = "Vídeos y archivos de hasta 1Gb"; +/* No comment provided by engineer. */ +"View conditions" = "Ver condiciones"; + /* No comment provided by engineer. */ "View security code" = "Mostrar código de seguridad"; +/* No comment provided by engineer. */ +"View updated conditions" = "Ver condiciones actualizadas"; + /* chat feature */ "Visible history" = "Historial visible"; @@ -4937,6 +5216,9 @@ /* No comment provided by engineer. */ "when IP hidden" = "con IP oculta"; +/* No comment provided by engineer. */ +"When more than one operator is enabled, none of them has metadata to learn who communicates with whom." = "Cuando está habilitado más de un operador, ninguno dispone de los metadatos para conocer quién se comunica con quién."; + /* 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."; @@ -5045,6 +5327,12 @@ /* No comment provided by engineer. */ "You can change it in Appearance settings." = "Puedes cambiar la posición de la barra desde el menú Apariencia."; +/* No comment provided by engineer. */ +"You can configure operators in Network & servers settings." = "Puedes configurar los operadores desde Servidores y Redes."; + +/* No comment provided by engineer. */ +"You can configure servers via settings." = "Puedes configurar los servidores a través de su configuración."; + /* No comment provided by engineer. */ "You can create it later" = "Puedes crearla más tarde"; @@ -5069,6 +5357,9 @@ /* No comment provided by engineer. */ "You can send messages to %@ from Archived contacts." = "Puedes enviar mensajes a %@ desde Contactos archivados."; +/* No comment provided by engineer. */ +"You can set connection name, to remember who the link was shared with." = "Puedes añadir un nombre a la conexión para recordar a quién corresponde."; + /* No comment provided by engineer. */ "You can set lock screen notification preview via settings." = "Puedes configurar las notificaciones de la pantalla de bloqueo desde Configuración."; @@ -5270,6 +5561,9 @@ /* No comment provided by engineer. */ "Your server address" = "Dirección del servidor"; +/* No comment provided by engineer. */ +"Your servers" = "Tus servidores"; + /* No comment provided by engineer. */ "Your settings" = "Configuración"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index b64c75fd1d..9103f4baf3 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -82,6 +82,9 @@ /* No comment provided by engineer. */ "**Recommended**: device token and end-to-end encrypted notifications are sent to SimpleX Chat push server, but it does not see the message content, size or who it is from." = "**Megjegyzés:** az eszköztoken és az értesítések elküldésre kerülnek a SimpleX Chat értesítési kiszolgálóra, kivéve az üzenet tartalma, mérete vagy az, hogy kitől származik."; +/* No comment provided by engineer. */ +"**Scan / Paste link**: to connect via a link you received." = "**Hivatkozás beolvasása / beillesztése**: egy kapott hivatkozáson keresztüli kapcsolódáshoz."; + /* No comment provided by engineer. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Figyelmeztetés:** Az azonnali push-értesítésekhez a kulcstartóban tárolt jelmondat megadása szükséges."; @@ -101,7 +104,7 @@ "## In reply to" = "## Válaszul erre:"; /* No comment provided by engineer. */ -"#secret#" = "#titkos#"; +"#secret#" = "#titok#"; /* No comment provided by engineer. */ "%@" = "%@"; @@ -142,6 +145,12 @@ /* No comment provided by engineer. */ "%@ is verified" = "%@ hitelesítve"; +/* No comment provided by engineer. */ +"%@ server" = "%@ kiszolgáló"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ kiszolgáló"; + /* No comment provided by engineer. */ "%@ uploaded" = "%@ feltöltve"; @@ -230,7 +239,7 @@ "%lld minutes" = "%lld perc"; /* No comment provided by engineer. */ -"%lld new interface languages" = "%lld új nyelvi csomag"; +"%lld new interface languages" = "%lld új kezelőfelületi nyelv"; /* No comment provided by engineer. */ "%lld second(s)" = "%lld másodperc"; @@ -295,6 +304,12 @@ /* time interval */ "1 week" = "1 hét"; +/* No comment provided by engineer. */ +"1-time link" = "Egyszer használható meghívó-hivatkozás"; + +/* No comment provided by engineer. */ +"1-time link can be used *with one contact only* - share in person or via any messenger." = "Az egyszer használható meghívó-hivatkozás csak *egyetlen ismerőssel használható* - személyesen vagy bármilyen üzenetküldőn keresztül megosztható."; + /* No comment provided by engineer. */ "5 minutes" = "5 perc"; @@ -342,6 +357,9 @@ swipe action */ "Accept" = "Elfogadás"; +/* No comment provided by engineer. */ +"Accept conditions" = "Feltételek elfogadása"; + /* No comment provided by engineer. */ "Accept connection request?" = "Kapcsolatkérés elfogadása?"; @@ -355,6 +373,9 @@ /* call status */ "accepted call" = "elfogadott hívás"; +/* No comment provided by engineer. */ +"Accepted conditions" = "Elfogadott feltételek"; + /* No comment provided by engineer. */ "Acknowledged" = "Nyugtázva"; @@ -382,6 +403,12 @@ /* No comment provided by engineer. */ "Add welcome message" = "Üdvözlőüzenet hozzáadása"; +/* No comment provided by engineer. */ +"Added media & file servers" = "Hozzáadott média- és fájlkiszolgálók"; + +/* No comment provided by engineer. */ +"Added message servers" = "Hozzáadott üzenetkiszolgálók"; + /* No comment provided by engineer. */ "Additional accent" = "További kiemelés"; @@ -397,6 +424,12 @@ /* No comment provided by engineer. */ "Address change will be aborted. Old receiving address will be used." = "A cím módosítása megszakad. A régi fogadási cím kerül felhasználásra."; +/* No comment provided by engineer. */ +"Address or 1-time link?" = "Cím vagy egyszer használható meghívó-hivatkozás?"; + +/* No comment provided by engineer. */ +"Address settings" = "Címbeállítások"; + /* member role */ "admin" = "adminisztrátor"; @@ -439,6 +472,9 @@ /* feature role */ "all members" = "összes tag"; +/* No comment provided by engineer. */ +"All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages." = "Az összes üzenetet és fájlt **végpontok közötti titkosítással** küldi, a közvetlen üzenetekben pedig kvantumrezisztens biztonsággal."; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Az összes üzenet törlésre kerül – ez a művelet nem vonható vissza!"; @@ -855,6 +891,9 @@ set passcode view */ "Change self-destruct passcode" = "Önmegsemmisító jelkód megváltoztatása"; +/* authentication reason */ +"Change user profiles" = "Felhasználói profilok megváltoztatása"; + /* chat item text */ "changed address for you" = "cím megváltoztatva"; @@ -918,6 +957,12 @@ /* No comment provided by engineer. */ "Chats" = "Csevegések"; +/* No comment provided by engineer. */ +"Check messages every 20 min." = "Üzenetek ellenőrzése 20 percenként."; + +/* No comment provided by engineer. */ +"Check messages when allowed." = "Üzenetek ellenőrzése, amikor engedélyezett."; + /* alert title */ "Check server address and try again." = "Kiszolgáló címének ellenőrzése és újrapróbálkozás."; @@ -978,6 +1023,33 @@ /* No comment provided by engineer. */ "Completed" = "Elkészült"; +/* No comment provided by engineer. */ +"Conditions accepted on: %@." = "Feltételek elfogadva ekkor: %@."; + +/* No comment provided by engineer. */ +"Conditions are accepted for the operator(s): **%@**." = "A következő üzemeltető(k) számára elfogadott feltételek: **%@**."; + +/* No comment provided by engineer. */ +"Conditions are already accepted for following operator(s): **%@**." = "A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**."; + +/* No comment provided by engineer. */ +"Conditions of use" = "Használati feltételek"; + +/* No comment provided by engineer. */ +"Conditions will be accepted for enabled operators after 30 days." = "A feltételek 30 nap elteltével lesznek elfogadva az engedélyezett üzemeltető számára."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for operator(s): **%@**." = "A feltételek el lesznek fogadva a következő üzemeltető(k) számára: **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for the operator(s): **%@**." = "A feltételek el lesznek fogadva a következő üzemeltető(k) számára: **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted on: %@." = "A feltételek ekkor lesznek elfogadva: %@."; + +/* No comment provided by engineer. */ +"Conditions will be automatically accepted for enabled operators on: %@." = "A feltételek automatikusan elfogadásra kerülnek az engedélyezett üzemeltető számára: %@."; + /* No comment provided by engineer. */ "Configure ICE servers" = "ICE-kiszolgálók beállítása"; @@ -1033,7 +1105,7 @@ "Connect to yourself?" = "Kapcsolódás saját magához?"; /* No comment provided by engineer. */ -"Connect to yourself?\nThis is your own one-time link!" = "Kapcsolódás saját magához?\nEz az Ön egyszer használható hivatkozása!"; +"Connect to yourself?\nThis is your own one-time link!" = "Kapcsolódás saját magához?\nEz az Ön egyszer használható meghívó-hivatkozása!"; /* No comment provided by engineer. */ "Connect to yourself?\nThis is your own SimpleX address!" = "Kapcsolódás saját magához?\nEz az Ön SimpleX-címe!"; @@ -1045,7 +1117,7 @@ "Connect via link" = "Kapcsolódás egy hivatkozáson keresztül"; /* No comment provided by engineer. */ -"Connect via one-time link" = "Kapcsolódás egyszer használható hivatkozáson keresztül"; +"Connect via one-time link" = "Kapcsolódás egyszer használható meghívó-hivatkozáson keresztül"; /* No comment provided by engineer. */ "Connect with %@" = "Kapcsolódás a következővel: %@"; @@ -1125,6 +1197,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "Kapcsolatkérés elküldve!"; +/* No comment provided by engineer. */ +"Connection security" = "Kapcsolatbiztonság"; + /* No comment provided by engineer. */ "Connection terminated" = "Kapcsolat megszakítva"; @@ -1206,6 +1281,9 @@ /* No comment provided by engineer. */ "Create" = "Létrehozás"; +/* No comment provided by engineer. */ +"Create 1-time link" = "Egyszer használható meghívó-hivatkozás létrehozása"; + /* No comment provided by engineer. */ "Create a group using a random profile." = "Csoport létrehozása véletlenszerűen létrehozott profillal."; @@ -1257,6 +1335,9 @@ /* No comment provided by engineer. */ "creator" = "készítő"; +/* No comment provided by engineer. */ +"Current conditions text couldn't be loaded, you can review conditions via this link:" = "A jelenlegi feltételek szövegét nem lehetett betölteni, a feltételeket ezen a hivatkozáson keresztül vizsgálhatja felül:"; + /* No comment provided by engineer. */ "Current Passcode" = "Jelenlegi jelkód"; @@ -1505,6 +1586,9 @@ /* No comment provided by engineer. */ "Deletion errors" = "Törlési hibák"; +/* No comment provided by engineer. */ +"Delivered even when Apple drops them." = "Kézbesítés akkor is, amikor az Apple eldobja őket."; + /* No comment provided by engineer. */ "Delivery" = "Kézbesítés"; @@ -1692,6 +1776,9 @@ /* No comment provided by engineer. */ "e2e encrypted" = "e2e titkosított"; +/* No comment provided by engineer. */ +"E2E encrypted notifications." = "Végpontok közötti titkosított értesítések."; + /* chat item action */ "Edit" = "Szerkesztés"; @@ -1710,6 +1797,9 @@ /* No comment provided by engineer. */ "Enable camera access" = "Kamera hozzáférés engedélyezése"; +/* No comment provided by engineer. */ +"Enable Flux" = "Flux engedélyezése"; + /* No comment provided by engineer. */ "Enable for all" = "Engedélyezés az összes tag számára"; @@ -1869,12 +1959,18 @@ /* No comment provided by engineer. */ "Error aborting address change" = "Hiba a cím megváltoztatásának megszakításakor"; +/* alert title */ +"Error accepting conditions" = "Hiba a feltételek elfogadásakor"; + /* No comment provided by engineer. */ "Error accepting contact request" = "Hiba történt a kapcsolatkérés elfogadásakor"; /* No comment provided by engineer. */ "Error adding member(s)" = "Hiba a tag(ok) hozzáadásakor"; +/* alert title */ +"Error adding server" = "Hiba a kiszolgáló hozzáadásakor"; + /* No comment provided by engineer. */ "Error changing address" = "Hiba a cím megváltoztatásakor"; @@ -1959,6 +2055,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Hiba a csoporthoz való csatlakozáskor"; +/* alert title */ +"Error loading servers" = "Hiba a kiszolgálók betöltésekor"; + /* No comment provided by engineer. */ "Error migrating settings" = "Hiba a beallítások átköltöztetésekor"; @@ -1992,6 +2091,9 @@ /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Hiba a jelmondat kulcstartóba történő mentésekor"; +/* alert title */ +"Error saving servers" = "Hiba a kiszolgálók mentésekor"; + /* when migrating */ "Error saving settings" = "Hiba a beállítások mentésekor"; @@ -2034,6 +2136,9 @@ /* No comment provided by engineer. */ "Error updating message" = "Hiba az üzenet frissítésekor"; +/* alert title */ +"Error updating server" = "Hiba a kiszolgáló frissítésekor"; + /* No comment provided by engineer. */ "Error updating settings" = "Hiba történt a beállítások frissítésekor"; @@ -2061,6 +2166,9 @@ /* No comment provided by engineer. */ "Errors" = "Hibák"; +/* servers error */ +"Errors in servers configuration." = "Hibák a kiszolgálók konfigurációjában."; + /* No comment provided by engineer. */ "Even when disabled in the conversation." = "Akkor is, ha le van tiltva a beszélgetésben."; @@ -2187,9 +2295,24 @@ /* No comment provided by engineer. */ "Fix not supported by group member" = "Csoporttag általi javítás nem támogatott"; +/* No comment provided by engineer. */ +"for better metadata privacy." = "a metaadatok jobb védelme érdekében."; + +/* servers error */ +"For chat profile %@:" = "A(z) %@ nevű csevegési profilhoz:"; + /* No comment provided by engineer. */ "For console" = "Konzolhoz"; +/* No comment provided by engineer. */ +"For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server." = "Ha például az ismerőse a SimpleX Chat kiszolgálón keresztül fogadja az üzeneteket, az Ön alkalmazása a Flux egyik kiszolgálóját használja a kézbesítéshez."; + +/* No comment provided by engineer. */ +"For private routing" = "A privát útválasztáshoz"; + +/* No comment provided by engineer. */ +"For social media" = "A közösségi médiához"; + /* chat item action */ "Forward" = "Továbbítás"; @@ -2382,6 +2505,12 @@ /* time unit */ "hours" = "óra"; +/* No comment provided by engineer. */ +"How it affects privacy" = "Hogyan érinti az adatvédelmet"; + +/* No comment provided by engineer. */ +"How it helps privacy" = "Hogyan segíti az adatvédelmet"; + /* No comment provided by engineer. */ "How SimpleX works" = "Hogyan működik a SimpleX"; @@ -2488,7 +2617,7 @@ "incognito via group link" = "inkognitó a csoporthivatkozáson keresztül"; /* chat list item description */ -"incognito via one-time link" = "inkognitó egy egyszer használható hivatkozáson keresztül"; +"incognito via one-time link" = "inkognitó egy egyszer használható meghívó-hivatkozáson keresztül"; /* notification */ "Incoming audio call" = "Bejövő hanghívás"; @@ -2530,7 +2659,7 @@ "Instant push notifications will be hidden!\n" = "Az azonnali push-értesítések elrejtésre kerülnek!\n"; /* No comment provided by engineer. */ -"Interface" = "Felület"; +"Interface" = "Kezelőfelület"; /* No comment provided by engineer. */ "Interface colors" = "Kezelőfelület színei"; @@ -2620,7 +2749,7 @@ "Irreversible message deletion is prohibited in this group." = "Az üzenetek végleges törlése le van tiltva ebben a csoportban."; /* No comment provided by engineer. */ -"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Lehetővé teszi, hogy egyetlen csevegőprofilon belül több anonim kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük."; +"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Lehetővé teszi, hogy egyetlen csevegőprofilon belül több névtelen kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük."; /* No comment provided by engineer. */ "It can happen when you or your connection used the old database backup." = "Ez akkor fordulhat elő, ha Ön vagy az ismerőse régi adatbázis biztonsági mentést használt."; @@ -2958,6 +3087,9 @@ /* No comment provided by engineer. */ "More reliable network connection." = "Megbízhatóbb hálózati kapcsolat."; +/* No comment provided by engineer. */ +"More reliable notifications" = "Megbízhatóbb értesítések"; + /* item status description */ "Most likely this connection is deleted." = "Valószínűleg ez a kapcsolat törlésre került."; @@ -2982,12 +3114,18 @@ /* No comment provided by engineer. */ "Network connection" = "Internetkapcsolat"; +/* No comment provided by engineer. */ +"Network decentralization" = "Hálózati decentralizáció"; + /* snd error text */ "Network issues - message expired after many attempts to send it." = "Hálózati problémák - az üzenet többszöri elküldési kísérlet után lejárt."; /* No comment provided by engineer. */ "Network management" = "Hálózatkezelés"; +/* No comment provided by engineer. */ +"Network operator" = "Hálózati üzemeltető"; + /* No comment provided by engineer. */ "Network settings" = "Hálózati beállítások"; @@ -3015,6 +3153,9 @@ /* No comment provided by engineer. */ "New display name" = "Új megjelenítési név"; +/* notification */ +"New events" = "Új események"; + /* No comment provided by engineer. */ "New in %@" = "Újdonságok a(z) %@ verzióban"; @@ -3025,7 +3166,7 @@ "New member role" = "Új tag szerepköre"; /* notification */ -"new message" = "Rejtett üzenet"; +"new message" = "új üzenet"; /* notification */ "New message" = "Új üzenet"; @@ -3036,6 +3177,9 @@ /* No comment provided by engineer. */ "New passphrase…" = "Új jelmondat…"; +/* No comment provided by engineer. */ +"New server" = "Új kiszolgáló"; + /* No comment provided by engineer. */ "New SOCKS credentials will be used every time you start the app." = "Minden alkalommal, amikor elindítja az alkalmazást, új SOCKS-hitelesítő-adatokat fog használni."; @@ -3081,6 +3225,12 @@ /* No comment provided by engineer. */ "No info, try to reload" = "Nincs információ, próbálja meg újratölteni"; +/* servers error */ +"No media & file servers." = "Nincsenek média- és fájlkiszolgálók."; + +/* servers error */ +"No message servers." = "Nincsenek üzenet-kiszolgálók."; + /* No comment provided by engineer. */ "No network connection" = "Nincs hálózati kapcsolat"; @@ -3099,6 +3249,18 @@ /* No comment provided by engineer. */ "No received or sent files" = "Nincsenek fogadott vagy küldött fájlok"; +/* servers error */ +"No servers for private message routing." = "Nincsenek kiszolgálók a privát üzenet-útválasztáshoz."; + +/* servers error */ +"No servers to receive files." = "Nincsenek fájlfogadó-kiszolgálók."; + +/* servers error */ +"No servers to receive messages." = "Nincsenek üzenetfogadó-kiszolgálók."; + +/* servers error */ +"No servers to send files." = "Nincsenek fájlküldő-kiszolgálók."; + /* copied message info in history */ "no text" = "nincs szöveg"; @@ -3120,6 +3282,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Az értesítések le vannak tiltva!"; +/* No comment provided by engineer. */ +"Notifications privacy" = "Értesítési adatvédelem"; + /* No comment provided by engineer. */ "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Most már az adminisztrátorok is:\n- törölhetik a tagok üzeneteit.\n- letilthatnak tagokat („megfigyelő” szerepkör)"; @@ -3212,12 +3377,18 @@ /* No comment provided by engineer. */ "Open" = "Megnyitás"; +/* No comment provided by engineer. */ +"Open changes" = "Változások megnyitása"; + /* No comment provided by engineer. */ "Open chat" = "Csevegés megnyitása"; /* authentication reason */ "Open chat console" = "Csevegés konzol megnyitása"; +/* No comment provided by engineer. */ +"Open conditions" = "Feltételek megnyitása"; + /* No comment provided by engineer. */ "Open group" = "Csoport megnyitása"; @@ -3230,6 +3401,12 @@ /* No comment provided by engineer. */ "Opening app…" = "Az alkalmazás megnyitása…"; +/* No comment provided by engineer. */ +"Operator" = "Üzemeltető"; + +/* alert title */ +"Operator server" = "Kiszolgáló üzemeltető"; + /* No comment provided by engineer. */ "Or paste archive link" = "Vagy az archívum hivatkozásának beillesztése"; @@ -3242,6 +3419,9 @@ /* No comment provided by engineer. */ "Or show this code" = "Vagy mutassa meg ezt a kódot"; +/* No comment provided by engineer. */ +"Or to share privately" = "Vagy a privát megosztáshoz"; + /* No comment provided by engineer. */ "other" = "egyéb"; @@ -3383,6 +3563,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Előre beállított kiszolgáló címe"; +/* No comment provided by engineer. */ +"Preset servers" = "Előre beállított kiszolgálók"; + /* No comment provided by engineer. */ "Preview" = "Előnézet"; @@ -3488,6 +3671,9 @@ /* No comment provided by engineer. */ "Push notifications" = "Push-értesítések"; +/* No comment provided by engineer. */ +"Push Notifications" = "Push értesítések"; + /* No comment provided by engineer. */ "Push server" = "Push-kiszolgáló"; @@ -3735,6 +3921,12 @@ /* chat item action */ "Reveal" = "Felfedés"; +/* No comment provided by engineer. */ +"Review conditions" = "Feltételek felülvizsgálata"; + +/* No comment provided by engineer. */ +"Review later" = "Felülvizsgálat később"; + /* No comment provided by engineer. */ "Revoke" = "Visszavonás"; @@ -3756,6 +3948,12 @@ /* No comment provided by engineer. */ "Safer groups" = "Biztonságosabb csoportok"; +/* No comment provided by engineer. */ +"Same conditions will apply to operator **%@**." = "Ugyanezek a feltételek vonatkoznak a következő üzemeltetőre is: **%@**."; + +/* No comment provided by engineer. */ +"Same conditions will apply to operator(s): **%@**." = "Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető(k)re is: **%@**."; + /* alert button chat item action */ "Save" = "Mentés"; @@ -4021,6 +4219,9 @@ /* No comment provided by engineer. */ "Server" = "Kiszolgáló"; +/* alert message */ +"Server added to operator %@." = "Kiszolgáló hozzáadva a következő üzemeltetőhöz: %@."; + /* No comment provided by engineer. */ "Server address" = "Kiszolgáló címe"; @@ -4030,6 +4231,15 @@ /* srv error text. */ "Server address is incompatible with network settings." = "A kiszolgáló címe nem kompatibilis a hálózati beállításokkal."; +/* alert title */ +"Server operator changed." = "A kiszolgáló üzemeltetője megváltozott."; + +/* No comment provided by engineer. */ +"Server operators" = "Kiszolgáló-üzemeltetők"; + +/* alert title */ +"Server protocol changed." = "A kiszolgáló-protokoll megváltozott."; + /* queue info */ "server queue info: %@\n\nlast received msg: %@" = "a kiszolgáló üzenet-sorbaállítási információi: %1$@\n\nutoljára fogadott üzenet: %2$@"; @@ -4115,9 +4325,15 @@ /* No comment provided by engineer. */ "Share 1-time link" = "Egyszer használható hivatkozás megosztása"; +/* No comment provided by engineer. */ +"Share 1-time link with a friend" = "Egyszer használható meghívó-hivatkozás megosztása egy baráttal"; + /* No comment provided by engineer. */ "Share address" = "Cím megosztása"; +/* No comment provided by engineer. */ +"Share address publicly" = "Cím nyilvános megosztása"; + /* alert title */ "Share address with contacts?" = "Megosztja a címet az ismerőseivel?"; @@ -4130,6 +4346,9 @@ /* No comment provided by engineer. */ "Share profile" = "Profil megosztása"; +/* No comment provided by engineer. */ +"Share SimpleX address on social media." = "SimpleX-cím megosztása a közösségi médiában."; + /* No comment provided by engineer. */ "Share this 1-time invite link" = "Egyszer használható meghívó-hivatkozás megosztása"; @@ -4175,6 +4394,12 @@ /* No comment provided by engineer. */ "SimpleX Address" = "SimpleX-cím"; +/* No comment provided by engineer. */ +"SimpleX address and 1-time links are safe to share via any messenger." = "A SimpleX-cím és az egyszer használható meghívó-hivatkozás biztonságosan megosztható bármilyen üzenetküldőn keresztül."; + +/* No comment provided by engineer. */ +"SimpleX address or 1-time link?" = "SimpleX-cím vagy egyszer használható meghívó-hivatkozás?"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "A SimpleX Chat biztonsága a Trail of Bits által lett auditálva."; @@ -4209,10 +4434,10 @@ "SimpleX Lock turned on" = "SimpleX-zár bekapcsolva"; /* simplex link type */ -"SimpleX one-time invitation" = "Egyszer használható SimpleX-meghívó"; +"SimpleX one-time invitation" = "Egyszer használható SimpleX-meghívó-hivatkozás"; /* No comment provided by engineer. */ -"SimpleX protocols reviewed by Trail of Bits." = "A SimpleX Chat biztonsága a Trail of Bits által lett újraauditálva."; +"SimpleX protocols reviewed by Trail of Bits." = "A SimpleX Chat biztonsága a Trail of Bits által lett felülvizsgálva."; /* No comment provided by engineer. */ "Simplified incognito mode" = "Egyszerűsített inkognitómód"; @@ -4250,6 +4475,9 @@ /* No comment provided by engineer. */ "Some non-fatal errors occurred during import:" = "Néhány nem végzetes hiba történt az importáláskor:"; +/* alert message */ +"Some servers failed the test:\n%@" = "Néhány kiszolgáló megbukott a teszten:\n%@"; + /* notification title */ "Somebody" = "Valaki"; @@ -4335,7 +4563,7 @@ "Switch audio and video during the call." = "Hang/Videó váltása hívás közben."; /* No comment provided by engineer. */ -"Switch chat profile for 1-time invitations." = "Csevegési profilváltás az egyszer használható meghívókhoz."; +"Switch chat profile for 1-time invitations." = "Csevegési profilváltás az egyszer használható meghívó-hivatkozásokhoz."; /* No comment provided by engineer. */ "System" = "Rendszer"; @@ -4412,6 +4640,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "Az alkalmazás értesíteni fogja, amikor üzeneteket vagy kapcsolatkéréseket kap – beállítások megnyitása az engedélyezéshez."; +/* No comment provided by engineer. */ +"The app protects your privacy by using different operators in each conversation." = "Az alkalmazás úgy védi az adatait, hogy minden egyes beszélgetésben más-más üzemeltetőket használ."; + /* No comment provided by engineer. */ "The app will ask to confirm downloads from unknown file servers (except .onion)." = "Az alkalmazás kérni fogja az ismeretlen fájlkiszolgálókról (kivéve .onion) történő letöltések megerősítését."; @@ -4421,6 +4652,9 @@ /* No comment provided by engineer. */ "The code you scanned is not a SimpleX link QR code." = "A beolvasott QR-kód nem egy SimpleX-QR-kód-hivatkozás."; +/* No comment provided by engineer. */ +"The connection reached the limit of undelivered messages, your contact may be offline." = "A kapcsolat elérte a kézbesítetlen üzenetek számának határát, az Ön ismerőse lehet, hogy offline állapotban van."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "Az Ön által elfogadott kérelem vissza lesz vonva!"; @@ -4460,6 +4694,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "A profilja csak az ismerőseivel kerül megosztásra."; +/* No comment provided by engineer. */ +"The second preset operator in the app!" = "A második előre beállított üzemeltető az alkalmazásban!"; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "A második jelölés, amit kihagytunk! ✅"; @@ -4469,6 +4706,9 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "A jelenlegi csevegési profilhoz tartozó új kapcsolatok kiszolgálói **%@**."; +/* No comment provided by engineer. */ +"The servers for new files of your current chat profile **%@**." = "Az Ön jelenlegi **%@** nevű csevegőprofiljához tartozó új fájlok kiszolgálói."; + /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "A beillesztett szöveg nem egy SimpleX-hivatkozás."; @@ -4478,6 +4718,9 @@ /* No comment provided by engineer. */ "Themes" = "Témák"; +/* No comment provided by engineer. */ +"These conditions will also apply for: **%@**." = "Ezek a feltételek lesznek elfogadva a következő számára is: **%@**."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Ezek a beállítások csak a jelenlegi (**%@**) profiljára vonatkoznak."; @@ -4515,7 +4758,7 @@ "This group no longer exists." = "Ez a csoport már nem létezik."; /* No comment provided by engineer. */ -"This is your own one-time link!" = "Ez az Ön egyszer használható hivatkozása!"; +"This is your own one-time link!" = "Ez az Ön egyszer használható meghívó-hivatkozása!"; /* No comment provided by engineer. */ "This is your own SimpleX address!" = "Ez az Ön SimpleX-címe!"; @@ -4541,6 +4784,9 @@ /* No comment provided by engineer. */ "To make a new connection" = "Új kapcsolat létrehozásához"; +/* No comment provided by engineer. */ +"To protect against your link being replaced, you can compare contact security codes." = "A hivatkozás cseréje elleni védelem érdekében összehasonlíthatja a biztonsági kódokat az ismerősével."; + /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Az időzóna védelmének érdekében a kép-/hangfájlok UTC-t használnak."; @@ -4553,6 +4799,9 @@ /* No comment provided by engineer. */ "To protect your privacy, SimpleX uses separate IDs for each of your contacts." = "Az adatvédelem érdekében (a más csevegési platformokon megszokott felhasználó-azonosítók helyett) a SimpleX csak az üzenetek sorbaállításához használ azonosítókat, az összes ismerőséhez különbözőt."; +/* No comment provided by engineer. */ +"To receive" = "A fogadáshoz"; + /* No comment provided by engineer. */ "To record speech please grant permission to use Microphone." = "A beszéd rögzítéséhez adjon engedélyt a Mikrofon használatára."; @@ -4565,9 +4814,15 @@ /* No comment provided by engineer. */ "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Rejtett profilja megjelenítéséhez írja be a teljes jelszavát a keresőmezőbe a **Csevegési profilok** menüben."; +/* No comment provided by engineer. */ +"To send" = "A küldéshez"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Az azonnali push-értesítések támogatásához a csevegési adatbázis átköltöztetése szükséges."; +/* No comment provided by engineer. */ +"To use the servers of **%@**, accept conditions of use." = "A(z) **%@** kiszolgálóinak használatához fogadja el a használati feltételeket."; + /* No comment provided by engineer. */ "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "A végpontok közötti titkosítás hitelesítéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal."; @@ -4625,6 +4880,9 @@ /* rcv group event chat item */ "unblocked %@" = "feloldotta %@ letiltását"; +/* No comment provided by engineer. */ +"Undelivered messages" = "Kézbesítetlen üzenetek"; + /* No comment provided by engineer. */ "Unexpected migration state" = "Váratlan átköltöztetési állapot"; @@ -4742,12 +5000,21 @@ /* No comment provided by engineer. */ "Use .onion hosts" = "Onion-kiszolgálók használata"; +/* No comment provided by engineer. */ +"Use %@" = "%@ használata"; + /* No comment provided by engineer. */ "Use chat" = "Csevegés használata"; /* No comment provided by engineer. */ "Use current profile" = "Jelenlegi profil használata"; +/* No comment provided by engineer. */ +"Use for files" = "Használat a fájlokhoz"; + +/* No comment provided by engineer. */ +"Use for messages" = "Használat az üzenetekhez"; + /* No comment provided by engineer. */ "Use for new connections" = "Alkalmazás új kapcsolatokhoz"; @@ -4755,7 +5022,7 @@ "Use from desktop" = "Társítás számítógéppel"; /* No comment provided by engineer. */ -"Use iOS call interface" = "Az iOS hívófelület használata"; +"Use iOS call interface" = "Az iOS hívási felületét használata"; /* No comment provided by engineer. */ "Use new incognito profile" = "Új inkognitóprofil használata"; @@ -4772,6 +5039,9 @@ /* No comment provided by engineer. */ "Use server" = "Kiszolgáló használata"; +/* No comment provided by engineer. */ +"Use servers" = "Kiszolgálók használata"; + /* No comment provided by engineer. */ "Use SimpleX Chat servers?" = "SimpleX Chat-kiszolgálók használata?"; @@ -4830,7 +5100,7 @@ "via group link" = "a csoporthivatkozáson keresztül"; /* chat list item description */ -"via one-time link" = "egyszer használható hivatkozáson keresztül"; +"via one-time link" = "egyszer használható meghívó-hivatkozáson keresztül"; /* No comment provided by engineer. */ "via relay" = "közvetítő-kiszolgálón keresztül"; @@ -4856,9 +5126,15 @@ /* No comment provided by engineer. */ "Videos and files up to 1gb" = "Videók és fájlok 1Gb méretig"; +/* No comment provided by engineer. */ +"View conditions" = "Feltételek megtekintése"; + /* No comment provided by engineer. */ "View security code" = "Biztonsági kód megtekintése"; +/* No comment provided by engineer. */ +"View updated conditions" = "Frissített feltételek megtekintése"; + /* chat feature */ "Visible history" = "Látható előzmények"; @@ -4940,6 +5216,9 @@ /* No comment provided by engineer. */ "when IP hidden" = "ha az IP-cím rejtett"; +/* No comment provided by engineer. */ +"When more than one operator is enabled, none of them has metadata to learn who communicates with whom." = "Amikor egynél több hálózati üzemeltető van engedélyezve, egyikük sem rendelkezik olyan metaadatokkal ahhoz, hogy felderítse, ki kommunikál kivel."; + /* 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." = "Inkognitóprofil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott."; @@ -5007,7 +5286,7 @@ "You are already connecting to %@." = "Már folyamatban van a kapcsolódás ehhez: %@."; /* No comment provided by engineer. */ -"You are already connecting via this one-time link!" = "A kapcsolódás már folyamatban van ezen az egyszer használható hivatkozáson keresztül!"; +"You are already connecting via this one-time link!" = "A kapcsolódás már folyamatban van ezen az egyszer használható meghívó-hivatkozáson keresztül!"; /* No comment provided by engineer. */ "You are already in group %@." = "Ön már a(z) %@ nevű csoport tagja."; @@ -5048,6 +5327,12 @@ /* No comment provided by engineer. */ "You can change it in Appearance settings." = "Ezt a „Megjelenés” menüben módosíthatja."; +/* No comment provided by engineer. */ +"You can configure operators in Network & servers settings." = "Az üzemeltetőket a „Hálózat és kiszolgálók” beállításaban konfigurálhatja."; + +/* No comment provided by engineer. */ +"You can configure servers via settings." = "A kiszolgálókat a beállításokon keresztül konfigurálhatja."; + /* No comment provided by engineer. */ "You can create it later" = "Létrehozás később"; @@ -5072,6 +5357,9 @@ /* No comment provided by engineer. */ "You can send messages to %@ from Archived contacts." = "Az „Archivált ismerősökből” továbbra is küldhet üzeneteket neki: %@."; +/* No comment provided by engineer. */ +"You can set connection name, to remember who the link was shared with." = "Beállíthatja az ismerős nevét, hogy emlékezzen arra, hogy kivel osztotta meg a hivatkozást."; + /* No comment provided by engineer. */ "You can set lock screen notification preview via settings." = "A beállításokon keresztül beállíthatja a lezárási képernyő értesítési előnézetét."; @@ -5163,10 +5451,10 @@ "You sent group invitation" = "Csoportmeghívó elküldve"; /* chat list item description */ -"you shared one-time link" = "egyszer használható hivatkozást osztott meg"; +"you shared one-time link" = "Ön egy egyszer használható meghívó-hivatkozást osztott meg"; /* chat list item description */ -"you shared one-time link incognito" = "egyszer használható hivatkozást osztott meg inkognitóban"; +"you shared one-time link incognito" = "Ön egy egyszer használható meghívó-hivatkozást osztott meg inkognitóban"; /* snd group event chat item */ "you unblocked %@" = "Ön feloldotta %@ letiltását"; @@ -5273,6 +5561,9 @@ /* No comment provided by engineer. */ "Your server address" = "Saját SMP-kiszolgálójának címe"; +/* No comment provided by engineer. */ +"Your servers" = "Az Ön kiszolgálói"; + /* No comment provided by engineer. */ "Your settings" = "Beállítások"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 06d78256c7..9abd660f0c 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -82,6 +82,9 @@ /* No comment provided by engineer. */ "**Recommended**: device token and end-to-end encrypted notifications are sent to SimpleX Chat push server, but it does not see the message content, size or who it is from." = "**Consigliato**: vengono inviati il token del dispositivo e le notifiche al server di notifica di SimpleX Chat, ma non il contenuto del messaggio,la sua dimensione o il suo mittente."; +/* No comment provided by engineer. */ +"**Scan / Paste link**: to connect via a link you received." = "**Scansiona / Incolla link**: per connetterti tramite un link che hai ricevuto."; + /* No comment provided by engineer. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Attenzione**: le notifiche push istantanee richiedono una password salvata nel portachiavi."; @@ -142,6 +145,12 @@ /* No comment provided by engineer. */ "%@ is verified" = "%@ è verificato/a"; +/* No comment provided by engineer. */ +"%@ server" = "%@ server"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ server"; + /* No comment provided by engineer. */ "%@ uploaded" = "%@ caricati"; @@ -295,6 +304,12 @@ /* time interval */ "1 week" = "1 settimana"; +/* No comment provided by engineer. */ +"1-time link" = "Link una tantum"; + +/* No comment provided by engineer. */ +"1-time link can be used *with one contact only* - share in person or via any messenger." = "Il link una tantum può essere usato *con un solo contatto* - condividilo di persona o tramite qualsiasi messenger."; + /* No comment provided by engineer. */ "5 minutes" = "5 minuti"; @@ -342,6 +357,9 @@ swipe action */ "Accept" = "Accetta"; +/* No comment provided by engineer. */ +"Accept conditions" = "Accetta le condizioni"; + /* No comment provided by engineer. */ "Accept connection request?" = "Accettare la richiesta di connessione?"; @@ -355,6 +373,9 @@ /* call status */ "accepted call" = "chiamata accettata"; +/* No comment provided by engineer. */ +"Accepted conditions" = "Condizioni accettate"; + /* No comment provided by engineer. */ "Acknowledged" = "Riconosciuto"; @@ -382,6 +403,12 @@ /* No comment provided by engineer. */ "Add welcome message" = "Aggiungi messaggio di benvenuto"; +/* No comment provided by engineer. */ +"Added media & file servers" = "Server di multimediali e file aggiunti"; + +/* No comment provided by engineer. */ +"Added message servers" = "Server dei messaggi aggiunti"; + /* No comment provided by engineer. */ "Additional accent" = "Principale aggiuntivo"; @@ -397,6 +424,12 @@ /* No comment provided by engineer. */ "Address change will be aborted. Old receiving address will be used." = "Il cambio di indirizzo verrà interrotto. Verrà usato il vecchio indirizzo di ricezione."; +/* No comment provided by engineer. */ +"Address or 1-time link?" = "Indirizzo o link una tantum?"; + +/* No comment provided by engineer. */ +"Address settings" = "Impostazioni dell'indirizzo"; + /* member role */ "admin" = "amministratore"; @@ -439,6 +472,9 @@ /* feature role */ "all members" = "tutti i membri"; +/* No comment provided by engineer. */ +"All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages." = "Tutti i messaggi e i file vengono inviati **crittografati end-to-end**, con sicurezza resistenti alla quantistica nei messaggi diretti."; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Tutti i messaggi verranno eliminati, non è reversibile!"; @@ -855,6 +891,9 @@ set passcode view */ "Change self-destruct passcode" = "Cambia codice di autodistruzione"; +/* authentication reason */ +"Change user profiles" = "Modifica profili utente"; + /* chat item text */ "changed address for you" = "indirizzo cambiato per te"; @@ -918,6 +957,12 @@ /* No comment provided by engineer. */ "Chats" = "Chat"; +/* No comment provided by engineer. */ +"Check messages every 20 min." = "Controlla i messaggi ogni 20 min."; + +/* No comment provided by engineer. */ +"Check messages when allowed." = "Controlla i messaggi quando consentito."; + /* alert title */ "Check server address and try again." = "Controlla l'indirizzo del server e riprova."; @@ -978,6 +1023,33 @@ /* No comment provided by engineer. */ "Completed" = "Completato"; +/* No comment provided by engineer. */ +"Conditions accepted on: %@." = "Condizioni accettate il: %@."; + +/* No comment provided by engineer. */ +"Conditions are accepted for the operator(s): **%@**." = "Le condizioni sono state accettate per gli operatori: **%@**."; + +/* No comment provided by engineer. */ +"Conditions are already accepted for following operator(s): **%@**." = "Le condizioni sono già state accettate per i seguenti operatori: **%@**."; + +/* No comment provided by engineer. */ +"Conditions of use" = "Condizioni d'uso"; + +/* No comment provided by engineer. */ +"Conditions will be accepted for enabled operators after 30 days." = "Le condizioni verranno accettate per gli operatori attivati dopo 30 giorni."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for operator(s): **%@**." = "Le condizioni verranno accettate per gli operatori: **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for the operator(s): **%@**." = "Le condizioni verranno accettate per gli operatori: **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted on: %@." = "Le condizioni verranno accettate il: %@."; + +/* No comment provided by engineer. */ +"Conditions will be automatically accepted for enabled operators on: %@." = "Le condizioni verranno accettate automaticamente per gli operatori attivi il: %@."; + /* No comment provided by engineer. */ "Configure ICE servers" = "Configura server ICE"; @@ -1125,6 +1197,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "Richiesta di connessione inviata!"; +/* No comment provided by engineer. */ +"Connection security" = "Sicurezza della connessione"; + /* No comment provided by engineer. */ "Connection terminated" = "Connessione terminata"; @@ -1206,6 +1281,9 @@ /* No comment provided by engineer. */ "Create" = "Crea"; +/* No comment provided by engineer. */ +"Create 1-time link" = "Crea link una tantum"; + /* No comment provided by engineer. */ "Create a group using a random profile." = "Crea un gruppo usando un profilo casuale."; @@ -1257,6 +1335,9 @@ /* No comment provided by engineer. */ "creator" = "creatore"; +/* No comment provided by engineer. */ +"Current conditions text couldn't be loaded, you can review conditions via this link:" = "Il testo delle condizioni attuali testo non è stato caricato, puoi consultare le condizioni tramite questo link:"; + /* No comment provided by engineer. */ "Current Passcode" = "Codice di accesso attuale"; @@ -1505,6 +1586,9 @@ /* No comment provided by engineer. */ "Deletion errors" = "Errori di eliminazione"; +/* No comment provided by engineer. */ +"Delivered even when Apple drops them." = "Consegnati anche quando Apple li scarta."; + /* No comment provided by engineer. */ "Delivery" = "Consegna"; @@ -1692,6 +1776,9 @@ /* No comment provided by engineer. */ "e2e encrypted" = "crittografato e2e"; +/* No comment provided by engineer. */ +"E2E encrypted notifications." = "Notifiche crittografate E2E."; + /* chat item action */ "Edit" = "Modifica"; @@ -1710,6 +1797,9 @@ /* No comment provided by engineer. */ "Enable camera access" = "Attiva l'accesso alla fotocamera"; +/* No comment provided by engineer. */ +"Enable Flux" = "Attiva Flux"; + /* No comment provided by engineer. */ "Enable for all" = "Attiva per tutti"; @@ -1869,12 +1959,18 @@ /* No comment provided by engineer. */ "Error aborting address change" = "Errore nell'interruzione del cambio di indirizzo"; +/* alert title */ +"Error accepting conditions" = "Errore di accettazione delle condizioni"; + /* No comment provided by engineer. */ "Error accepting contact request" = "Errore nell'accettazione della richiesta di contatto"; /* No comment provided by engineer. */ "Error adding member(s)" = "Errore di aggiunta membro/i"; +/* alert title */ +"Error adding server" = "Errore di aggiunta del server"; + /* No comment provided by engineer. */ "Error changing address" = "Errore nella modifica dell'indirizzo"; @@ -1959,6 +2055,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Errore di ingresso nel gruppo"; +/* alert title */ +"Error loading servers" = "Errore nel caricamento dei server"; + /* No comment provided by engineer. */ "Error migrating settings" = "Errore nella migrazione delle impostazioni"; @@ -1992,6 +2091,9 @@ /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Errore nel salvataggio della password nel portachiavi"; +/* alert title */ +"Error saving servers" = "Errore di salvataggio dei server"; + /* when migrating */ "Error saving settings" = "Errore di salvataggio delle impostazioni"; @@ -2034,6 +2136,9 @@ /* No comment provided by engineer. */ "Error updating message" = "Errore nell'aggiornamento del messaggio"; +/* alert title */ +"Error updating server" = "Errore di aggiornamento del server"; + /* No comment provided by engineer. */ "Error updating settings" = "Errore nell'aggiornamento delle impostazioni"; @@ -2061,6 +2166,9 @@ /* No comment provided by engineer. */ "Errors" = "Errori"; +/* servers error */ +"Errors in servers configuration." = "Errori nella configurazione dei server."; + /* No comment provided by engineer. */ "Even when disabled in the conversation." = "Anche quando disattivato nella conversazione."; @@ -2187,9 +2295,24 @@ /* No comment provided by engineer. */ "Fix not supported by group member" = "Correzione non supportata dal membro del gruppo"; +/* No comment provided by engineer. */ +"for better metadata privacy." = "per una migliore privacy dei metadati."; + +/* servers error */ +"For chat profile %@:" = "Per il profilo di chat %@:"; + /* No comment provided by engineer. */ "For console" = "Per console"; +/* No comment provided by engineer. */ +"For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server." = "Ad esempio, se il tuo contatto riceve messaggi tramite un server di SimpleX Chat, la tua app li consegnerà tramite un server Flux."; + +/* No comment provided by engineer. */ +"For private routing" = "Per l'instradamento privato"; + +/* No comment provided by engineer. */ +"For social media" = "Per i social media"; + /* chat item action */ "Forward" = "Inoltra"; @@ -2382,6 +2505,12 @@ /* time unit */ "hours" = "ore"; +/* No comment provided by engineer. */ +"How it affects privacy" = "Come influisce sulla privacy"; + +/* No comment provided by engineer. */ +"How it helps privacy" = "Come aiuta la privacy"; + /* No comment provided by engineer. */ "How SimpleX works" = "Come funziona SimpleX"; @@ -2958,6 +3087,9 @@ /* No comment provided by engineer. */ "More reliable network connection." = "Connessione di rete più affidabile."; +/* No comment provided by engineer. */ +"More reliable notifications" = "Notifiche più affidabili"; + /* item status description */ "Most likely this connection is deleted." = "Probabilmente questa connessione è stata eliminata."; @@ -2982,12 +3114,18 @@ /* No comment provided by engineer. */ "Network connection" = "Connessione di rete"; +/* No comment provided by engineer. */ +"Network decentralization" = "Decentralizzazione della rete"; + /* snd error text */ "Network issues - message expired after many attempts to send it." = "Problemi di rete - messaggio scaduto dopo molti tentativi di inviarlo."; /* No comment provided by engineer. */ "Network management" = "Gestione della rete"; +/* No comment provided by engineer. */ +"Network operator" = "Operatore di rete"; + /* No comment provided by engineer. */ "Network settings" = "Impostazioni di rete"; @@ -3015,6 +3153,9 @@ /* No comment provided by engineer. */ "New display name" = "Nuovo nome da mostrare"; +/* notification */ +"New events" = "Nuovi eventi"; + /* No comment provided by engineer. */ "New in %@" = "Novità nella %@"; @@ -3036,6 +3177,9 @@ /* No comment provided by engineer. */ "New passphrase…" = "Nuova password…"; +/* No comment provided by engineer. */ +"New server" = "Nuovo server"; + /* No comment provided by engineer. */ "New SOCKS credentials will be used every time you start the app." = "Le nuove credenziali SOCKS verranno usate ogni volta che avvii l'app."; @@ -3081,6 +3225,12 @@ /* No comment provided by engineer. */ "No info, try to reload" = "Nessuna informazione, prova a ricaricare"; +/* servers error */ +"No media & file servers." = "Nessun server di multimediali e file."; + +/* servers error */ +"No message servers." = "Nessun server dei messaggi."; + /* No comment provided by engineer. */ "No network connection" = "Nessuna connessione di rete"; @@ -3099,6 +3249,18 @@ /* No comment provided by engineer. */ "No received or sent files" = "Nessun file ricevuto o inviato"; +/* servers error */ +"No servers for private message routing." = "Nessun server per l'instradamento dei messaggi privati."; + +/* servers error */ +"No servers to receive files." = "Nessun server per ricevere file."; + +/* servers error */ +"No servers to receive messages." = "Nessun server per ricevere messaggi."; + +/* servers error */ +"No servers to send files." = "Nessun server per inviare file."; + /* copied message info in history */ "no text" = "nessun testo"; @@ -3120,6 +3282,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Le notifiche sono disattivate!"; +/* No comment provided by engineer. */ +"Notifications privacy" = "Privacy delle notifiche"; + /* No comment provided by engineer. */ "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Ora gli amministratori possono:\n- eliminare i messaggi dei membri.\n- disattivare i membri (ruolo \"osservatore\")"; @@ -3212,12 +3377,18 @@ /* No comment provided by engineer. */ "Open" = "Apri"; +/* No comment provided by engineer. */ +"Open changes" = "Apri le modifiche"; + /* No comment provided by engineer. */ "Open chat" = "Apri chat"; /* authentication reason */ "Open chat console" = "Apri la console della chat"; +/* No comment provided by engineer. */ +"Open conditions" = "Apri le condizioni"; + /* No comment provided by engineer. */ "Open group" = "Apri gruppo"; @@ -3230,6 +3401,12 @@ /* No comment provided by engineer. */ "Opening app…" = "Apertura dell'app…"; +/* No comment provided by engineer. */ +"Operator" = "Operatore"; + +/* alert title */ +"Operator server" = "Server dell'operatore"; + /* No comment provided by engineer. */ "Or paste archive link" = "O incolla il link dell'archivio"; @@ -3242,6 +3419,9 @@ /* No comment provided by engineer. */ "Or show this code" = "O mostra questo codice"; +/* No comment provided by engineer. */ +"Or to share privately" = "O per condividere in modo privato"; + /* No comment provided by engineer. */ "other" = "altro"; @@ -3383,6 +3563,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Indirizzo server preimpostato"; +/* No comment provided by engineer. */ +"Preset servers" = "Server preimpostati"; + /* No comment provided by engineer. */ "Preview" = "Anteprima"; @@ -3488,6 +3671,9 @@ /* No comment provided by engineer. */ "Push notifications" = "Notifiche push"; +/* No comment provided by engineer. */ +"Push Notifications" = "Notifiche push"; + /* No comment provided by engineer. */ "Push server" = "Server push"; @@ -3735,6 +3921,12 @@ /* chat item action */ "Reveal" = "Rivela"; +/* No comment provided by engineer. */ +"Review conditions" = "Esamina le condizioni"; + +/* No comment provided by engineer. */ +"Review later" = "Esamina più tardi"; + /* No comment provided by engineer. */ "Revoke" = "Revoca"; @@ -3756,6 +3948,12 @@ /* No comment provided by engineer. */ "Safer groups" = "Gruppi più sicuri"; +/* No comment provided by engineer. */ +"Same conditions will apply to operator **%@**." = "Le stesse condizioni si applicheranno all'operatore **%@**."; + +/* No comment provided by engineer. */ +"Same conditions will apply to operator(s): **%@**." = "Le stesse condizioni si applicheranno agli operatori **%@**."; + /* alert button chat item action */ "Save" = "Salva"; @@ -4021,6 +4219,9 @@ /* No comment provided by engineer. */ "Server" = "Server"; +/* alert message */ +"Server added to operator %@." = "Server aggiunto all'operatore %@."; + /* No comment provided by engineer. */ "Server address" = "Indirizzo server"; @@ -4030,6 +4231,15 @@ /* srv error text. */ "Server address is incompatible with network settings." = "L'indirizzo del server non è compatibile con le impostazioni di rete."; +/* alert title */ +"Server operator changed." = "L'operatore del server è cambiato."; + +/* No comment provided by engineer. */ +"Server operators" = "Operatori server"; + +/* alert title */ +"Server protocol changed." = "Il protocollo del server è cambiato."; + /* queue info */ "server queue info: %@\n\nlast received msg: %@" = "info coda server: %1$@\n\nultimo msg ricevuto: %2$@"; @@ -4115,9 +4325,15 @@ /* No comment provided by engineer. */ "Share 1-time link" = "Condividi link una tantum"; +/* No comment provided by engineer. */ +"Share 1-time link with a friend" = "Condividi link una tantum con un amico"; + /* No comment provided by engineer. */ "Share address" = "Condividi indirizzo"; +/* No comment provided by engineer. */ +"Share address publicly" = "Condividi indirizzo pubblicamente"; + /* alert title */ "Share address with contacts?" = "Condividere l'indirizzo con i contatti?"; @@ -4130,6 +4346,9 @@ /* No comment provided by engineer. */ "Share profile" = "Condividi il profilo"; +/* No comment provided by engineer. */ +"Share SimpleX address on social media." = "Condividi indirizzo SimpleX sui social media."; + /* No comment provided by engineer. */ "Share this 1-time invite link" = "Condividi questo link di invito una tantum"; @@ -4175,6 +4394,12 @@ /* No comment provided by engineer. */ "SimpleX Address" = "Indirizzo SimpleX"; +/* No comment provided by engineer. */ +"SimpleX address and 1-time links are safe to share via any messenger." = "L'indirizzo SimpleX e i link una tantum sono sicuri da condividere tramite qualsiasi messenger."; + +/* No comment provided by engineer. */ +"SimpleX address or 1-time link?" = "Indirizzo SimpleX o link una tantum?"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "La sicurezza di SimpleX Chat è stata verificata da Trail of Bits."; @@ -4250,6 +4475,9 @@ /* No comment provided by engineer. */ "Some non-fatal errors occurred during import:" = "Si sono verificati alcuni errori non fatali durante l'importazione:"; +/* alert message */ +"Some servers failed the test:\n%@" = "Alcuni server hanno fallito il test:\n%@"; + /* notification title */ "Somebody" = "Qualcuno"; @@ -4412,6 +4640,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "L'app può avvisarti quando ricevi messaggi o richieste di contatto: apri le impostazioni per attivare."; +/* No comment provided by engineer. */ +"The app protects your privacy by using different operators in each conversation." = "L'app protegge la tua privacy usando diversi operatori in ogni conversazione."; + /* No comment provided by engineer. */ "The app will ask to confirm downloads from unknown file servers (except .onion)." = "L'app chiederà di confermare i download da server di file sconosciuti (eccetto .onion)."; @@ -4421,6 +4652,9 @@ /* No comment provided by engineer. */ "The code you scanned is not a SimpleX link QR code." = "Il codice che hai scansionato non è un codice QR di link SimpleX."; +/* No comment provided by engineer. */ +"The connection reached the limit of undelivered messages, your contact may be offline." = "La connessione ha raggiunto il limite di messaggi non consegnati, il contatto potrebbe essere offline."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "La connessione che hai accettato verrà annullata!"; @@ -4460,6 +4694,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Il profilo è condiviso solo con i tuoi contatti."; +/* No comment provided by engineer. */ +"The second preset operator in the app!" = "Il secondo operatore preimpostato nell'app!"; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "Il secondo segno di spunta che ci mancava! ✅"; @@ -4469,6 +4706,9 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "I server per le nuove connessioni del profilo di chat attuale **%@**."; +/* No comment provided by engineer. */ +"The servers for new files of your current chat profile **%@**." = "I server per nuovi file del tuo profilo di chat attuale **%@**."; + /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "Il testo che hai incollato non è un link SimpleX."; @@ -4478,6 +4718,9 @@ /* No comment provided by engineer. */ "Themes" = "Temi"; +/* No comment provided by engineer. */ +"These conditions will also apply for: **%@**." = "Queste condizioni si applicheranno anche per: **%@**."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Queste impostazioni sono per il tuo profilo attuale **%@**."; @@ -4541,6 +4784,9 @@ /* No comment provided by engineer. */ "To make a new connection" = "Per creare una nuova connessione"; +/* No comment provided by engineer. */ +"To protect against your link being replaced, you can compare contact security codes." = "Per proteggerti dalla sostituzione del tuo link, puoi confrontare i codici di sicurezza del contatto."; + /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Per proteggere il fuso orario, i file immagine/vocali usano UTC."; @@ -4553,6 +4799,9 @@ /* No comment provided by engineer. */ "To protect your privacy, SimpleX uses separate IDs for each of your contacts." = "Per proteggere la privacy, invece degli ID utente utilizzati da tutte le altre piattaforme, SimpleX ha identificatori per le code di messaggi, separati per ciascuno dei tuoi contatti."; +/* No comment provided by engineer. */ +"To receive" = "Per ricevere"; + /* No comment provided by engineer. */ "To record speech please grant permission to use Microphone." = "Per registrare l'audio, concedi l'autorizzazione di usare il microfono."; @@ -4565,9 +4814,15 @@ /* No comment provided by engineer. */ "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Per rivelare il tuo profilo nascosto, inserisci una password completa in un campo di ricerca nella pagina **I tuoi profili di chat**."; +/* No comment provided by engineer. */ +"To send" = "Per inviare"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Per supportare le notifiche push istantanee, il database della chat deve essere migrato."; +/* No comment provided by engineer. */ +"To use the servers of **%@**, accept conditions of use." = "Per usare i server di **%@**, accetta le condizioni d'uso."; + /* No comment provided by engineer. */ "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Per verificare la crittografia end-to-end con il tuo contatto, confrontate (o scansionate) il codice sui vostri dispositivi."; @@ -4625,6 +4880,9 @@ /* rcv group event chat item */ "unblocked %@" = "ha sbloccato %@"; +/* No comment provided by engineer. */ +"Undelivered messages" = "Messaggi non consegnati"; + /* No comment provided by engineer. */ "Unexpected migration state" = "Stato di migrazione imprevisto"; @@ -4742,12 +5000,21 @@ /* No comment provided by engineer. */ "Use .onion hosts" = "Usa gli host .onion"; +/* No comment provided by engineer. */ +"Use %@" = "Usa %@"; + /* No comment provided by engineer. */ "Use chat" = "Usa la chat"; /* No comment provided by engineer. */ "Use current profile" = "Usa il profilo attuale"; +/* No comment provided by engineer. */ +"Use for files" = "Usa per i file"; + +/* No comment provided by engineer. */ +"Use for messages" = "Usa per i messaggi"; + /* No comment provided by engineer. */ "Use for new connections" = "Usa per connessioni nuove"; @@ -4772,6 +5039,9 @@ /* No comment provided by engineer. */ "Use server" = "Usa il server"; +/* No comment provided by engineer. */ +"Use servers" = "Usa i server"; + /* No comment provided by engineer. */ "Use SimpleX Chat servers?" = "Usare i server di SimpleX Chat?"; @@ -4856,9 +5126,15 @@ /* No comment provided by engineer. */ "Videos and files up to 1gb" = "Video e file fino a 1 GB"; +/* No comment provided by engineer. */ +"View conditions" = "Vedi le condizioni"; + /* No comment provided by engineer. */ "View security code" = "Vedi codice di sicurezza"; +/* No comment provided by engineer. */ +"View updated conditions" = "Vedi le condizioni aggiornate"; + /* chat feature */ "Visible history" = "Cronologia visibile"; @@ -4940,6 +5216,9 @@ /* No comment provided by engineer. */ "when IP hidden" = "quando l'IP è nascosto"; +/* No comment provided by engineer. */ +"When more than one operator is enabled, none of them has metadata to learn who communicates with whom." = "Quando più di un operatore è attivato, nessuno di essi ha metadati per scoprire chi comunica con chi."; + /* 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." = "Quando condividi un profilo in incognito con qualcuno, questo profilo verrà utilizzato per i gruppi a cui ti invitano."; @@ -5048,6 +5327,12 @@ /* No comment provided by engineer. */ "You can change it in Appearance settings." = "Puoi cambiarlo nelle impostazioni dell'aspetto."; +/* No comment provided by engineer. */ +"You can configure operators in Network & servers settings." = "Puoi configurare gli operatori nelle impostazioni di rete e server."; + +/* No comment provided by engineer. */ +"You can configure servers via settings." = "Puoi configurare i server nelle impostazioni."; + /* No comment provided by engineer. */ "You can create it later" = "Puoi crearlo più tardi"; @@ -5072,6 +5357,9 @@ /* No comment provided by engineer. */ "You can send messages to %@ from Archived contacts." = "Puoi inviare messaggi a %@ dai contatti archiviati."; +/* No comment provided by engineer. */ +"You can set connection name, to remember who the link was shared with." = "Puoi impostare il nome della connessione per ricordare con chi è stato condiviso il link."; + /* No comment provided by engineer. */ "You can set lock screen notification preview via settings." = "Puoi impostare l'anteprima della notifica nella schermata di blocco tramite le impostazioni."; @@ -5273,6 +5561,9 @@ /* No comment provided by engineer. */ "Your server address" = "L'indirizzo del tuo server"; +/* No comment provided by engineer. */ +"Your servers" = "I tuoi server"; + /* No comment provided by engineer. */ "Your settings" = "Le tue impostazioni"; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 7e1d7f0527..5bcd706702 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -684,6 +684,9 @@ /* No comment provided by engineer. */ "Chat profile" = "ユーザープロフィール"; +/* No comment provided by engineer. */ +"Chat theme" = "チャットテーマ"; + /* No comment provided by engineer. */ "Chats" = "チャット"; @@ -699,6 +702,12 @@ /* No comment provided by engineer. */ "Choose from library" = "ライブラリから選択"; +/* No comment provided by engineer. */ +"Chunks deleted" = "チャンクが削除されました"; + +/* No comment provided by engineer. */ +"Chunks downloaded" = "チャンクがダウンロードされました"; + /* swipe action */ "Clear" = "消す"; @@ -708,9 +717,15 @@ /* No comment provided by engineer. */ "Clear conversation?" = "ダイアログのクリアしますか?"; +/* No comment provided by engineer. */ +"Clear private notes?" = "プライベートノートを消しますか?"; + /* No comment provided by engineer. */ "Clear verification" = "検証を消す"; +/* No comment provided by engineer. */ +"Color mode" = "色設定"; + /* No comment provided by engineer. */ "colored" = "色付き"; @@ -723,6 +738,9 @@ /* No comment provided by engineer. */ "complete" = "完了"; +/* No comment provided by engineer. */ +"Completed" = "完了"; + /* No comment provided by engineer. */ "Configure ICE servers" = "ICEサーバを設定"; @@ -747,9 +765,15 @@ /* No comment provided by engineer. */ "Connect incognito" = "シークレットモードで接続"; +/* No comment provided by engineer. */ +"Connect to desktop" = "デスクトップに接続"; + /* No comment provided by engineer. */ "connect to SimpleX Chat developers." = "SimpleX Chat 開発者に接続します。"; +/* No comment provided by engineer. */ +"Connect to your friends faster." = "友達ともっと速くつながりましょう。"; + /* No comment provided by engineer. */ "Connect via link" = "リンク経由で接続"; @@ -759,9 +783,24 @@ /* No comment provided by engineer. */ "connected" = "接続中"; +/* No comment provided by engineer. */ +"Connected" = "接続中"; + +/* No comment provided by engineer. */ +"Connected desktop" = "デスクトップに接続済"; + +/* No comment provided by engineer. */ +"Connected servers" = "接続中のサーバ"; + +/* No comment provided by engineer. */ +"Connected to desktop" = "デスクトップに接続済"; + /* No comment provided by engineer. */ "connecting" = "接続待ち"; +/* No comment provided by engineer. */ +"Connecting" = "接続待ち"; + /* No comment provided by engineer. */ "connecting (accepted)" = "接続待ち (承諾済み)"; @@ -783,12 +822,21 @@ /* No comment provided by engineer. */ "Connecting server… (error: %@)" = "サーバーに接続中… (エラー: %@)"; +/* No comment provided by engineer. */ +"Connecting to contact, please wait or check later!" = "連絡先に接続中です。しばらくお待ちいただくか、後で確認してください!"; + +/* No comment provided by engineer. */ +"Connecting to desktop" = "デスクトップに接続中"; + /* chat list item title */ "connecting…" = "接続待ち…"; /* No comment provided by engineer. */ "Connection" = "接続"; +/* No comment provided by engineer. */ +"Connection and servers status." = "接続とサーバーのステータス"; + /* No comment provided by engineer. */ "Connection error" = "接続エラー"; @@ -801,6 +849,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "接続リクエストを送信しました!"; +/* No comment provided by engineer. */ +"Connection terminated" = "接続停止"; + /* No comment provided by engineer. */ "Connection timeout" = "接続タイムアウト"; @@ -891,9 +942,15 @@ /* No comment provided by engineer. */ "Custom time" = "カスタム時間"; +/* No comment provided by engineer. */ +"Customize theme" = "カスタムテーマ"; + /* No comment provided by engineer. */ "Dark" = "ダークモード"; +/* No comment provided by engineer. */ +"Dark mode colors" = "ダークモードカラー"; + /* No comment provided by engineer. */ "Database downgrade" = "データーベースのダウングレード"; @@ -954,6 +1011,9 @@ /* time unit */ "days" = "日"; +/* No comment provided by engineer. */ +"Debug delivery" = "配信のデバッグ"; + /* No comment provided by engineer. */ "Decentralized" = "分散型"; @@ -1085,9 +1145,15 @@ /* No comment provided by engineer. */ "Description" = "説明"; +/* No comment provided by engineer. */ +"Desktop devices" = "デスクトップ機器"; + /* No comment provided by engineer. */ "Develop" = "開発"; +/* No comment provided by engineer. */ +"Developer options" = "開発者向けの設定"; + /* No comment provided by engineer. */ "Developer tools" = "開発ツール"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index aa324a2ee0..fadec1b09b 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -82,6 +82,9 @@ /* No comment provided by engineer. */ "**Recommended**: device token and end-to-end encrypted notifications are sent to SimpleX Chat push server, but it does not see the message content, size or who it is from." = "**Aanbevolen**: apparaattoken en meldingen worden naar de SimpleX Chat-meldingsserver gestuurd, maar niet de berichtinhoud, -grootte of van wie het afkomstig is."; +/* No comment provided by engineer. */ +"**Scan / Paste link**: to connect via a link you received." = "**Link scannen/plakken**: om verbinding te maken via een link die u hebt ontvangen."; + /* No comment provided by engineer. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Waarschuwing**: voor directe push meldingen is een wachtwoord vereist dat is opgeslagen in de Keychain."; @@ -142,6 +145,12 @@ /* No comment provided by engineer. */ "%@ is verified" = "%@ is geverifieerd"; +/* No comment provided by engineer. */ +"%@ server" = "%@ server"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ servers"; + /* No comment provided by engineer. */ "%@ uploaded" = "%@ geüpload"; @@ -295,6 +304,12 @@ /* time interval */ "1 week" = "1 week"; +/* No comment provided by engineer. */ +"1-time link" = "Eenmalige link"; + +/* No comment provided by engineer. */ +"1-time link can be used *with one contact only* - share in person or via any messenger." = "Eenmalige link die *slechts met één contactpersoon* kan worden gebruikt - deel persoonlijk of via een messenger."; + /* No comment provided by engineer. */ "5 minutes" = "5 minuten"; @@ -342,6 +357,9 @@ swipe action */ "Accept" = "Accepteer"; +/* No comment provided by engineer. */ +"Accept conditions" = "Accepteer voorwaarden"; + /* No comment provided by engineer. */ "Accept connection request?" = "Accepteer contact"; @@ -355,6 +373,9 @@ /* call status */ "accepted call" = "geaccepteerde oproep"; +/* No comment provided by engineer. */ +"Accepted conditions" = "Geaccepteerde voorwaarden"; + /* No comment provided by engineer. */ "Acknowledged" = "Erkend"; @@ -382,6 +403,12 @@ /* No comment provided by engineer. */ "Add welcome message" = "Welkom bericht toevoegen"; +/* No comment provided by engineer. */ +"Added media & file servers" = "Media- en bestandsservers toegevoegd"; + +/* No comment provided by engineer. */ +"Added message servers" = "Berichtservers toegevoegd"; + /* No comment provided by engineer. */ "Additional accent" = "Extra accent"; @@ -397,6 +424,12 @@ /* No comment provided by engineer. */ "Address change will be aborted. Old receiving address will be used." = "Adres wijziging wordt afgebroken. Het oude ontvangstadres wordt gebruikt."; +/* No comment provided by engineer. */ +"Address or 1-time link?" = "Adres of eenmalige link?"; + +/* No comment provided by engineer. */ +"Address settings" = "Adres instellingen"; + /* member role */ "admin" = "Beheerder"; @@ -439,6 +472,9 @@ /* feature role */ "all members" = "alle leden"; +/* No comment provided by engineer. */ +"All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages." = "Alle berichten en bestanden worden **end-to-end versleuteld** verzonden, met post-quantumbeveiliging in directe berichten."; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Alle berichten worden verwijderd. Dit kan niet ongedaan worden gemaakt!"; @@ -855,6 +891,9 @@ set passcode view */ "Change self-destruct passcode" = "Zelfvernietigings code wijzigen"; +/* authentication reason */ +"Change user profiles" = "Gebruikersprofielen wijzigen"; + /* chat item text */ "changed address for you" = "adres voor u gewijzigd"; @@ -918,6 +957,12 @@ /* No comment provided by engineer. */ "Chats" = "Chats"; +/* No comment provided by engineer. */ +"Check messages every 20 min." = "Controleer uw berichten elke 20 minuten."; + +/* No comment provided by engineer. */ +"Check messages when allowed." = "Controleer berichten indien toegestaan."; + /* alert title */ "Check server address and try again." = "Controleer het server adres en probeer het opnieuw."; @@ -978,6 +1023,33 @@ /* No comment provided by engineer. */ "Completed" = "Voltooid"; +/* No comment provided by engineer. */ +"Conditions accepted on: %@." = "Voorwaarden geaccepteerd op: %@."; + +/* No comment provided by engineer. */ +"Conditions are accepted for the operator(s): **%@**." = "Voorwaarden worden geaccepteerd voor de operator(s): **%@**."; + +/* No comment provided by engineer. */ +"Conditions are already accepted for following operator(s): **%@**." = "Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**."; + +/* No comment provided by engineer. */ +"Conditions of use" = "Gebruiksvoorwaarden"; + +/* No comment provided by engineer. */ +"Conditions will be accepted for enabled operators after 30 days." = "Voor ingeschakelde operators worden de voorwaarden na 30 dagen geaccepteerd."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for operator(s): **%@**." = "Voorwaarden worden geaccepteerd voor operator(s): **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for the operator(s): **%@**." = "Voorwaarden worden geaccepteerd voor de operator(s): **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted on: %@." = "Voorwaarden worden geaccepteerd op: %@."; + +/* No comment provided by engineer. */ +"Conditions will be automatically accepted for enabled operators on: %@." = "Voorwaarden worden automatisch geaccepteerd voor ingeschakelde operators op: %@."; + /* No comment provided by engineer. */ "Configure ICE servers" = "ICE servers configureren"; @@ -1125,6 +1197,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "Verbindingsverzoek verzonden!"; +/* No comment provided by engineer. */ +"Connection security" = "Beveiliging van de verbinding"; + /* No comment provided by engineer. */ "Connection terminated" = "Verbinding beëindigd"; @@ -1206,6 +1281,9 @@ /* No comment provided by engineer. */ "Create" = "Maak"; +/* No comment provided by engineer. */ +"Create 1-time link" = "Eenmalige link maken"; + /* No comment provided by engineer. */ "Create a group using a random profile." = "Maak een groep met een willekeurig profiel."; @@ -1257,6 +1335,9 @@ /* No comment provided by engineer. */ "creator" = "creator"; +/* No comment provided by engineer. */ +"Current conditions text couldn't be loaded, you can review conditions via this link:" = "De tekst van de huidige voorwaarden kon niet worden geladen. U kunt de voorwaarden bekijken via deze link:"; + /* No comment provided by engineer. */ "Current Passcode" = "Huidige toegangscode"; @@ -1505,6 +1586,9 @@ /* No comment provided by engineer. */ "Deletion errors" = "Verwijderingsfouten"; +/* No comment provided by engineer. */ +"Delivered even when Apple drops them." = "Geleverd ook als Apple ze verliest"; + /* No comment provided by engineer. */ "Delivery" = "Bezorging"; @@ -1692,6 +1776,9 @@ /* No comment provided by engineer. */ "e2e encrypted" = "e2e versleuteld"; +/* No comment provided by engineer. */ +"E2E encrypted notifications." = "E2E versleutelde meldingen."; + /* chat item action */ "Edit" = "Bewerk"; @@ -1710,6 +1797,9 @@ /* No comment provided by engineer. */ "Enable camera access" = "Schakel cameratoegang in"; +/* No comment provided by engineer. */ +"Enable Flux" = "Flux inschakelen"; + /* No comment provided by engineer. */ "Enable for all" = "Inschakelen voor iedereen"; @@ -1869,12 +1959,18 @@ /* No comment provided by engineer. */ "Error aborting address change" = "Fout bij het afbreken van adres wijziging"; +/* alert title */ +"Error accepting conditions" = "Fout bij het accepteren van voorwaarden"; + /* No comment provided by engineer. */ "Error accepting contact request" = "Fout bij het accepteren van een contactverzoek"; /* No comment provided by engineer. */ "Error adding member(s)" = "Fout bij het toevoegen van leden"; +/* alert title */ +"Error adding server" = "Fout bij toevoegen server"; + /* No comment provided by engineer. */ "Error changing address" = "Fout bij wijzigen van adres"; @@ -1959,6 +2055,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Fout bij lid worden van groep"; +/* alert title */ +"Error loading servers" = "Fout bij het laden van servers"; + /* No comment provided by engineer. */ "Error migrating settings" = "Fout bij migreren van instellingen"; @@ -1992,6 +2091,9 @@ /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Fout bij opslaan van wachtwoord in de keychain"; +/* alert title */ +"Error saving servers" = "Fout bij het opslaan van servers"; + /* when migrating */ "Error saving settings" = "Fout bij opslaan van instellingen"; @@ -2034,6 +2136,9 @@ /* No comment provided by engineer. */ "Error updating message" = "Fout bij updaten van bericht"; +/* alert title */ +"Error updating server" = "Fout bij het updaten van de server"; + /* No comment provided by engineer. */ "Error updating settings" = "Fout bij bijwerken van instellingen"; @@ -2061,6 +2166,9 @@ /* No comment provided by engineer. */ "Errors" = "Fouten"; +/* servers error */ +"Errors in servers configuration." = "Fouten in de serverconfiguratie."; + /* No comment provided by engineer. */ "Even when disabled in the conversation." = "Zelfs wanneer uitgeschakeld in het gesprek."; @@ -2187,9 +2295,24 @@ /* No comment provided by engineer. */ "Fix not supported by group member" = "Herstel wordt niet ondersteund door groepslid"; +/* No comment provided by engineer. */ +"for better metadata privacy." = "voor betere privacy van metagegevens."; + +/* servers error */ +"For chat profile %@:" = "Voor chatprofiel %@:"; + /* No comment provided by engineer. */ "For console" = "Voor console"; +/* No comment provided by engineer. */ +"For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server." = "Als uw contactpersoon bijvoorbeeld berichten ontvangt via een SimpleX Chat-server, worden deze door uw app via een Flux-server verzonden."; + +/* No comment provided by engineer. */ +"For private routing" = "Voor privé-routering"; + +/* No comment provided by engineer. */ +"For social media" = "Voor social media"; + /* chat item action */ "Forward" = "Doorsturen"; @@ -2382,6 +2505,12 @@ /* time unit */ "hours" = "uren"; +/* No comment provided by engineer. */ +"How it affects privacy" = "Hoe het de privacy beïnvloedt"; + +/* No comment provided by engineer. */ +"How it helps privacy" = "Hoe het de privacy helpt"; + /* No comment provided by engineer. */ "How SimpleX works" = "Hoe SimpleX werkt"; @@ -2958,6 +3087,9 @@ /* No comment provided by engineer. */ "More reliable network connection." = "Betrouwbaardere netwerkverbinding."; +/* No comment provided by engineer. */ +"More reliable notifications" = "Betrouwbaardere meldingen"; + /* item status description */ "Most likely this connection is deleted." = "Hoogstwaarschijnlijk is deze verbinding verwijderd."; @@ -2982,12 +3114,18 @@ /* No comment provided by engineer. */ "Network connection" = "Netwerkverbinding"; +/* No comment provided by engineer. */ +"Network decentralization" = "Netwerk decentralisatie"; + /* snd error text */ "Network issues - message expired after many attempts to send it." = "Netwerkproblemen - bericht is verlopen na vele pogingen om het te verzenden."; /* No comment provided by engineer. */ "Network management" = "Netwerkbeheer"; +/* No comment provided by engineer. */ +"Network operator" = "Netwerkbeheerder"; + /* No comment provided by engineer. */ "Network settings" = "Netwerk instellingen"; @@ -3015,6 +3153,9 @@ /* No comment provided by engineer. */ "New display name" = "Nieuwe weergavenaam"; +/* notification */ +"New events" = "Nieuwe gebeurtenissen"; + /* No comment provided by engineer. */ "New in %@" = "Nieuw in %@"; @@ -3036,6 +3177,9 @@ /* No comment provided by engineer. */ "New passphrase…" = "Nieuw wachtwoord…"; +/* No comment provided by engineer. */ +"New server" = "Nieuwe server"; + /* No comment provided by engineer. */ "New SOCKS credentials will be used every time you start the app." = "Elke keer dat u de app start, worden er nieuwe SOCKS-inloggegevens gebruikt."; @@ -3081,6 +3225,12 @@ /* No comment provided by engineer. */ "No info, try to reload" = "Geen info, probeer opnieuw te laden"; +/* servers error */ +"No media & file servers." = "Geen media- en bestandsservers."; + +/* servers error */ +"No message servers." = "Geen berichtenservers."; + /* No comment provided by engineer. */ "No network connection" = "Geen netwerkverbinding"; @@ -3099,6 +3249,18 @@ /* No comment provided by engineer. */ "No received or sent files" = "Geen ontvangen of verzonden bestanden"; +/* servers error */ +"No servers for private message routing." = "Geen servers voor het routeren van privéberichten."; + +/* servers error */ +"No servers to receive files." = "Geen servers om bestanden te ontvangen."; + +/* servers error */ +"No servers to receive messages." = "Geen servers om berichten te ontvangen."; + +/* servers error */ +"No servers to send files." = "Geen servers om bestanden te verzenden."; + /* copied message info in history */ "no text" = "geen tekst"; @@ -3120,6 +3282,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Meldingen zijn uitgeschakeld!"; +/* No comment provided by engineer. */ +"Notifications privacy" = "Privacy van meldingen"; + /* No comment provided by engineer. */ "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Nu kunnen beheerders: \n- berichten van leden verwijderen.\n- schakel leden uit (\"waarnemer\" rol)"; @@ -3212,12 +3377,18 @@ /* No comment provided by engineer. */ "Open" = "Open"; +/* No comment provided by engineer. */ +"Open changes" = "Wijzigingen openen"; + /* No comment provided by engineer. */ "Open chat" = "Chat openen"; /* authentication reason */ "Open chat console" = "Chat console openen"; +/* No comment provided by engineer. */ +"Open conditions" = "Open voorwaarden"; + /* No comment provided by engineer. */ "Open group" = "Open groep"; @@ -3230,6 +3401,12 @@ /* No comment provided by engineer. */ "Opening app…" = "App openen…"; +/* No comment provided by engineer. */ +"Operator" = "Operator"; + +/* alert title */ +"Operator server" = "Operatorserver"; + /* No comment provided by engineer. */ "Or paste archive link" = "Of plak de archief link"; @@ -3242,6 +3419,9 @@ /* No comment provided by engineer. */ "Or show this code" = "Of laat deze code zien"; +/* No comment provided by engineer. */ +"Or to share privately" = "Of om privé te delen"; + /* No comment provided by engineer. */ "other" = "overig"; @@ -3383,6 +3563,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Vooraf ingesteld server adres"; +/* No comment provided by engineer. */ +"Preset servers" = "Vooraf ingestelde servers"; + /* No comment provided by engineer. */ "Preview" = "Voorbeeld"; @@ -3488,6 +3671,9 @@ /* No comment provided by engineer. */ "Push notifications" = "Push meldingen"; +/* No comment provided by engineer. */ +"Push Notifications" = "Pushmeldingen"; + /* No comment provided by engineer. */ "Push server" = "Push server"; @@ -3735,6 +3921,12 @@ /* chat item action */ "Reveal" = "Onthullen"; +/* No comment provided by engineer. */ +"Review conditions" = "Voorwaarden bekijken"; + +/* No comment provided by engineer. */ +"Review later" = "Later beoordelen"; + /* No comment provided by engineer. */ "Revoke" = "Intrekken"; @@ -3756,6 +3948,12 @@ /* No comment provided by engineer. */ "Safer groups" = "Veiligere groepen"; +/* No comment provided by engineer. */ +"Same conditions will apply to operator **%@**." = "Dezelfde voorwaarden gelden voor operator **%@**."; + +/* No comment provided by engineer. */ +"Same conditions will apply to operator(s): **%@**." = "Dezelfde voorwaarden gelden voor operator(s): **%@**."; + /* alert button chat item action */ "Save" = "Opslaan"; @@ -4021,6 +4219,9 @@ /* No comment provided by engineer. */ "Server" = "Server"; +/* alert message */ +"Server added to operator %@." = "Server toegevoegd aan operator %@."; + /* No comment provided by engineer. */ "Server address" = "Server adres"; @@ -4030,6 +4231,15 @@ /* srv error text. */ "Server address is incompatible with network settings." = "Serveradres is niet compatibel met netwerkinstellingen."; +/* alert title */ +"Server operator changed." = "Serveroperator gewijzigd."; + +/* No comment provided by engineer. */ +"Server operators" = "Serverbeheerders"; + +/* alert title */ +"Server protocol changed." = "Serverprotocol gewijzigd."; + /* queue info */ "server queue info: %@\n\nlast received msg: %@" = "informatie over serverwachtrij: %1$@\n\nlaatst ontvangen bericht: %2$@"; @@ -4115,9 +4325,15 @@ /* No comment provided by engineer. */ "Share 1-time link" = "Eenmalige link delen"; +/* No comment provided by engineer. */ +"Share 1-time link with a friend" = "Deel eenmalig een link met een vriend"; + /* No comment provided by engineer. */ "Share address" = "Adres delen"; +/* No comment provided by engineer. */ +"Share address publicly" = "Adres openbaar delen"; + /* alert title */ "Share address with contacts?" = "Adres delen met contacten?"; @@ -4130,6 +4346,9 @@ /* No comment provided by engineer. */ "Share profile" = "Profiel delen"; +/* No comment provided by engineer. */ +"Share SimpleX address on social media." = "Deel het SimpleX-adres op sociale media."; + /* No comment provided by engineer. */ "Share this 1-time invite link" = "Deel deze eenmalige uitnodigingslink"; @@ -4175,6 +4394,12 @@ /* No comment provided by engineer. */ "SimpleX Address" = "SimpleX adres"; +/* No comment provided by engineer. */ +"SimpleX address and 1-time links are safe to share via any messenger." = "SimpleX-adressen en eenmalige links kunnen veilig worden gedeeld via elke messenger."; + +/* No comment provided by engineer. */ +"SimpleX address or 1-time link?" = "SimpleX adres of eenmalige link?"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits."; @@ -4250,6 +4475,9 @@ /* No comment provided by engineer. */ "Some non-fatal errors occurred during import:" = "Er zijn enkele niet-fatale fouten opgetreden tijdens het importeren:"; +/* alert message */ +"Some servers failed the test:\n%@" = "Sommige servers zijn niet geslaagd voor de test:\n%@"; + /* notification title */ "Somebody" = "Iemand"; @@ -4412,6 +4640,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "De app kan u op de hoogte stellen wanneer u berichten of contact verzoeken ontvangt - open de instellingen om dit in te schakelen."; +/* No comment provided by engineer. */ +"The app protects your privacy by using different operators in each conversation." = "De app beschermt uw privacy door in elk gesprek andere operatoren te gebruiken."; + /* No comment provided by engineer. */ "The app will ask to confirm downloads from unknown file servers (except .onion)." = "De app vraagt om downloads van onbekende bestandsservers (behalve .onion) te bevestigen."; @@ -4421,6 +4652,9 @@ /* No comment provided by engineer. */ "The code you scanned is not a SimpleX link QR code." = "De code die u heeft gescand is geen SimpleX link QR-code."; +/* No comment provided by engineer. */ +"The connection reached the limit of undelivered messages, your contact may be offline." = "De verbinding heeft de limiet van niet-afgeleverde berichten bereikt. Uw contactpersoon is mogelijk offline."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "De door u geaccepteerde verbinding wordt geannuleerd!"; @@ -4460,6 +4694,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Het profiel wordt alleen gedeeld met uw contacten."; +/* No comment provided by engineer. */ +"The second preset operator in the app!" = "De tweede vooraf ingestelde operator in de app!"; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "De tweede vink die we gemist hebben! ✅"; @@ -4469,6 +4706,9 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "De servers voor nieuwe verbindingen van uw huidige chatprofiel **%@**."; +/* No comment provided by engineer. */ +"The servers for new files of your current chat profile **%@**." = "De servers voor nieuwe bestanden van uw huidige chatprofiel **%@**."; + /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "De tekst die u hebt geplakt is geen SimpleX link."; @@ -4478,6 +4718,9 @@ /* No comment provided by engineer. */ "Themes" = "Thema's"; +/* No comment provided by engineer. */ +"These conditions will also apply for: **%@**." = "Deze voorwaarden zijn ook van toepassing op: **%@**."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Deze instellingen zijn voor uw huidige profiel **%@**."; @@ -4541,6 +4784,9 @@ /* No comment provided by engineer. */ "To make a new connection" = "Om een nieuwe verbinding te maken"; +/* No comment provided by engineer. */ +"To protect against your link being replaced, you can compare contact security codes." = "Om te voorkomen dat uw link wordt vervangen, kunt u contactbeveiligingscodes vergelijken."; + /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Om de tijdzone te beschermen, gebruiken afbeeldings-/spraakbestanden UTC."; @@ -4553,6 +4799,9 @@ /* No comment provided by engineer. */ "To protect your privacy, SimpleX uses separate IDs for each of your contacts." = "Om de privacy te beschermen, heeft SimpleX in plaats van gebruikers-ID's die door alle andere platforms worden gebruikt, ID's voor berichten wachtrijen, afzonderlijk voor elk van uw contacten."; +/* No comment provided by engineer. */ +"To receive" = "Om te ontvangen"; + /* No comment provided by engineer. */ "To record speech please grant permission to use Microphone." = "Geef toestemming om de microfoon te gebruiken om spraak op te nemen."; @@ -4565,9 +4814,15 @@ /* No comment provided by engineer. */ "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Om uw verborgen profiel te onthullen, voert u een volledig wachtwoord in een zoek veld in op de pagina **Uw chatprofielen**."; +/* No comment provided by engineer. */ +"To send" = "Om te verzenden"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Om directe push meldingen te ondersteunen, moet de chat database worden gemigreerd."; +/* No comment provided by engineer. */ +"To use the servers of **%@**, accept conditions of use." = "Om de servers van **%@** te gebruiken, moet u de gebruiksvoorwaarden accepteren."; + /* No comment provided by engineer. */ "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Vergelijk (of scan) de code op uw apparaten om end-to-end-codering met uw contact te verifiëren."; @@ -4625,6 +4880,9 @@ /* rcv group event chat item */ "unblocked %@" = "gedeblokkeerd %@"; +/* No comment provided by engineer. */ +"Undelivered messages" = "Niet afgeleverde berichten"; + /* No comment provided by engineer. */ "Unexpected migration state" = "Onverwachte migratiestatus"; @@ -4742,12 +5000,21 @@ /* No comment provided by engineer. */ "Use .onion hosts" = "Gebruik .onion-hosts"; +/* No comment provided by engineer. */ +"Use %@" = "Gebruik %@"; + /* No comment provided by engineer. */ "Use chat" = "Gebruik chat"; /* No comment provided by engineer. */ "Use current profile" = "Gebruik het huidige profiel"; +/* No comment provided by engineer. */ +"Use for files" = "Gebruik voor bestanden"; + +/* No comment provided by engineer. */ +"Use for messages" = "Gebruik voor berichten"; + /* No comment provided by engineer. */ "Use for new connections" = "Gebruik voor nieuwe verbindingen"; @@ -4772,6 +5039,9 @@ /* No comment provided by engineer. */ "Use server" = "Gebruik server"; +/* No comment provided by engineer. */ +"Use servers" = "Gebruik servers"; + /* No comment provided by engineer. */ "Use SimpleX Chat servers?" = "SimpleX Chat servers gebruiken?"; @@ -4856,9 +5126,15 @@ /* No comment provided by engineer. */ "Videos and files up to 1gb" = "Video's en bestanden tot 1 GB"; +/* No comment provided by engineer. */ +"View conditions" = "Bekijk voorwaarden"; + /* No comment provided by engineer. */ "View security code" = "Beveiligingscode bekijken"; +/* No comment provided by engineer. */ +"View updated conditions" = "Bekijk de bijgewerkte voorwaarden"; + /* chat feature */ "Visible history" = "Zichtbare geschiedenis"; @@ -4940,6 +5216,9 @@ /* No comment provided by engineer. */ "when IP hidden" = "wanneer IP verborgen is"; +/* No comment provided by engineer. */ +"When more than one operator is enabled, none of them has metadata to learn who communicates with whom." = "Wanneer er meer dan één operator is ingeschakeld, beschikt geen enkele operator over metagegevens om te achterhalen wie met wie communiceert."; + /* 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." = "Wanneer je een incognito profiel met iemand deelt, wordt dit profiel gebruikt voor de groepen waarvoor ze je uitnodigen."; @@ -5048,6 +5327,12 @@ /* No comment provided by engineer. */ "You can change it in Appearance settings." = "U kunt dit wijzigen in de instellingen onder uiterlijk."; +/* No comment provided by engineer. */ +"You can configure operators in Network & servers settings." = "U kunt operators configureren in Netwerk- en serverinstellingen."; + +/* No comment provided by engineer. */ +"You can configure servers via settings." = "U kunt servers configureren via instellingen."; + /* No comment provided by engineer. */ "You can create it later" = "U kan het later maken"; @@ -5072,6 +5357,9 @@ /* No comment provided by engineer. */ "You can send messages to %@ from Archived contacts." = "U kunt berichten naar %@ sturen vanuit gearchiveerde contacten."; +/* No comment provided by engineer. */ +"You can set connection name, to remember who the link was shared with." = "U kunt een verbindingsnaam instellen, zodat u kunt onthouden met wie de link is gedeeld."; + /* No comment provided by engineer. */ "You can set lock screen notification preview via settings." = "U kunt een voorbeeld van een melding op het vergrendeld scherm instellen via instellingen."; @@ -5273,6 +5561,9 @@ /* No comment provided by engineer. */ "Your server address" = "Uw server adres"; +/* No comment provided by engineer. */ +"Your servers" = "Uw servers"; + /* No comment provided by engineer. */ "Your settings" = "Uw instellingen"; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 9af4581140..7b66aa5efb 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -82,6 +82,9 @@ /* No comment provided by engineer. */ "**Recommended**: device token and end-to-end encrypted notifications are sent to SimpleX Chat push server, but it does not see the message content, size or who it is from." = "**Рекомендується**: токен пристрою та сповіщення надсилаються на сервер сповіщень SimpleX Chat, але не вміст повідомлення, його розмір або від кого воно надійшло."; +/* No comment provided by engineer. */ +"**Scan / Paste link**: to connect via a link you received." = "**Відсканувати / Вставити посилання**: підключитися за отриманим посиланням."; + /* No comment provided by engineer. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Попередження**: Для отримання миттєвих пуш-сповіщень потрібна парольна фраза, збережена у брелоку."; @@ -142,12 +145,21 @@ /* No comment provided by engineer. */ "%@ is verified" = "%@ перевірено"; +/* No comment provided by engineer. */ +"%@ server" = "%@ сервер"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ сервери"; + /* No comment provided by engineer. */ "%@ uploaded" = "%@ завантажено"; /* notification title */ "%@ wants to connect!" = "%@ хоче підключитися!"; +/* format for date separator in chat */ +"%@, %@" = "%1$@, %2$@"; + /* No comment provided by engineer. */ "%@, %@ and %lld members" = "%@, %@ та %lld учасників"; @@ -169,9 +181,15 @@ /* forward confirmation reason */ "%d file(s) were deleted." = "%их файл(ів) було видалено."; +/* forward confirmation reason */ +"%d file(s) were not downloaded." = "%d файл(и) не було завантажено."; + /* time interval */ "%d hours" = "%d годин"; +/* alert title */ +"%d messages not forwarded" = "%d повідомлень не переслано"; + /* time interval */ "%d min" = "%d хв"; @@ -286,6 +304,12 @@ /* time interval */ "1 week" = "1 тиждень"; +/* No comment provided by engineer. */ +"1-time link" = "Одноразове посилання"; + +/* No comment provided by engineer. */ +"1-time link can be used *with one contact only* - share in person or via any messenger." = "Одноразове посилання можна використовувати *тільки з одним контактом* - поділіться ним особисто або через будь-який месенджер."; + /* No comment provided by engineer. */ "5 minutes" = "5 хвилин"; @@ -333,6 +357,9 @@ swipe action */ "Accept" = "Прийняти"; +/* No comment provided by engineer. */ +"Accept conditions" = "Прийняти умови"; + /* No comment provided by engineer. */ "Accept connection request?" = "Прийняти запит на підключення?"; @@ -346,6 +373,9 @@ /* call status */ "accepted call" = "прийнято виклик"; +/* No comment provided by engineer. */ +"Accepted conditions" = "Прийняті умови"; + /* No comment provided by engineer. */ "Acknowledged" = "Визнано"; @@ -373,6 +403,12 @@ /* No comment provided by engineer. */ "Add welcome message" = "Додати вітальне повідомлення"; +/* No comment provided by engineer. */ +"Added media & file servers" = "Додано медіа та файлові сервери"; + +/* No comment provided by engineer. */ +"Added message servers" = "Додано сервери повідомлень"; + /* No comment provided by engineer. */ "Additional accent" = "Додатковий акцент"; @@ -388,6 +424,12 @@ /* No comment provided by engineer. */ "Address change will be aborted. Old receiving address will be used." = "Зміна адреси буде скасована. Буде використано стару адресу отримання."; +/* No comment provided by engineer. */ +"Address or 1-time link?" = "Адреса чи одноразове посилання?"; + +/* No comment provided by engineer. */ +"Address settings" = "Налаштування адреси"; + /* member role */ "admin" = "адмін"; @@ -430,6 +472,9 @@ /* feature role */ "all members" = "всі учасники"; +/* No comment provided by engineer. */ +"All messages and files are sent **end-to-end encrypted**, with post-quantum security in direct messages." = "Всі повідомлення та файли надсилаються **наскрізним шифруванням**, з пост-квантовим захистом у прямих повідомленнях."; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Усі повідомлення будуть видалені - цю дію не можна скасувати!"; @@ -565,6 +610,9 @@ /* No comment provided by engineer. */ "App passcode is replaced with self-destruct passcode." = "Пароль програми замінено на пароль самознищення."; +/* No comment provided by engineer. */ +"App session" = "Сесія програми"; + /* No comment provided by engineer. */ "App version" = "Версія програми"; @@ -637,6 +685,9 @@ /* No comment provided by engineer. */ "Auto-accept images" = "Автоматичне прийняття зображень"; +/* alert title */ +"Auto-accept settings" = "Автоприйняття налаштувань"; + /* No comment provided by engineer. */ "Back" = "Назад"; @@ -658,15 +709,30 @@ /* No comment provided by engineer. */ "Bad message ID" = "Неправильний ідентифікатор повідомлення"; +/* No comment provided by engineer. */ +"Better calls" = "Кращі дзвінки"; + /* No comment provided by engineer. */ "Better groups" = "Кращі групи"; +/* No comment provided by engineer. */ +"Better message dates." = "Кращі дати повідомлень."; + /* No comment provided by engineer. */ "Better messages" = "Кращі повідомлення"; /* No comment provided by engineer. */ "Better networking" = "Краща мережа"; +/* No comment provided by engineer. */ +"Better notifications" = "Кращі сповіщення"; + +/* No comment provided by engineer. */ +"Better security ✅" = "Краща безпека ✅"; + +/* No comment provided by engineer. */ +"Better user experience" = "Покращений користувацький досвід"; + /* No comment provided by engineer. */ "Black" = "Чорний"; @@ -825,6 +891,9 @@ set passcode view */ "Change self-destruct passcode" = "Змінити пароль самознищення"; +/* authentication reason */ +"Change user profiles" = "Зміна профілів користувачів"; + /* chat item text */ "changed address for you" = "змінили для вас адресу"; @@ -876,6 +945,9 @@ /* No comment provided by engineer. */ "Chat preferences" = "Налаштування чату"; +/* alert message */ +"Chat preferences were changed." = "Змінено налаштування чату."; + /* No comment provided by engineer. */ "Chat profile" = "Профіль користувача"; @@ -885,6 +957,12 @@ /* No comment provided by engineer. */ "Chats" = "Чати"; +/* No comment provided by engineer. */ +"Check messages every 20 min." = "Перевіряйте повідомлення кожні 20 хв."; + +/* No comment provided by engineer. */ +"Check messages when allowed." = "Перевірте повідомлення, коли це дозволено."; + /* alert title */ "Check server address and try again." = "Перевірте адресу сервера та спробуйте ще раз."; @@ -945,6 +1023,33 @@ /* No comment provided by engineer. */ "Completed" = "Завершено"; +/* No comment provided by engineer. */ +"Conditions accepted on: %@." = "Умови приймаються на: %@."; + +/* No comment provided by engineer. */ +"Conditions are accepted for the operator(s): **%@**." = "Для оператора(ів) приймаються умови: **%@**."; + +/* No comment provided by engineer. */ +"Conditions are already accepted for following operator(s): **%@**." = "Умови вже прийняті для наступних операторів: **%@**."; + +/* No comment provided by engineer. */ +"Conditions of use" = "Умови використання"; + +/* No comment provided by engineer. */ +"Conditions will be accepted for enabled operators after 30 days." = "Умови будуть прийняті для ввімкнених операторів через 30 днів."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for operator(s): **%@**." = "Умови приймаються для оператора(ів): **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted for the operator(s): **%@**." = "Для оператора(ів) приймаються умови: **%@**."; + +/* No comment provided by engineer. */ +"Conditions will be accepted on: %@." = "Умови приймаються на: %@."; + +/* No comment provided by engineer. */ +"Conditions will be automatically accepted for enabled operators on: %@." = "Умови будуть автоматично прийняті для увімкнених операторів на: %@."; + /* No comment provided by engineer. */ "Configure ICE servers" = "Налаштування серверів ICE"; @@ -1092,6 +1197,9 @@ /* No comment provided by engineer. */ "Connection request sent!" = "Запит на підключення відправлено!"; +/* No comment provided by engineer. */ +"Connection security" = "Безпека з'єднання"; + /* No comment provided by engineer. */ "Connection terminated" = "З'єднання розірвано"; @@ -1164,12 +1272,18 @@ /* No comment provided by engineer. */ "Core version: v%@" = "Основна версія: v%@"; +/* No comment provided by engineer. */ +"Corner" = "Кут"; + /* No comment provided by engineer. */ "Correct name to %@?" = "Виправити ім'я на %@?"; /* No comment provided by engineer. */ "Create" = "Створити"; +/* No comment provided by engineer. */ +"Create 1-time link" = "Створити одноразове посилання"; + /* No comment provided by engineer. */ "Create a group using a random profile." = "Створіть групу, використовуючи випадковий профіль."; @@ -1221,6 +1335,9 @@ /* No comment provided by engineer. */ "creator" = "творець"; +/* No comment provided by engineer. */ +"Current conditions text couldn't be loaded, you can review conditions via this link:" = "Текст поточних умов не вдалося завантажити, ви можете переглянути умови за цим посиланням:"; + /* No comment provided by engineer. */ "Current Passcode" = "Поточний пароль"; @@ -1239,6 +1356,9 @@ /* No comment provided by engineer. */ "Custom time" = "Індивідуальний час"; +/* No comment provided by engineer. */ +"Customizable message shape." = "Налаштовується форма повідомлення."; + /* No comment provided by engineer. */ "Customize theme" = "Налаштувати тему"; @@ -1424,6 +1544,9 @@ /* No comment provided by engineer. */ "Delete old database?" = "Видалити стару базу даних?"; +/* No comment provided by engineer. */ +"Delete or moderate up to 200 messages." = "Видалити або модерувати до 200 повідомлень."; + /* No comment provided by engineer. */ "Delete pending connection?" = "Видалити очікуване з'єднання?"; @@ -1463,6 +1586,9 @@ /* No comment provided by engineer. */ "Deletion errors" = "Помилки видалення"; +/* No comment provided by engineer. */ +"Delivered even when Apple drops them." = "Доставляються навіть тоді, коли Apple кидає їх."; + /* No comment provided by engineer. */ "Delivery" = "Доставка"; @@ -1586,6 +1712,9 @@ /* No comment provided by engineer. */ "Do NOT send messages directly, even if your or destination server does not support private routing." = "НЕ надсилайте повідомлення напряму, навіть якщо ваш сервер або сервер призначення не підтримує приватну маршрутизацію."; +/* No comment provided by engineer. */ +"Do not use credentials with proxy." = "Не використовуйте облікові дані з проксі."; + /* No comment provided by engineer. */ "Do NOT use private routing." = "НЕ використовуйте приватну маршрутизацію."; @@ -1617,6 +1746,9 @@ /* server test step */ "Download file" = "Завантажити файл"; +/* alert action */ +"Download files" = "Завантажити файли"; + /* No comment provided by engineer. */ "Downloaded" = "Завантажено"; @@ -1644,6 +1776,9 @@ /* No comment provided by engineer. */ "e2e encrypted" = "e2e зашифрований"; +/* No comment provided by engineer. */ +"E2E encrypted notifications." = "Зашифровані сповіщення E2E."; + /* chat item action */ "Edit" = "Редагувати"; @@ -1662,6 +1797,9 @@ /* No comment provided by engineer. */ "Enable camera access" = "Увімкніть доступ до камери"; +/* No comment provided by engineer. */ +"Enable Flux" = "Увімкнути Flux"; + /* No comment provided by engineer. */ "Enable for all" = "Увімкнути для всіх"; @@ -1821,21 +1959,33 @@ /* No comment provided by engineer. */ "Error aborting address change" = "Помилка скасування зміни адреси"; +/* alert title */ +"Error accepting conditions" = "Помилка прийняття умов"; + /* No comment provided by engineer. */ "Error accepting contact request" = "Помилка при прийнятті запиту на контакт"; /* No comment provided by engineer. */ "Error adding member(s)" = "Помилка додавання користувача(ів)"; +/* alert title */ +"Error adding server" = "Помилка додавання сервера"; + /* No comment provided by engineer. */ "Error changing address" = "Помилка зміни адреси"; +/* No comment provided by engineer. */ +"Error changing connection profile" = "Помилка при зміні профілю з'єднання"; + /* No comment provided by engineer. */ "Error changing role" = "Помилка зміни ролі"; /* No comment provided by engineer. */ "Error changing setting" = "Помилка зміни налаштування"; +/* No comment provided by engineer. */ +"Error changing to incognito!" = "Помилка переходу на інкогніто!"; + /* No comment provided by engineer. */ "Error connecting to forwarding server %@. Please try later." = "Помилка підключення до сервера переадресації %@. Спробуйте пізніше."; @@ -1905,6 +2055,12 @@ /* No comment provided by engineer. */ "Error joining group" = "Помилка приєднання до групи"; +/* alert title */ +"Error loading servers" = "Помилка завантаження серверів"; + +/* No comment provided by engineer. */ +"Error migrating settings" = "Помилка міграції налаштувань"; + /* No comment provided by engineer. */ "Error opening chat" = "Помилка відкриття чату"; @@ -1935,6 +2091,9 @@ /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Помилка збереження пароля на keychain"; +/* alert title */ +"Error saving servers" = "Сервери збереження помилок"; + /* when migrating */ "Error saving settings" = "Налаштування збереження помилок"; @@ -1962,6 +2121,9 @@ /* No comment provided by engineer. */ "Error stopping chat" = "Помилка зупинки чату"; +/* No comment provided by engineer. */ +"Error switching profile" = "Помилка перемикання профілю"; + /* alertTitle */ "Error switching profile!" = "Помилка перемикання профілю!"; @@ -1974,6 +2136,9 @@ /* No comment provided by engineer. */ "Error updating message" = "Повідомлення про помилку оновлення"; +/* alert title */ +"Error updating server" = "Помилка оновлення сервера"; + /* No comment provided by engineer. */ "Error updating settings" = "Помилка оновлення налаштувань"; @@ -2001,6 +2166,9 @@ /* No comment provided by engineer. */ "Errors" = "Помилки"; +/* servers error */ +"Errors in servers configuration." = "Помилки в конфігурації серверів."; + /* No comment provided by engineer. */ "Even when disabled in the conversation." = "Навіть коли вимкнений у розмові."; @@ -2049,6 +2217,9 @@ /* No comment provided by engineer. */ "File error" = "Помилка файлу"; +/* alert message */ +"File errors:\n%@" = "Помилки файлів:\n%@"; + /* file error text */ "File not found - most likely file was deleted or cancelled." = "Файл не знайдено - найімовірніше, файл було видалено або скасовано."; @@ -2124,15 +2295,42 @@ /* No comment provided by engineer. */ "Fix not supported by group member" = "Виправлення не підтримується учасником групи"; +/* No comment provided by engineer. */ +"for better metadata privacy." = "для кращої конфіденційності метаданих."; + +/* servers error */ +"For chat profile %@:" = "Для профілю чату %@:"; + /* No comment provided by engineer. */ "For console" = "Для консолі"; +/* No comment provided by engineer. */ +"For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server." = "Наприклад, якщо ваш контакт отримує повідомлення через сервер SimpleX Chat, ваш додаток доставлятиме їх через сервер Flux."; + +/* No comment provided by engineer. */ +"For private routing" = "Для приватної маршрутизації"; + +/* No comment provided by engineer. */ +"For social media" = "Для соціальних мереж"; + /* chat item action */ "Forward" = "Пересилання"; +/* alert title */ +"Forward %d message(s)?" = "Переслати %d повідомлення(ь)?"; + /* No comment provided by engineer. */ "Forward and save messages" = "Пересилання та збереження повідомлень"; +/* alert action */ +"Forward messages" = "Пересилання повідомлень"; + +/* alert message */ +"Forward messages without files?" = "Пересилати повідомлення без файлів?"; + +/* No comment provided by engineer. */ +"Forward up to 20 messages at once." = "Пересилайте до 20 повідомлень одночасно."; + /* No comment provided by engineer. */ "forwarded" = "переслано"; @@ -2142,6 +2340,9 @@ /* No comment provided by engineer. */ "Forwarded from" = "Переслано з"; +/* No comment provided by engineer. */ +"Forwarding %lld messages" = "Пересилання повідомлень %lld"; + /* No comment provided by engineer. */ "Forwarding server %@ failed to connect to destination server %@. Please try later." = "Серверу переадресації %@ не вдалося з'єднатися з сервером призначення %@. Спробуйте пізніше."; @@ -2304,6 +2505,12 @@ /* time unit */ "hours" = "години"; +/* No comment provided by engineer. */ +"How it affects privacy" = "Як це впливає на конфіденційність"; + +/* No comment provided by engineer. */ +"How it helps privacy" = "Як це захищає приватність"; + /* No comment provided by engineer. */ "How SimpleX works" = "Як працює SimpleX"; @@ -2367,6 +2574,9 @@ /* No comment provided by engineer. */ "Importing archive" = "Імпорт архіву"; +/* No comment provided by engineer. */ +"Improved delivery, reduced traffic usage.\nMore improvements are coming soon!" = "Покращена доставка, зменшене використання трафіку.\nНезабаром з'являться нові покращення!"; + /* No comment provided by engineer. */ "Improved message delivery" = "Покращена доставка повідомлень"; @@ -2526,6 +2736,9 @@ /* No comment provided by engineer. */ "iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "Пароль бази даних буде безпечно збережено в iOS Keychain після запуску чату або зміни пароля - це дасть змогу отримувати миттєві повідомлення."; +/* No comment provided by engineer. */ +"IP address" = "IP-адреса"; + /* No comment provided by engineer. */ "Irreversible message deletion" = "Безповоротне видалення повідомлення"; @@ -2766,6 +2979,9 @@ /* No comment provided by engineer. */ "Message servers" = "Сервери повідомлень"; +/* No comment provided by engineer. */ +"Message shape" = "Форма повідомлення"; + /* No comment provided by engineer. */ "Message source remains private." = "Джерело повідомлення залишається приватним."; @@ -2796,6 +3012,9 @@ /* No comment provided by engineer. */ "Messages sent" = "Надіслані повідомлення"; +/* alert message */ +"Messages were deleted after you selected them." = "Повідомлення були видалені після того, як ви їх вибрали."; + /* No comment provided by engineer. */ "Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Повідомлення, файли та дзвінки захищені **наскрізним шифруванням** з ідеальною секретністю переадресації, відмовою та відновленням після злому."; @@ -2868,6 +3087,9 @@ /* No comment provided by engineer. */ "More reliable network connection." = "Більш надійне з'єднання з мережею."; +/* No comment provided by engineer. */ +"More reliable notifications" = "Більш надійні сповіщення"; + /* item status description */ "Most likely this connection is deleted." = "Швидше за все, це з'єднання видалено."; @@ -2892,12 +3114,18 @@ /* No comment provided by engineer. */ "Network connection" = "Підключення до мережі"; +/* No comment provided by engineer. */ +"Network decentralization" = "Децентралізація мережі"; + /* snd error text */ "Network issues - message expired after many attempts to send it." = "Проблеми з мережею - термін дії повідомлення закінчився після багатьох спроб надіслати його."; /* No comment provided by engineer. */ "Network management" = "Керування мережею"; +/* No comment provided by engineer. */ +"Network operator" = "Мережевий оператор"; + /* No comment provided by engineer. */ "Network settings" = "Налаштування мережі"; @@ -2925,6 +3153,9 @@ /* No comment provided by engineer. */ "New display name" = "Нове ім'я відображення"; +/* notification */ +"New events" = "Нові події"; + /* No comment provided by engineer. */ "New in %@" = "Нове в %@"; @@ -2946,6 +3177,15 @@ /* No comment provided by engineer. */ "New passphrase…" = "Новий пароль…"; +/* No comment provided by engineer. */ +"New server" = "Новий сервер"; + +/* No comment provided by engineer. */ +"New SOCKS credentials will be used every time you start the app." = "Нові облікові дані SOCKS будуть використовуватися при кожному запуску програми."; + +/* No comment provided by engineer. */ +"New SOCKS credentials will be used for each server." = "Для кожного сервера будуть використовуватися нові облікові дані SOCKS."; + /* pref value */ "no" = "ні"; @@ -2985,9 +3225,21 @@ /* No comment provided by engineer. */ "No info, try to reload" = "Немає інформації, спробуйте перезавантажити"; +/* servers error */ +"No media & file servers." = "Ніяких медіа та файлових серверів."; + +/* servers error */ +"No message servers." = "Ніяких серверів повідомлень."; + /* No comment provided by engineer. */ "No network connection" = "Немає підключення до мережі"; +/* No comment provided by engineer. */ +"No permission to record speech" = "Немає дозволу на запис промови"; + +/* No comment provided by engineer. */ +"No permission to record video" = "Немає дозволу на запис відео"; + /* No comment provided by engineer. */ "No permission to record voice message" = "Немає дозволу на запис голосового повідомлення"; @@ -2997,6 +3249,18 @@ /* No comment provided by engineer. */ "No received or sent files" = "Немає отриманих або відправлених файлів"; +/* servers error */ +"No servers for private message routing." = "Немає серверів для маршрутизації приватних повідомлень."; + +/* servers error */ +"No servers to receive files." = "Немає серверів для отримання файлів."; + +/* servers error */ +"No servers to receive messages." = "Немає серверів для отримання повідомлень."; + +/* servers error */ +"No servers to send files." = "Немає серверів для надсилання файлів."; + /* copied message info in history */ "no text" = "без тексту"; @@ -3009,12 +3273,18 @@ /* No comment provided by engineer. */ "Nothing selected" = "Нічого не вибрано"; +/* alert title */ +"Nothing to forward!" = "Нічого пересилати!"; + /* No comment provided by engineer. */ "Notifications" = "Сповіщення"; /* No comment provided by engineer. */ "Notifications are disabled!" = "Сповіщення вимкнено!"; +/* No comment provided by engineer. */ +"Notifications privacy" = "Сповіщення про приватність"; + /* No comment provided by engineer. */ "Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Тепер адміністратори можуть\n- видаляти повідомлення користувачів.\n- відключати користувачів (роль \"спостерігач\")"; @@ -3107,12 +3377,18 @@ /* No comment provided by engineer. */ "Open" = "Відкрито"; +/* No comment provided by engineer. */ +"Open changes" = "Відкриті зміни"; + /* No comment provided by engineer. */ "Open chat" = "Відкритий чат"; /* authentication reason */ "Open chat console" = "Відкрийте консоль чату"; +/* No comment provided by engineer. */ +"Open conditions" = "Відкриті умови"; + /* No comment provided by engineer. */ "Open group" = "Відкрита група"; @@ -3125,6 +3401,12 @@ /* No comment provided by engineer. */ "Opening app…" = "Відкриваємо програму…"; +/* No comment provided by engineer. */ +"Operator" = "Оператор"; + +/* alert title */ +"Operator server" = "Сервер оператора"; + /* No comment provided by engineer. */ "Or paste archive link" = "Або вставте посилання на архів"; @@ -3137,6 +3419,9 @@ /* No comment provided by engineer. */ "Or show this code" = "Або покажіть цей код"; +/* No comment provided by engineer. */ +"Or to share privately" = "Або поділитися приватно"; + /* No comment provided by engineer. */ "other" = "інший"; @@ -3146,6 +3431,9 @@ /* No comment provided by engineer. */ "other errors" = "інші помилки"; +/* alert message */ +"Other file errors:\n%@" = "Інші помилки файлів:\n%@"; + /* member role */ "owner" = "власник"; @@ -3167,6 +3455,9 @@ /* No comment provided by engineer. */ "Passcode set!" = "Пароль встановлено!"; +/* No comment provided by engineer. */ +"Password" = "Пароль"; + /* No comment provided by engineer. */ "Password to show" = "Показати пароль"; @@ -3260,6 +3551,9 @@ /* No comment provided by engineer. */ "Polish interface" = "Польський інтерфейс"; +/* No comment provided by engineer. */ +"Port" = "Порт"; + /* server test error */ "Possibly, certificate fingerprint in server address is incorrect" = "Можливо, в адресі сервера неправильно вказано відбиток сертифіката"; @@ -3269,6 +3563,9 @@ /* No comment provided by engineer. */ "Preset server address" = "Попередньо встановлена адреса сервера"; +/* No comment provided by engineer. */ +"Preset servers" = "Попередньо встановлені сервери"; + /* No comment provided by engineer. */ "Preview" = "Попередній перегляд"; @@ -3368,9 +3665,15 @@ /* No comment provided by engineer. */ "Proxied servers" = "Проксі-сервери"; +/* No comment provided by engineer. */ +"Proxy requires password" = "Проксі вимагає пароль"; + /* No comment provided by engineer. */ "Push notifications" = "Push-повідомлення"; +/* No comment provided by engineer. */ +"Push Notifications" = "Push-сповіщення"; + /* No comment provided by engineer. */ "Push server" = "Push-сервер"; @@ -3510,6 +3813,9 @@ /* No comment provided by engineer. */ "Remove" = "Видалити"; +/* No comment provided by engineer. */ +"Remove archive?" = "Видалити архів?"; + /* No comment provided by engineer. */ "Remove image" = "Видалити зображення"; @@ -3615,6 +3921,12 @@ /* chat item action */ "Reveal" = "Показувати"; +/* No comment provided by engineer. */ +"Review conditions" = "Умови перегляду"; + +/* No comment provided by engineer. */ +"Review later" = "Перегляньте пізніше"; + /* No comment provided by engineer. */ "Revoke" = "Відкликати"; @@ -3636,6 +3948,12 @@ /* No comment provided by engineer. */ "Safer groups" = "Безпечніші групи"; +/* No comment provided by engineer. */ +"Same conditions will apply to operator **%@**." = "Такі ж умови діятимуть і для оператора **%@**."; + +/* No comment provided by engineer. */ +"Same conditions will apply to operator(s): **%@**." = "Такі ж умови будуть застосовуватися до оператора(ів): **%@**."; + /* alert button chat item action */ "Save" = "Зберегти"; @@ -3679,6 +3997,9 @@ /* No comment provided by engineer. */ "Save welcome message?" = "Зберегти вітальне повідомлення?"; +/* alert title */ +"Save your profile?" = "Зберегти свій профіль?"; + /* No comment provided by engineer. */ "saved" = "збережено"; @@ -3697,6 +4018,9 @@ /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Збережені сервери WebRTC ICE буде видалено"; +/* No comment provided by engineer. */ +"Saving %lld messages" = "Збереження повідомлень %lld"; + /* No comment provided by engineer. */ "Scale" = "Масштаб"; @@ -3760,6 +4084,9 @@ /* chat item action */ "Select" = "Виберіть"; +/* No comment provided by engineer. */ +"Select chat profile" = "Виберіть профіль чату"; + /* No comment provided by engineer. */ "Selected %lld" = "Вибрано %lld"; @@ -3889,6 +4216,12 @@ /* No comment provided by engineer. */ "Sent via proxy" = "Відправлено через проксі"; +/* No comment provided by engineer. */ +"Server" = "Сервер"; + +/* alert message */ +"Server added to operator %@." = "Сервер додано до оператора %@."; + /* No comment provided by engineer. */ "Server address" = "Адреса сервера"; @@ -3898,6 +4231,15 @@ /* srv error text. */ "Server address is incompatible with network settings." = "Адреса сервера несумісна з налаштуваннями мережі."; +/* alert title */ +"Server operator changed." = "Оператор сервера змінився."; + +/* No comment provided by engineer. */ +"Server operators" = "Оператори серверів"; + +/* alert title */ +"Server protocol changed." = "Протокол сервера змінено."; + /* queue info */ "server queue info: %@\n\nlast received msg: %@" = "інформація про чергу на сервері: %1$@\n\nостаннє отримане повідомлення: %2$@"; @@ -3970,6 +4312,9 @@ /* No comment provided by engineer. */ "Settings" = "Налаштування"; +/* alert message */ +"Settings were changed." = "Налаштування були змінені."; + /* No comment provided by engineer. */ "Shape profile images" = "Сформуйте зображення профілю"; @@ -3980,9 +4325,15 @@ /* No comment provided by engineer. */ "Share 1-time link" = "Поділитися 1-разовим посиланням"; +/* No comment provided by engineer. */ +"Share 1-time link with a friend" = "Поділіться одноразовим посиланням з другом"; + /* No comment provided by engineer. */ "Share address" = "Поділитися адресою"; +/* No comment provided by engineer. */ +"Share address publicly" = "Поділіться адресою публічно"; + /* alert title */ "Share address with contacts?" = "Поділіться адресою з контактами?"; @@ -3992,6 +4343,12 @@ /* No comment provided by engineer. */ "Share link" = "Поділіться посиланням"; +/* No comment provided by engineer. */ +"Share profile" = "Поділіться профілем"; + +/* No comment provided by engineer. */ +"Share SimpleX address on social media." = "Поділіться адресою SimpleX у соціальних мережах."; + /* No comment provided by engineer. */ "Share this 1-time invite link" = "Поділіться цим одноразовим посиланням-запрошенням"; @@ -4037,6 +4394,12 @@ /* No comment provided by engineer. */ "SimpleX Address" = "Адреса SimpleX"; +/* No comment provided by engineer. */ +"SimpleX address and 1-time links are safe to share via any messenger." = "SimpleX-адреси та одноразові посилання можна безпечно ділитися через будь-який месенджер."; + +/* No comment provided by engineer. */ +"SimpleX address or 1-time link?" = "SimpleX адреса або одноразове посилання?"; + /* No comment provided by engineer. */ "SimpleX Chat security was audited by Trail of Bits." = "Безпека SimpleX Chat була перевірена компанією Trail of Bits."; @@ -4073,6 +4436,9 @@ /* simplex link type */ "SimpleX one-time invitation" = "Одноразове запрошення SimpleX"; +/* No comment provided by engineer. */ +"SimpleX protocols reviewed by Trail of Bits." = "Протоколи SimpleX, розглянуті Trail of Bits."; + /* No comment provided by engineer. */ "Simplified incognito mode" = "Спрощений режим інкогніто"; @@ -4091,9 +4457,15 @@ /* No comment provided by engineer. */ "SMP server" = "Сервер SMP"; +/* No comment provided by engineer. */ +"SOCKS proxy" = "Проксі SOCKS"; + /* blur media */ "Soft" = "М'який"; +/* No comment provided by engineer. */ +"Some app settings were not migrated." = "Деякі налаштування програми не були перенесені."; + /* No comment provided by engineer. */ "Some file(s) were not exported:" = "Деякі файли не було експортовано:"; @@ -4103,6 +4475,9 @@ /* No comment provided by engineer. */ "Some non-fatal errors occurred during import:" = "Під час імпорту виникли деякі несмертельні помилки:"; +/* alert message */ +"Some servers failed the test:\n%@" = "Деякі сервери не пройшли тестування:\n%@"; + /* notification title */ "Somebody" = "Хтось"; @@ -4184,12 +4559,21 @@ /* No comment provided by engineer. */ "Support SimpleX Chat" = "Підтримка чату SimpleX"; +/* No comment provided by engineer. */ +"Switch audio and video during the call." = "Перемикайте аудіо та відео під час дзвінка."; + +/* No comment provided by engineer. */ +"Switch chat profile for 1-time invitations." = "Переключіть профіль чату для отримання одноразових запрошень."; + /* No comment provided by engineer. */ "System" = "Система"; /* No comment provided by engineer. */ "System authentication" = "Автентифікація системи"; +/* No comment provided by engineer. */ +"Tail" = "Хвіст"; + /* No comment provided by engineer. */ "Take picture" = "Сфотографуйте"; @@ -4256,6 +4640,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "Додаток може сповіщати вас, коли ви отримуєте повідомлення або запити на контакт - будь ласка, відкрийте налаштування, щоб увімкнути цю функцію."; +/* No comment provided by engineer. */ +"The app protects your privacy by using different operators in each conversation." = "Додаток захищає вашу конфіденційність, використовуючи різних операторів у кожній розмові."; + /* No comment provided by engineer. */ "The app will ask to confirm downloads from unknown file servers (except .onion)." = "Програма попросить підтвердити завантаження з невідомих файлових серверів (крім .onion)."; @@ -4265,6 +4652,9 @@ /* No comment provided by engineer. */ "The code you scanned is not a SimpleX link QR code." = "Відсканований вами код не є QR-кодом посилання SimpleX."; +/* No comment provided by engineer. */ +"The connection reached the limit of undelivered messages, your contact may be offline." = "З'єднання досягло ліміту недоставлених повідомлень, ваш контакт може бути офлайн."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "Прийняте вами з'єднання буде скасовано!"; @@ -4304,6 +4694,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Профіль доступний лише вашим контактам."; +/* No comment provided by engineer. */ +"The second preset operator in the app!" = "Другий попередньо встановлений оператор у застосунку!"; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "Другу галочку ми пропустили! ✅"; @@ -4313,12 +4706,21 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "Сервери для нових підключень вашого поточного профілю чату **%@**."; +/* No comment provided by engineer. */ +"The servers for new files of your current chat profile **%@**." = "Сервери для нових файлів вашого поточного профілю чату **%@**."; + /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "Текст, який ви вставили, не є посиланням SimpleX."; +/* No comment provided by engineer. */ +"The uploaded database archive will be permanently removed from the servers." = "Завантажений архів бази даних буде назавжди видалено з серверів."; + /* No comment provided by engineer. */ "Themes" = "Теми"; +/* No comment provided by engineer. */ +"These conditions will also apply for: **%@**." = "Ці умови також поширюються на: **%@**."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Ці налаштування стосуються вашого поточного профілю **%@**."; @@ -4382,6 +4784,9 @@ /* No comment provided by engineer. */ "To make a new connection" = "Щоб створити нове з'єднання"; +/* No comment provided by engineer. */ +"To protect against your link being replaced, you can compare contact security codes." = "Щоб захиститися від заміни вашого посилання, ви можете порівняти коди безпеки контактів."; + /* No comment provided by engineer. */ "To protect timezone, image/voice files use UTC." = "Для захисту часового поясу у файлах зображень/голосу використовується UTC."; @@ -4394,15 +4799,30 @@ /* No comment provided by engineer. */ "To protect your privacy, SimpleX uses separate IDs for each of your contacts." = "Щоб захистити конфіденційність, замість ідентифікаторів користувачів, які використовуються на всіх інших платформах, SimpleX має ідентифікатори для черг повідомлень, окремі для кожного з ваших контактів."; +/* No comment provided by engineer. */ +"To receive" = "Щоб отримати"; + +/* No comment provided by engineer. */ +"To record speech please grant permission to use Microphone." = "Для запису промови, будь ласка, надайте дозвіл на використання мікрофону."; + +/* No comment provided by engineer. */ +"To record video please grant permission to use Camera." = "Для запису відео, будь ласка, надайте дозвіл на використання камери."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Щоб записати голосове повідомлення, будь ласка, надайте дозвіл на використання мікрофону."; /* No comment provided by engineer. */ "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Щоб відкрити свій прихований профіль, введіть повний пароль у поле пошуку на сторінці **Ваші профілі чату**."; +/* No comment provided by engineer. */ +"To send" = "Щоб відправити"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Для підтримки миттєвих push-повідомлень необхідно перенести базу даних чату."; +/* No comment provided by engineer. */ +"To use the servers of **%@**, accept conditions of use." = "Щоб користуватися серверами **%@**, прийміть умови використання."; + /* No comment provided by engineer. */ "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Щоб перевірити наскрізне шифрування з вашим контактом, порівняйте (або відскануйте) код на ваших пристроях."; @@ -4460,6 +4880,9 @@ /* rcv group event chat item */ "unblocked %@" = "розблоковано %@"; +/* No comment provided by engineer. */ +"Undelivered messages" = "Недоставлені повідомлення"; + /* No comment provided by engineer. */ "Unexpected migration state" = "Неочікуваний стан міграції"; @@ -4577,12 +5000,21 @@ /* No comment provided by engineer. */ "Use .onion hosts" = "Використовуйте хости .onion"; +/* No comment provided by engineer. */ +"Use %@" = "Використовуйте %@"; + /* No comment provided by engineer. */ "Use chat" = "Використовуйте чат"; /* No comment provided by engineer. */ "Use current profile" = "Використовувати поточний профіль"; +/* No comment provided by engineer. */ +"Use for files" = "Використовуйте для файлів"; + +/* No comment provided by engineer. */ +"Use for messages" = "Використовуйте для повідомлень"; + /* No comment provided by engineer. */ "Use for new connections" = "Використовуйте для нових з'єднань"; @@ -4607,9 +5039,15 @@ /* No comment provided by engineer. */ "Use server" = "Використовувати сервер"; +/* No comment provided by engineer. */ +"Use servers" = "Використовуйте сервери"; + /* No comment provided by engineer. */ "Use SimpleX Chat servers?" = "Використовувати сервери SimpleX Chat?"; +/* No comment provided by engineer. */ +"Use SOCKS proxy" = "Використовуйте SOCKS проксі"; + /* No comment provided by engineer. */ "Use the app while in the call." = "Використовуйте додаток під час розмови."; @@ -4619,6 +5057,9 @@ /* No comment provided by engineer. */ "User selection" = "Вибір користувача"; +/* No comment provided by engineer. */ +"Username" = "Ім'я користувача"; + /* No comment provided by engineer. */ "Using SimpleX Chat servers." = "Використання серверів SimpleX Chat."; @@ -4685,9 +5126,15 @@ /* No comment provided by engineer. */ "Videos and files up to 1gb" = "Відео та файли до 1 Гб"; +/* No comment provided by engineer. */ +"View conditions" = "Умови перегляду"; + /* No comment provided by engineer. */ "View security code" = "Переглянути код безпеки"; +/* No comment provided by engineer. */ +"View updated conditions" = "Переглянути оновлені умови"; + /* chat feature */ "Visible history" = "Видима історія"; @@ -4769,6 +5216,9 @@ /* No comment provided by engineer. */ "when IP hidden" = "коли IP приховано"; +/* No comment provided by engineer. */ +"When more than one operator is enabled, none of them has metadata to learn who communicates with whom." = "Коли увімкнено більше одного оператора, жоден з них не має метаданих, щоб дізнатися, хто з ким спілкується."; + /* No comment provided by engineer. */ "When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Коли ви ділитеся з кимось своїм профілем інкогніто, цей профіль буде використовуватися для груп, до яких вас запрошують."; @@ -4877,6 +5327,12 @@ /* No comment provided by engineer. */ "You can change it in Appearance settings." = "Ви можете змінити його в налаштуваннях зовнішнього вигляду."; +/* No comment provided by engineer. */ +"You can configure operators in Network & servers settings." = "Ви можете налаштувати операторів у налаштуваннях Мережі та серверів."; + +/* No comment provided by engineer. */ +"You can configure servers via settings." = "Ви можете налаштувати сервери за допомогою налаштувань."; + /* No comment provided by engineer. */ "You can create it later" = "Ви можете створити його пізніше"; @@ -4901,6 +5357,9 @@ /* No comment provided by engineer. */ "You can send messages to %@ from Archived contacts." = "Ви можете надсилати повідомлення на %@ з архівних контактів."; +/* No comment provided by engineer. */ +"You can set connection name, to remember who the link was shared with." = "Ви можете задати ім'я з'єднання, щоб запам'ятати, з ким ви поділилися посиланням."; + /* No comment provided by engineer. */ "You can set lock screen notification preview via settings." = "Ви можете налаштувати попередній перегляд сповіщень на екрані блокування за допомогою налаштувань."; @@ -5045,9 +5504,15 @@ /* No comment provided by engineer. */ "Your chat database is not encrypted - set passphrase to encrypt it." = "Ваша база даних чату не зашифрована - встановіть ключову фразу, щоб зашифрувати її."; +/* alert title */ +"Your chat preferences" = "Ваші налаштування чату"; + /* No comment provided by engineer. */ "Your chat profiles" = "Ваші профілі чату"; +/* No comment provided by engineer. */ +"Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." = "Ваше з'єднання було переміщено на %@, але під час перенаправлення на профіль сталася несподівана помилка."; + /* No comment provided by engineer. */ "Your contact sent a file that is larger than currently supported maximum size (%@)." = "Ваш контакт надіслав файл, розмір якого перевищує підтримуваний на цей момент максимальний розмір (%@)."; @@ -5057,6 +5522,9 @@ /* No comment provided by engineer. */ "Your contacts will remain connected." = "Ваші контакти залишаться на зв'язку."; +/* No comment provided by engineer. */ +"Your credentials may be sent unencrypted." = "Ваші облікові дані можуть бути надіслані незашифрованими."; + /* No comment provided by engineer. */ "Your current chat database will be DELETED and REPLACED with the imported one." = "Ваша поточна база даних чату буде ВИДАЛЕНА і ЗАМІНЕНА імпортованою."; @@ -5081,6 +5549,9 @@ /* No comment provided by engineer. */ "Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Ваш профіль зберігається на вашому пристрої і доступний лише вашим контактам. Сервери SimpleX не бачать ваш профіль."; +/* alert message */ +"Your profile was changed. If you save it, the updated profile will be sent to all your contacts." = "Ваш профіль було змінено. Якщо ви збережете його, оновлений профіль буде надіслано всім вашим контактам."; + /* No comment provided by engineer. */ "Your profile, contacts and delivered messages are stored on your device." = "Ваш профіль, контакти та доставлені повідомлення зберігаються на вашому пристрої."; @@ -5090,6 +5561,9 @@ /* No comment provided by engineer. */ "Your server address" = "Адреса вашого сервера"; +/* No comment provided by engineer. */ +"Your servers" = "Ваші сервери"; + /* No comment provided by engineer. */ "Your settings" = "Ваші налаштування"; diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index 2f3f245f54..c8d995cfd9 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -28,7 +28,7 @@ سيتم تغيير عنوان الاستلام إلى خادم مختلف. سيتم إكمال تغيير العنوان بعد اتصال المرسل بالإنترنت. هذا الرابط ليس رابط اتصال صالح! يسمح - أضِف خوادم محدّدة مسبقًا + أضِف خوادم مُعدة مسبقًا أضِف إلى جهاز آخر سيتم حذف جميع الدردشات والرسائل - لا يمكن التراجع عن هذا! الوصول إلى الخوادم عبر وكيل SOCKS على المنفذ %d؟ يجب بدء تشغيل الوكيل قبل تمكين هذا الخيار. @@ -124,8 +124,7 @@ 30 ثانية إلغاء الرسالة المباشرة إلغاء - سيتم استخدام اتصال TCP منفصل (وبيانات اعتماد SOCKS) لكل جهة اتصال وعضو في المجموعة. -\n الرجاء ملاحظة: إذا كان لديك العديد من التوصيلات ، فقد يكون استهلاك البطارية وحركة المرور أعلى بكثير وقد تفشل بعض الاتصالات. + لكل جهة اتصال وعضو في المجموعة\n. الرجاء ملاحظة: إذا كان لديك العديد من الاتصالات، فقد يكون استهلاك البطارية وحركة المرور أعلى بكثير وقد تفشل بعض الاتصالات.]]> جارٍ الاتصال… مكالمة صوتية المكالمات على شاشة القفل: @@ -199,7 +198,7 @@ خطأ في إحباط تغيير العنوان تفعيل قفل SimpleX تأكد من بيانات الاعتماد الخاصة بك - إنشاء عنوان SimpleX + أنشئ عنوان SimpleX متابعة تحدث مع المطورين سياق الأيقونة @@ -477,7 +476,7 @@ كيفية الاستخدام كيف يعمل SimpleX التخفي عبر رابط عنوان جهة الاتصال - رمز الحماية غير صحيحة! + رمز الأمان غير صحيحة! الإشعارات الفورية مُعطَّلة إشعارات فورية! إخفاء جهة الاتصال والرسالة @@ -824,7 +823,7 @@ تعمية ثنائية الطبقات من بين الطريفين.]]> صفّر الألوان حفظ - عنوان الخادم المحدد مسبقًا + عنوان الخادم المُعد مسبقًا حفظ وإشعار أعضاء المجموعة دوري أعد تشغيل التطبيق لاستخدام قاعدة بيانات الدردشة المستوردة. @@ -836,7 +835,7 @@ يرجى تخزين عبارة المرور بشكل آمن، فلن تتمكن من الوصول إلى الدردشة إذا فقدتها. يُرجى تحديث التطبيق والتواصل مع المطورين. دليل المستخدم.]]> - افتح ملفات تعريف الدردشة + غيّر ملفات تعريف الدردشة اسحب الوصول كشف سيتم إيقاف استلام الملف. @@ -930,7 +929,7 @@ رمز QR صفّر المنفذ %d - خادم محدد مسبقًا + خادم مُعد مسبقًا يتم استخدام خادم الترحيل فقط إذا لزم الأمر. يمكن لطرف آخر مراقبة عنوان IP الخاص بك. حفظ وإشعار جهة الاتصال إعادة التشغيل @@ -1163,7 +1162,7 @@ أنت متصل بالفعل بـ%1$s. في انتظار الفيديو سيتم استلام الفيديو عند اكتمال تحميل جهة اتصالك. - تحقق من رمز الحماية + تحقق من رمز الأمان رسائل صوتية عندما يطلب الأشخاص الاتصال، يمكنك قبوله أو رفضه. سوف تكون متصلاً بالمجموعة عندما يكون جهاز مضيف المجموعة متصلاً بالإنترنت، يرجى الانتظار أو التحقق لاحقًا! @@ -1796,7 +1795,7 @@ أظهِر قائمة الدردشة في نافذة جديدة ألوان الدردشة سمة الدردشة - تلقى الرد + تلقيت رد أزِل الصورة تكرار صفّر اللون @@ -2116,4 +2115,97 @@ أمان أفضل ✅ بروتوكولات SimpleX تمت مراجعتها بواسطة Trail of Bits. تبديل ملف تعريف الدردشة لدعوات لمرة واحدة. + أخطاء في تضبيط الخوادم. + لملف تعريف الدردشة %s: + لا يوجد وسائط أو خوادم ملفات. + لا يوجد خوادم لإرسال الملفات. + لقد وصل الاتصال إلى الحد الأقصى من الرسائل غير المُسلمة، قد يكون جهة الاتصال الخاصة بك غير متصلة بالإنترنت. + الرسائل غير المُسلَّمة + شارك رابطًا لمرة واحدة مع صديق + أمان الاتصال + لحماية الرابط الخاص بك من الاستبدال، يمكنك مقارنة رموز أمان جهات الاتصال. + خادم جديد + لوسائل التواصل الاجتماعي + أو للمشاركة بشكل خاص + إعدادات العنوان + أنشئ رابط لمرة واحدة + عنوان SimpleX أو رابط لمرة واحدة؟ + مُشغلي الشبكة + يمكنك تضبيط الخوادم عبر الإعدادات. + حدد مشغلي الشبكة الذين تريد استخدامهم. + يمكنك تضبيط المُشغلين في إعدادات الشبكة والخوادم. + حدّث + تابع + قُبل الشروط + راجع الشروط + الخوادم المُعدة مسبقًا + سيتم قبول الشروط تلقائيًا للمُشغلين المفعّلين في: %s. + خوادمك + %s.]]> + %s.]]> + مُشغل الشبكة + المُشغل + %s خوادم + الموقع الإلكتروني + سيتم قبول الشروط في: %s. + قُبل الشروط في: %s. + استخدم %s + استخدم الخوادم + %s.]]> + شروط الاستخدام + للتوجيه الخاص + لتلقي + استخدم للملفات + اعرض الشروط + %s.]]> + %s، يجب قبول شروط الاستخدام.]]> + %s.]]> + أُضيفت خوادم الوسائط والملفات + الشروط المفتوحة + الخوادم الخاصة بالملفات الجديدة لملف الدردشة الحالي الخاص بك + لإرسال + خطأ في إضافة الخادم + خطأ في تحديث الخادم + التغييرات المفتوحة + خادم المُشغل + أُضيف الخادم إلى المُشغل %s. + تغيّر مُشغل الخادم. + أشرطة أدوات التطبيق + تمويه + الشفافية + فعّل flux + اللامركزية الشبكية + المُشغل المُعد مسبقًا الثاني في التطبيق! + لتحسين خصوصية البيانات الوصفية. + تحسين التنقل في الدردشة + اعرض الشروط المُحدثة + اقبل الشروط + أُضيفت خوادم الرسائل + عنوان أو رابط لمرة واحدة؟ + مع جهة اتصال واحدة فقط - المشاركة شخصيًا أو عبر أي مُراسل.]]> + سيتم قبول الشروط للمُشغلين المفعّلين بعد 30 يومًا. + اختر المُشغلين + لا يمكن تحميل نص الشروط الحالية، يمكنك مراجعة الشروط عبر هذا الرابط: + خطأ في قبول الشروط + خطأ في حفظ الخوادم + على سبيل المثال، إذا تلقيت رسائل عبر خادم SimpleX Chat، فسيستخدم التطبيق أحد خوادم Flux للتوجيه الخاص. + لا يوجد خوادم لتوجيه الرسائل الخاصة. + لا يوجد خوادم رسائل. + لا يوجد خوادم لاستقبال الملفات. + لا توجد رسالة + لا يوجد خوادم لاستقبال الرسائل. + - فتح الدردشة عند أول رسالة غير مقروءة.\n- الانتقال إلى الرسائل المقتبسة. + يمكنك تعيين اسم الاتصال، لتذكر الأشخاص الذين تمت مشاركة الرابط معهم. + راجع لاحقًا + تغيّر بروتوكول الخادم. + شارك العنوان علناً + شارك عنوان SimpleX على وسائل التواصل الاجتماعي. + عنوان SimpleX والروابط لمرة واحدة آمنة للمشاركة عبر أي برنامج مُراسلة. + انقر فوق أنشئ عنوان SimpleX في القائمة لإنشائه لاحقًا. + حُذفت هذه الرسالة أو لم يتم استلامها بعد. + استخدم للرسائل + عندما تفعّل أكثر من مُشغل شبكة واحد، سيستخدم التطبيق خوادم مُشغلين مختلفين لكل مُحادثة. + %s.]]> + %s.]]> + %s.]]> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 55b7e2b0e7..53df6d4818 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1733,7 +1733,6 @@ %s.]]> %s.]]> %s.]]> - %s.]]> %s.]]> %s.]]> %s.]]> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml index 748c264918..d59867574d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -89,8 +89,7 @@ за всеки чат профил, който имате в приложението.]]> аудио разговор Най-добро за батерията. Ще получавате известия само когато приложението работи (БЕЗ фонова услуга).]]> - Ще се използва отделна TCP връзка (и идентификационни данни за SOCKS) за всеки контакт и член на група. -\nМоля, обърнете внимание: ако имате много връзки, консумацията на батерията и трафика може да бъде значително по-висока и някои връзки може да се провалят. + за всеки контакт и член на група. \nМоля, обърнете внимание: ако имате много връзки, консумацията на батерията и трафика може да бъде значително по-висока и някои връзки може да се провалят.]]> Помолен да получи изображението Аудио и видео разговори аудио разговор (не е e2e криптиран) diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml index 548de53a21..b107ea1df7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml @@ -631,8 +631,7 @@ Onion hostitelé nebudou použiti. Izolace přenosu for each chat profile you have in the app.]]> - Oddělit TCP připojení (a SOCKS pověření) bude použito pro všechny kontakty a členy skupin. -\nUpozornění: Pokud máte mnoho připojení, může být spotřeba baterie a provoz podstatně vyšší a některá připojení mohou selhat. + pro všechny kontakty a členy skupin. \nUpozornění: Pokud máte mnoho připojení, může být spotřeba baterie a provoz podstatně vyšší a některá připojení mohou selhat.]]> Vzhled Verze aplikace Verze aplikace: v%s @@ -2041,4 +2040,6 @@ Jiné FXTP servery Pozvat Pošlete zprávu pro povolení volání. + Přijmout podmínky + Přijaté podmínky \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index 05ed6366a1..29812d0a3e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -264,7 +264,7 @@ Danke, dass Sie SimpleX Chat installiert haben! mit den SimpleX-Chat-Entwicklern verbinden, um Fragen zu stellen und aktuelle Informationen zu erhalten.]]> Um einen neuen Chat zu starten - Schaltfläche antippen + Schaltfläche tippen Danach die gewünschte Aktion auswählen: Über Link verbinden Wenn Sie einen SimpleX-Chat-Einladungslink erhalten haben, können Sie ihn in Ihrem Browser öffnen: @@ -989,9 +989,7 @@ Verbindung Chat-Profil Dateien für alle Chat-Profile löschen - Für jeden Kontakt und jedes Gruppenmitglied wird eine separate TCP-Verbindung (und SOCKS-Berechtigung) genutzt. -\n -\nBitte beachten Sie: Wenn Sie viele Verbindungen haben, können Akkuverbrauch und Datennutzung wesentlich höher ausfallen und einige Verbindungen scheitern. + Für jeden Kontakt und jedes Gruppenmitglied wird eine separate TCP-Verbindung (und SOCKS-Berechtigung) genutzt.\nBitte beachten Sie: Wenn Sie viele Verbindungen haben, können Akkuverbrauch und Datennutzung wesentlich höher ausfallen und einige Verbindungen scheitern.]]> Für jedes von Ihnen in der App genutzte Chat-Profil wird eine separate TCP-Verbindung (und SOCKS-Berechtigung) genutzt.]]> Nur lokale Profildaten Profil und Serververbindungen @@ -1235,7 +1233,7 @@ Falls Sie sich nicht persönlich treffen können, zeigen Sie den QR-Code in einem Videoanruf oder teilen Sie den Link. Benutzeranleitung.]]> Stellen Sie sicher, dass die Datei die korrekte YAML-Syntax hat. Exportieren Sie das Design, um ein Beispiel für die Dateistruktur des Designs zu erhalten. - Offene Chat-Profile + Chat-Profile wechseln Sie können Ihre Adresse als Link oder QR-Code teilen – jede Person kann sich mit Ihnen verbinden. Werden die App-Daten komplett gelöscht. Es wurde ein leeres Chat-Profil mit dem eingegebenen Namen erstellt und die App öffnet wie gewohnt. @@ -2200,4 +2198,99 @@ Verbesserte Sicherheit ✅ Verbesserte Nachrichten-Datumsinformation Verbesserte Nutzer-Erfahrung + Fehler beim Speichern der Server + Keine Nachrichten-Server. + Keine Server für den Empfang von Nachrichten. + Fehler in der Server-Konfiguration. + Für das Chat-Profil %s: + Keine Medien- und Dateiserver. + Keine Server für den Empfang von Dateien. + Keine Server für das Versenden von Dateien. + Nicht ausgelieferte Nachrichten + Die SimpleX-Adresse auf sozialen Medien teilen. + Verbindungs-Sicherheit + Den Einmal-Einladungslink mit einem Freund teilen + Die SimpleX-Adresse und Einmal-Links können sicher über beliebige Messenger geteilt werden. + Sie können einen Verbindungsnamen festlegen, um sich zu merken, mit wem der Link geteilt wurde. + Adress-Einstellungen + Einmal-Link erstellen + Für soziale Medien + Oder zum privaten Teilen + SimpleX-Adresse oder Einmal-Link? + Betreiber auswählen + Netzwerk-Betreiber + Wenn mehr als ein Netzwerk-Betreiber aktiviert ist, verwendet die App für jede Unterhaltung Server der verschiedenen Betreiber. + Die Nutzungsbedingungen der aktivierten Betreiber werden nach 30 Tagen akzeptiert. + Wenn Sie beispielsweise Nachrichten über einen SimpleX-Chatserver empfangen, verwendet die App einen der Server von Flux für die private Weiterleitung. + Später einsehen + Wählen sie die zu nutzenden Netzwerk-Betreiber aus. + Sie können die Betreiber in den Netzwerk- und Servereinstellungen konfigurieren. + Sie können die Server über die Einstellungen konfigurieren. + Weiter + Aktualisieren + Voreingestellte Server + Nutzungsbedingungen einsehen + Die Nutzungsbedingungen der aktivierten Betreiber werden automatisch akzeptiert am: %s. + Ihre Server + Betreiber + %s Server + Netzwerk-Betreiber + Verwende Server + Webseite + Verwende %s + %s.]]> + %s.]]> + Nutzungsbedingungen + Nutzungsbedingungen anschauen + Nutzungsbedingungen akzeptieren + %s.]]> + Für den Empfang + Für Nachrichten verwenden + Nachrichtenserver hinzugefügt + Für privates Routing + Die Server Deines aktuellen Chat-Profils für neue Dateien + Für das Senden + Für Dateien verwenden + Fehler beim Hinzufügen des Servers + Änderungen öffnen + Nutzungsbedingungen öffnen + Betreiber-Server + Der Server wurde dem Betreiber %s hinzugefügt. + Der Server-Betreiber wurde geändert. + Das Server-Protokoll wurde geändert. + Transparenz + Flux aktivieren + Dezentralisiertes Netzwerk + Der zweite voreingestellte Netzwerk-Betreiber in der App! + Verbesserte Chat-Navigation + - Den Chat bei der ersten ungelesenen Nachricht öffnen.\n- Zu zitierten Nachrichten springen. + Aktualisierte Nutzungsbedingungen anschauen + Akzeptierte Nutzungsbedingungen + Medien- und Dateiserver hinzugefügt + Adress- oder Einmal-Link? + App-Symbolleiste + Verpixeln + nur mit einem Kontakt genutzt werden - teilen Sie in nur persönlich oder über einen beliebigen Messenger.]]> + %s.]]> + %s.]]> + Die Nutzungsbedingungen werden akzeptiert am: %s. + %s.]]> + %s zu nutzen, müssen Sie dessen Nutzungsbedingungen akzeptieren.]]> + Fehler beim Akzeptieren der Nutzungsbedingungen + Fehler beim Aktualisieren des Servers + für einen besseren Metadatenschutz. + Neuer Server + Keine Nachricht + Keine Server für privates Nachrichten-Routing. + Die Adresse öffentlich teilen + Tippen Sie im Menü auf SimpleX-Adresse erstellen, um sie später zu erstellen. + Diese Verbindung hat das Limit der nicht ausgelieferten Nachrichten erreicht. Ihr Kontakt ist möglicherweise offline. + Diese Nachricht wurde gelöscht oder bisher noch nicht empfangen. + Zum Schutz vor dem Austausch Ihres Links können Sie die Sicherheitscodes Ihrer Kontakte vergleichen. + %s.]]> + %s.]]> + Die Nutzungsbedingungen wurden akzeptiert am: %s. + Der Text der aktuellen Nutzungsbedingungen konnte nicht geladen werden. Sie können die Nutzungsbedingungen unter diesem Link einsehen: + Ferngesteuerte Mobiltelefone + Oder importieren Sie eine Archiv-Datei \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index 0f31210a9a..3d22d1fcc5 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -1101,7 +1101,7 @@ ¡Nuestro agradecimiento a todos los colaboradores! Puedes contribuir a través de Weblate. Vídeos y archivos de hasta 1Gb ¡Rápido y sin necesidad de esperar a que el remitente esté en línea! - Abrir perfiles + Cambiar perfil Más información Si no puedes reunirte en persona, muestra el código QR por videollamada o comparte el enlace. Para conectarse, tu contacto puede escanear el código QR o usar el enlace en la aplicación. @@ -1111,7 +1111,7 @@ Abriendo base de datos… Error al introducir dirección Guía de Usuario.]]> - Enlace un uso + Enlace de un uso Dirección SimpleX Cuando alguien solicite conectarse podrás aceptar o rechazar su solicitud. Compartir dirección @@ -1927,7 +1927,7 @@ Abrir ubicación del archivo Por favor, reinicia la aplicación. Recordar más tarde - Saltar esta versión + Omitir esta versión Estable inactivo Error @@ -2058,7 +2058,7 @@ Nuevas opciones multimedia Puedes cambiar la posición de la barra desde el menú Apariencia. Descarga nuevas versiones desde GitHub. - Nuevo mensaje + Mensaje nuevo Enlace no válido Por favor, comprueba que el enlace SimpleX es correcto. %1$d archivo(s) se está(n) descargando todavía. @@ -2119,4 +2119,99 @@ Seguridad mejorada ✅ Borra o modera hasta 200 mensajes a la vez. Cambia el perfil de chat para invitaciones de un solo uso. + Error al guardar servidores + Error en la configuración del servidor. + Para el perfil de chat %s: + Ningún servidor de mensajes. + Ningún servidor para recibir archivos. + Ningún servidor para enviar archivos. + Seguridad de conexión + Compartir enlace de un uso con un amigo + Compartir dirección SimpleX en redes sociales. + Configuración de dirección + Crear enlace de un uso + Para redes sociales + Dirección SimpleX o enlace de un uso? + Selecciona operadores + Operadores de red + Las condiciones de los operadores habilitados serán aceptadas después de 30 días. + Revisar más tarde + Condiciones aceptadas el: %s. + Operador de red + Operador + Servidores predefinidos + Revisar condiciones + %s servidores + Las condiciones serán aceptadas el: %s. + Condiciones de uso + Para el enrutamiento privado + Error al añadir servidor + Abrir cambios + Abrir condiciones + Servidor añadido al operador %s. + El operador del servidor ha cambiado. + El protocolo del servidor ha cambiado. + Barras de herramientas + Difuminar + Navegación en el chat mejorada + Descentralización de la red + - El chat abre en el primer mensaje no leído.\n- Desplazamiento hasta los mensajes citados. + Aceptar condiciones + Condiciones aceptadas + Servidores de archivos y multimedia añadidos + Servidores de mensajes añadidos + ¿Dirección o enlace de un uso? + Las condiciones serán aceptadas automáticamente para los operadores habilitados el: %s. + Continuar + El texto con las condiciones actuales no se ha podido cargar, puedes revisar las condiciones en el siguiente enlace: + Habilitar Flux + Error al aceptar las condiciones + Error al actualizar el servidor + para mayor privacidad de los metadatos. + Ningún mensaje + Servidor nuevo + Ningún servidor de archivos y multimedia. + Ningún servidor para enrutamiento privado. + Ningún servidor para recibir mensajes. + Servidor del operador + O para compartir en privado + Selecciona los operadores de red a utilizar + Campartir dirección públicamente + Compartir enlaces de un uso y direcciones SimpleX es seguro a través de cualquier medio. + Actualizar + Sitio web + Tus servidores + Usar %s + Usar servidores + Usar para mensajes + Ver condiciones + Para recibir + Para enviar + Usar para archivos + Transparencia + Ver condiciones actualizadas + Mensajes no entregados + solamente con un contacto - comparte en persona o mediante cualquier aplicación de mensajería.]]> + Puedes añadir un nombre a la conexión para recordar a quién corresponde. + Cuando está habilitado más de un operador de red, la aplicación usa servidores de diferentes operadores para cada conversación. + Puedes configurar los operadores desde Servidores y Redes. + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s, acepta las condiciones de uso.]]> + Los servidores para archivos nuevos en tu perfil actual + El segundo operador predefinido! + Puedes configurar los servidores a través de su configuración. + Para protegerte contra una sustitución del enlace, puedes comparar los códigos de seguridad con tu contacto. + %s.]]> + %s.]]> + Si por ejemplo recibes los mensajes a través de un servidor de SimpleX Chat, la aplicación usará uno de Flux para el enrutamiento privado. + Pulsa Crear dirección SimpleX en el menú para crearla más tarde. + La conexión ha alcanzado el límite de mensajes no entregados. es posible que tu contacto esté desconectado. + El mensaje ha sido borrado o aún no se ha recibido. + Móvil remoto + O importa desde un archivo \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml index 23e2392fdc..8850e33a3e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml @@ -636,8 +636,7 @@ تمام مخاطبانتان متصل باقی خواهند ماند. به‌روزرسانی نمایه به مخاطبانتان ارسال خواهد شد. اگر تایید کنید، سرورهای پیام‌رسانی خواهند توانست نشانی‌ IP، و فراهم‌کننده شما را ببینند - و این که به چه سرورهایی متصل می‌شوید. مطمئن شوید قالب نشانی‌های سرور WebRTC ICE صحیح است، در خط‌های جدا نوشته شده و تکرار نشده‌اند. - یک اتصال جدای TCP (و اطلاعات ورود SOCKS) برای هر مخاطب و عضو گروه استفاده خواهد شد. -\nلطفا توجه داشته باشید: اگر اتصال‌های زیادی داشته باشید، مصرف باتری و ترافیک شما می‌تواند به شکل قابل توجه بالاتر باشد و بعضی اتصال‌ها ممکن است با موفقیت انجام نشوند. + برای هر مخاطب و عضو گروه استفاده خواهد شد. \nلطفا توجه داشته باشید: اگر اتصال‌های زیادی داشته باشید، مصرف باتری و ترافیک شما می‌تواند به شکل قابل توجه بالاتر باشد و بعضی اتصال‌ها ممکن است با موفقیت انجام نشوند.]]> حالت انزوای ترابری به روز شود؟ ویرایش تصویر ایجاد نشانی‌ SimpleX diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml index 28b29c59af..f933b2d6cc 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml @@ -251,8 +251,7 @@ Poista kontakti Yllä, sitten: Keskustelujen profiili - Jokaiselle kontaktille ja ryhmän jäsenelle käytetään erillistä TCP-yhteyttä (ja SOCKS-tunnistetietoja). -\nHuomaa: jos sinulla on useita yhteyksiä, akun ja data-liikenteen määrä voi olla huomattavasti korkeampi ja jotkin yhteydet voivat epäonnistua. + Jokaiselle kontaktille ja ryhmän jäsenelle käytetään erillistä TCP-yhteyttä (ja SOCKS-tunnistetietoja). \nHuomaa: jos sinulla on useita yhteyksiä, akun ja data-liikenteen määrä voi olla huomattavasti korkeampi ja jotkin yhteydet voivat epäonnistua.]]> Äänipuhelu Paras akulle. Saat ilmoituksia vain, kun sovellus on käynnissä (EI taustapalvelua).]]> %d tuntia diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index 07b99ebe1d..6caf5b61ef 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -907,8 +907,7 @@ Profil et connexions au serveur Transport isolé Mettre à jour le mode d\'isolement du transport \? - Une connexion TCP distincte (et identifiant SOCKS) sera utilisée pour chaque contact et membre de groupe. -\nVeuillez noter : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer. + pour chaque contact et membre de groupe. \nVeuillez noter : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer.]]> Profil de chat Ajouter un profil Données de profil local uniquement diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index 216b666100..d8ce80884e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -13,7 +13,7 @@ Címváltoztatás megszakítása? Megszakítás 30 másodperc - Egyszer használható hivatkozás + Egyszer használható meghívó-hivatkozás %1$s szeretne kapcsolatba lépni Önnel ezen keresztül: A SimpleX Chatről 1 nap @@ -102,7 +102,7 @@ Több akkumulátort használ! Az alkalmazás mindig fut a háttérben - az értesítések azonnal megjelennek.]]> Letiltás adminisztrátor - Fénykép előnézet visszavonása + Képelőnézet visszavonása A jelkód megadása után az összes adat törlésre kerül. Felkérték a videó fogadására Letiltás @@ -200,7 +200,7 @@ Csoport létrehozása véletlenszerű profillal. Az ismerős és az összes üzenet törlésre kerül - ez a művelet nem vonható vissza! Az ismerősei törlésre jelölhetnek üzeneteket; Ön majd meg tudja nézni azokat. - Kapcsolódás egyszer használható hivatkozással? + Kapcsolódás egyszer használható meghívó-hivatkozással? Kapcsolódás egy hivatkozáson vagy QR-kódon keresztül Kapcsolódási hiba (AUTH) Csak név @@ -234,9 +234,7 @@ Ismerősök Kapcsolódási hiba Az ismerős még nem kapcsolódott! - - kapcsolódás könyvtár szolgáltatáshoz (BÉTA)! -\n- kézbesítési jelentések (20 tagig). -\n- gyorsabb és stabilabb. + - kapcsolódás könyvtár szolgáltatáshoz (BÉTA)!\n- kézbesítési jelentések (20 tagig).\n- gyorsabb és stabilabb. Hozzájárulás kapcsolódás (bemutatkozó meghívó) SimpleX-cím létrehozása @@ -477,8 +475,7 @@ Hiba a hálózat konfigurációjának frissítésekor TCP életben tartása Kamera váltás - Üdvözlöm! -\nCsatlakozzon hozzám a SimpleX Chaten keresztül: %s + Üdvözlöm!\nCsatlakozzon hozzám a SimpleX Chaten keresztül: %s A megjelenített név nem tartalmazhat szóközöket. Csoport Üdvözlőüzenet megadása… (nem kötelező) @@ -692,7 +689,7 @@ Világos Az üzenet törlésre kerül - ez a művelet nem vonható vissza! Markdown súgó - Rejtett üzenet + új üzenet Régi adatbázis-archívum Speciális beállítások Nincs kézbesítési információ @@ -771,7 +768,7 @@ Nincsenek háttérhívások Üzenetek Társított hordozható eszköz - Lehetővé teszi, hogy egyetlen csevegőprofilon belül több anonim kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük. + Lehetővé teszi, hogy egyetlen csevegőprofilon belül több névtelen kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük. Az üzenet törlésre lesz jelölve. A címzett(ek) képes(ek) lesz(nek) felfedni ezt az üzenetet. Elhagyás Rendben @@ -885,7 +882,7 @@ Bárki üzemeltethet kiszolgálókat. Megnyitás Protokoll időtúllépése - titkos + titok Értesítés előnézete várakozás a visszaigazolásra… Fájl megállítása @@ -910,7 +907,7 @@ Csak Ön tud hívásokat indítani. Biztonságos sorbaállítás Értékelje az alkalmazást - Egyszer használható hivatkozás megosztása + Egyszer használható meghívó-hivatkozás megosztása Hiba az adatbázis visszaállításakor %s és %s Ön engedélyezi @@ -931,7 +928,7 @@ (beolvasás, vagy beillesztés a vágólapról) Várakozás a videóra Válasz - Ez az Ön egyszer használható hivatkozása! + Ez az Ön egyszer használható meghívó-hivatkozása! SimpleX Chat hívások Új inkognitóprofil használata Frissítse az alkalmazást, és lépjen kapcsolatba a fejlesztőkkel. @@ -963,7 +960,7 @@ Adatbázismentés visszaállítása Visszavonás Kérje meg az ismerősét, hogy engedélyezze a hangüzenetek küldését. - egyszer használható hivatkozást osztott meg + Ön egy egyszer használható meghívó-hivatkozást osztott meg A hivatkozás megnyitása a böngészőben gyengítheti az adatvédelmet és a biztonságot. A megbízhatatlan SimpleX-hivatkozások pirossal vannak kiemelve. Saját ICE-kiszolgálók Kapcsolat létrehozása @@ -1075,7 +1072,7 @@ tulajdonos Bekapcsolás %s, %s és %s kapcsolódott - Egyszer használható SimpleX-meghívó + Egyszer használható SimpleX-meghívó-hivatkozás Hívások nem sikerült elküldeni KEZELŐFELÜLET SZÍNEI @@ -1106,7 +1103,7 @@ Saját SMP-kiszolgálók A kézbesítési jelentések le vannak tiltva Adatbázismappa megnyitása - egyszer használható hivatkozáson keresztül + egyszer használható meghívó-hivatkozáson keresztül Csoportbeállítások megadása ezen keresztül: %1$s igen @@ -1119,7 +1116,7 @@ A kiszolgáló QR-kódjának beolvasása Megállítás Címmegosztás megállítása? - Csevegés profilok megnyitása + Csevegési profilok megváltoztatása Csatlakozáskérés megismétlése? Várakozás a képre Hangüzenetek @@ -1230,9 +1227,7 @@ Némítás megszüntetése SimpleX Chat megnyitása a hívás fogadásához Fájlfogadás megállítása? - - értesíti az ismerősöket a törlésről (nem kötelező) -\n- profil nevek szóközökkel -\n- és még sok más! + - értesíti az ismerősöket a törlésről (nem kötelező)\n- profil nevek szóközökkel\n- és még sok más! Lengyel kezelőfelület Kiszolgáló használata Fogadva ekkor: %s @@ -1272,14 +1267,12 @@ TCP kapcsolat időtúllépése A(z) %1$s nevű profiljának SimpleX-címe megosztásra fog kerülni. Ön már kapcsolódott a következőhöz: %1$s. - Jelenlegi csevegési adatbázis TÖRLÉSRE és FELCSERÉLÉSRE kerül az importált által! -\nEz a művelet nem vonható vissza - profiljai, ismerősei, csevegési üzenetei és fájljai véglegesen törölve lesznek. + Jelenlegi csevegési adatbázis TÖRLÉSRE és FELCSERÉLÉSRE kerül az importált által!\nEz a művelet nem vonható vissza - profiljai, ismerősei, csevegési üzenetei és fájljai véglegesen törölve lesznek. Ötletek és javaslatok Figyelmeztetés: néhány adat elveszhet! Koppintson ide az új csevegés indításához Várakozás a számítógépre… - A privát üzenetküldés -\nkövetkező generációja + A privát üzenetküldés\nkövetkező generációja Hálózati beállítások megváltoztatása? Várakozás a hordozható eszköz társítására: Biztonságos kapcsolat hitelesítése @@ -1288,16 +1281,14 @@ fájlok fogadása egyelőre még nem támogatott Csoportprofil mentése Visszaállítás alapértelmezettre - Hacsak az ismerőse nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt egyszer, lehet hogy ez egy hiba – jelentse a problémát. -\nA kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapcsolattartási hivatkozást, és ellenőrizze, hogy a hálózati kapcsolat stabil-e. + Hacsak az ismerőse nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt egyszer, lehet hogy ez egy hiba – jelentse a problémát.\nA kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapcsolattartási hivatkozást, és ellenőrizze, hogy a hálózati kapcsolat stabil-e. videóhívás (nem e2e titkosított) Alkalmazás új kapcsolatokhoz Az új üzenetek rendszeresen letöltésre kerülnek az alkalmazás által – naponta néhány százalékot használ az akkumulátorból. Az alkalmazás nem használ push-értesítéseket – az eszközről származó adatok nem kerülnek elküldésre a kiszolgálóknak. Számítógép címének beillesztése kapcsolattartási cím-hivatkozáson keresztül SimpleX-háttérszolgáltatást használja - az akkumulátornak csak néhány százalékát használja naponta.]]> - Az ismerősének online kell lennie ahhoz, hogy a kapcsolat létrejöjjön. -\nVisszavonhatja ezt az ismerőskérelmet és eltávolíthatja az ismerőst (ezt később ismét megpróbálhatja egy új hivatkozással). + Az ismerősének online kell lennie ahhoz, hogy a kapcsolat létrejöjjön.\nVisszavonhatja ezt az ismerőskérelmet és eltávolíthatja az ismerőst (ezt később ismét megpróbálhatja egy új hivatkozással). A jelszó nem található a Keystore-ban, ezért kézzel szükséges megadni. Ez akkor történhetett meg, ha visszaállította az alkalmazás adatait egy biztonságimentési eszközzel. Ha nem így történt, akkor lépjen kapcsolatba a fejlesztőkkel. Az ismerősei továbbra is kapcsolódva maradnak. A kiszolgálónak engedélyre van szüksége a várólisták létrehozásához, ellenőrizze jelszavát @@ -1319,8 +1310,7 @@ A kiszolgálónak engedélyre van szüksége a sorbaállítás létrehozásához, ellenőrizze jelszavát Kapcsolódni fog a csoport összes tagjához. Lehetséges, hogy a kiszolgáló címében szereplő tanúsítvány-ujjlenyomat helytelen - A biztonsága érdekében kapcsolja be a SimpleX-zár funkciót. -\nA funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beállítására az eszközén. + A biztonsága érdekében kapcsolja be a SimpleX-zár funkciót.\nA funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beállítására az eszközén. A videó akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később! Ellenőrizze a hálózati kapcsolatát a következővel: %1$s, és próbálja újra. A SimpleX-zár az „Adatvédelem és biztonság” menüben kapcsolható be. @@ -1333,7 +1323,7 @@ A fájl fogadása le fog állni. Ne felejtse el, vagy tárolja biztonságosan – az elveszett jelszót nem lehet visszaállítani! A videó akkor érkezik meg, amikor a küldője befejezte annak feltöltését. - egyszer használható hivatkozást osztott meg inkognitóban + Ön egy egyszer használható meghívó-hivatkozást osztott meg inkognitóban Ön már kapcsolódott ahhoz a kiszolgálóhoz, amely az adott ismerősétől érkező üzenetek fogadására szolgál. Később engedélyezheti a „Beállításokban” Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később! @@ -1352,8 +1342,7 @@ Az ismerősei és az üzenetek (kézbesítés után) nem kerülnek tárolásra a SimpleX-kiszolgálókon. Üzenetek formázása a szövegbe szúrt speciális karakterekkel: Megnyitás az alkalmazásban gombra.]]> - A csevegési profilja elküldésre kerül -\naz ismerőse számára + A csevegési profilja elküldésre kerül\naz ismerőse számára Egy olyan ismerősét próbálja meghívni, akivel inkognitó-profilt osztott meg abban a csoportban, amelyben a saját fő profilja van használatban %1$s nevű csoporthoz.]]> Amikor az alkalmazás fut @@ -1363,9 +1352,7 @@ A hangüzenetek küldése le van tiltva ebben a csoportban. Alkalmazás akkumulátor-használata / Korlátlan módot az alkalmazás beállításaiban.]]> Biztonságos kvantumrezisztens-protokollon keresztül. - - 5 perc hosszúságú hangüzenetek. -\n- egyéni üzenet-eltűnési időkorlát. -\n- előzmények szerkesztése. + - 5 perc hosszúságú hangüzenetek.\n- egyéni üzenet-eltűnési időkorlát.\n- előzmények szerkesztése. Társítás számítógéppel menüt a hordozható eszköz alkalmazásban és olvassa be a QR-kódot.]]> %s ekkor: %s Akkor lesz kapcsolódva, amikor az ismerősének eszköze online lesz, várjon, vagy ellenőrizze később! @@ -1399,7 +1386,7 @@ Alkalmazás akkumulátor-használata / Korlátlan módot az alkalmazás beállításaiban.]]> Ez a karakterlánc nem egy meghívó-hivatkozás! Új csevegés kezdése - A kapcsolódás már folyamatban van ezen az egyszer használható hivatkozáson keresztül! + A kapcsolódás már folyamatban van ezen az egyszer használható meghívó-hivatkozáson keresztül! Nem veszíti el az ismerőseit, ha később törli a címét. A beállítások frissítése a kiszolgálókhoz való újra kapcsolódással jár. kapcsolatba akar lépni Önnel! @@ -1444,8 +1431,7 @@ Tagok meghívásának kihagyása Ezek felülbírálhatók az ismerős- és csoportbeállításokban. Az ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni! - A véletlenszerű jelmondat egyszerű szövegként van tárolva a beállításokban. -\nEz később megváltoztatható. + A véletlenszerű jelmondat egyszerű szövegként van tárolva a beállításokban.\nEz később megváltoztatható. Koppintson ide az inkognitóban való kapcsolódáshoz Jelmondat beállítása az exportáláshoz A kézbesítési jelentések le vannak tiltva %d csoportban @@ -1475,8 +1461,7 @@ Az Ön által elfogadott kérelem vissza lesz vonva! Élő üzenet küldése - a címzett(ek) számára frissül, ahogy beírja A KÉZBESÍTÉSI JELENTÉSEKET A KÖVETKEZŐ CÍMRE KELL KÜLDENI - A következő üzenet azonosítója hibás (kisebb vagy egyenlő az előzővel). -\nEz valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. + A következő üzenet azonosítója hibás (kisebb vagy egyenlő az előzővel).\nEz valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. Az eszköz neve megosztásra kerül a társított hordozható eszközön használt alkalmazással. A címzettek a beírás közben látják a szövegváltozásokat. Tárolja el biztonságosan jelmondatát, mert ha elveszíti azt, NEM tudja megváltoztatni. @@ -1520,7 +1505,7 @@ Vagy mutassa meg ezt a kódot Kamera hozzáférés engedélyezése Fel nem használt meghívó megtartása? - Egyszer használható meghívó-hivatkozás megosztása + Ennek az egyszer használható meghívó-hivatkozásnak a megosztása Új csevegés Csevegések betöltése… Hivatkozás létrehozása… @@ -1541,10 +1526,7 @@ A kapcsolat megszakadt A kapcsolat megszakadt Számítógép kapcsolata rossz állapotban van - Jelentse a fejlesztőknek: -\n%s -\n -\nAz alkalmazás újraindítása javasolt. + Jelentse a fejlesztőknek:\n%s\n\nAz alkalmazás újraindítása javasolt. Jelentse a fejlesztőknek: \n%s %s hordozható eszköz által használt alkalmazás verziója nem támogatott. Győződjön meg arról, hogy mindkét eszközön ugyanazt a verziót használja]]> @@ -1587,7 +1569,7 @@ A keresősáv elfogadja a meghívó-hivatkozásokat. Titkosított fájlokkal és médiatartalmakkal. Csökkentett akkumulátor-használattal. - Magyar és török felhasználói felület + Magyar és török kezelőfelület A közelmúlt eseményei és továbbfejlesztett könyvtárbot. feloldotta %s letiltását Ön feloldotta %s letiltását @@ -1604,8 +1586,7 @@ Hiba a tag az összes csoporttag számára való letiltásakor Az üzenet túl nagy Az üdvözlőüzenet túl hosszú - Az adatbázis átköltöztetése folyamatban van. -\nEz eltarthat néhány percig. + Az adatbázis átköltöztetése folyamatban van.\nEz eltarthat néhány percig. Hanghívás A hívás befejeződött Videóhívás @@ -1742,13 +1723,11 @@ Profilkép alakzat Négyzet, kör vagy bármi a kettő között. Célkiszolgáló-hiba: %1$s - Továbbító kiszolgáló: %1$s -\nHiba: %2$s + Továbbító kiszolgáló: %1$s\nHiba: %2$s Hálózati problémák - az üzenet többszöri elküldési kísérlet után lejárt. A kiszolgáló verziója nem kompatibilis a hálózati beállításokkal. Hibás kulcs vagy ismeretlen kapcsolat - valószínűleg ez a kapcsolat törlődött. - Továbbító-kiszolgáló: %1$s -\nCélkiszolgáló hiba: %2$s + Továbbító-kiszolgáló: %1$s\nCélkiszolgáló hiba: %2$s Hiba: %1$s Kapacitás túllépés - a címzett nem kapta meg a korábban elküldött üzeneteket. Üzenetkézbesítési figyelmeztetés @@ -1779,8 +1758,7 @@ IP-cím védelem Az alkalmazás kérni fogja az ismeretlen fájlkiszolgálókról történő letöltések megerősítését (kivéve, ha az .onion vagy a SOCKS proxy engedélyezve van). Ismeretlen kiszolgálók! - Tor vagy VPN nélkül az IP-címe látható lesz az XFTP-közvetítő-kiszolgálók számára: -\n%1$s. + Tor vagy VPN nélkül az IP-címe látható lesz az XFTP-közvetítő-kiszolgálók számára:\n%1$s. Összes színmód Fekete Színmód @@ -1812,8 +1790,7 @@ További kiemelés 2 Alkalmazás téma Perzsa kezelőfelület - Védje IP-címét az ismerősei által kiválasztott üzenet-közvetítő-kiszolgálókkal szemben. -\nEngedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. + Védje IP-címét az ismerősei által kiválasztott üzenet-közvetítő-kiszolgálókkal szemben.\nEngedélyezze a „Beállítások / Hálózat és kiszolgálók” menüben. Ismeretlen kiszolgálókról származó fájlok megerősítése. Javított üzenetkézbesítés Alkalmazás témájának visszaállítása @@ -1822,14 +1799,12 @@ Privát üzenet-útválasztás 🚀 Fájlok biztonságos fogadása Csökkentett akkumulátor-használattal. - Hiba a WebView előkészítésekor. Frissítse rendszerét az új verzióra. Lépjen kapcsolatba a fejlesztőkkel. -\nHiba: %s + Hiba a WebView előkészítésekor. Frissítse rendszerét az új verzióra. Lépjen kapcsolatba a fejlesztőkkel.\nHiba: %s Felhasználó által létrehozott téma visszaállítása Üzenet-sorbaállítási információ nincs Kézbesítési hibák felderítése - a kiszolgáló sorbaállítási információi: %1$s -\nutoljára kézbesített üzenet: %2$s + a kiszolgáló sorbaállítási információi: %1$s\n\nutoljára kézbesített üzenet: %2$s Hibás kulcs vagy ismeretlen fájltöredék cím - valószínűleg a fájl törlődött. Ideiglenesfájl-hiba Üzenetállapot @@ -1841,8 +1816,7 @@ Fájlállapot: %s Másolási hiba Ezt a hivatkozást egy másik hordozható eszközön már használták, hozzon létre egy új hivatkozást a számítógépén. - Ellenőrizze, hogy a hordozható eszköz és a számítógép ugyanahhoz a helyi hálózathoz csatlakozik-e, valamint a számítógép tűzfalában engedélyezve van-e a kapcsolat. -\nMinden további problémát osszon meg a fejlesztőkkel. + Ellenőrizze, hogy a hordozható eszköz és a számítógép ugyanahhoz a helyi hálózathoz csatlakozik-e, valamint a számítógép tűzfalában engedélyezve van-e a kapcsolat.\nMinden további problémát osszon meg a fejlesztőkkel. Nem lehet üzenetet küldeni A kiválasztott csevegési beállítások tiltják ezt az üzenetet. Próbálja meg később. @@ -2072,8 +2046,7 @@ %1$d fájl törölve lett. %1$s üzenet továbbítása Üzenetek továbbítása… - %1$d fájlhiba: -\n%2$s + %1$d fájlhiba:\n%2$s %1$s üzenet nem lett továbbítva %1$s üzenet továbbítása? Üzenetek továbbítása fájlok nélkül? @@ -2081,8 +2054,7 @@ %1$s üzenet mentése Hiba az üzenetek továbbításakor Hang elnémítva - Hiba a WebView előkészítésekor. Győződjön meg arról, hogy a WebView telepítve van-e, és támogatja-e az arm64 architektúrát. -\nHiba: %s + Hiba a WebView előkészítésekor. Győződjön meg arról, hogy a WebView telepítve van-e, és támogatja-e az arm64 architektúrát.\nHiba: %s Sarok Üzenetbuborék alakja Farok @@ -2100,7 +2072,102 @@ Legfeljebb 200 üzenet egyszerre való törlése, vagy moderálása. Legfeljebb 20 üzenet egyszerre való továbbítása. Hang/Videó váltása hívás közben. - Csevegési profilváltás az egyszer használható meghívókhoz. + Csevegési profilváltás az egyszer használható meghívó-hivatkozásokhoz. Továbbfejlesztett biztonság ✅ - A SimpleX Chat biztonsága a Trail of Bits által lett újraauditálva. + A SimpleX Chat biztonsága a Trail of Bits által lett felülvizsgálva. + Hiba a kiszolgálók mentésekor + Nincsenek üzenet-kiszolgálók. + Nincsenek üzenetfogadó-kiszolgálók. + Nincsenek média- és fájlkiszolgálók. + A(z) %s nevű csevegési profilhoz: + Cím vagy egyszer használható meghívó-hivatkozás? + Új kiszolgáló + Címbeállítások + Előre beállított kiszolgálók + Üzemeltető + Feltételek megtekintése + Nincsenek kiszolgálók a privát üzenet-útválasztáshoz. + Nincsenek fájlküldő-kiszolgálók. + Nincsenek fájlfogadó-kiszolgálók. + Hibák a kiszolgálók konfigurációjában. + Hiba a feltételek elfogadásakor + Kézbesítetlen üzenetek + A kapcsolat elérte a kézbesítetlen üzenetek számának határát, az Ön ismerőse lehet, hogy offline állapotban van. + Nincs üzenet + Ez az üzenet törlésre került vagy még nem érkezett meg. + Koppintson a SimpleX-cím létrehozása menüpontra a későbbi létrehozáshoz. + Cím nyilvános megosztása + SimpleX-cím megosztása a közösségi médiában. + Egyszer használható meghívó-hivatkozás megosztása egy baráttal + egyetlen ismerőssel használható - személyesen vagy bármilyen üzenetküldőn keresztül megosztható.]]> + Beállíthatja az ismerős nevét, hogy emlékezzen arra, hogy kivel osztotta meg a hivatkozást. + Kapcsolatbiztonság + A SimpleX-cím és az egyszer használható meghívó-hivatkozás biztonságosan megosztható bármilyen üzenetküldőn keresztül. + A hivatkozás cseréje elleni védelem érdekében összehasonlíthatja a biztonsági kódokat az ismerősével. + A közösségi médiához + Vagy a privát megosztáshoz + SimpleX-cím vagy egyszer használható meghívó-hivatkozás? + Egyszer használható meghívó-hivatkozás létrehozása + Üzemeltetők kiválasztása + Hálózati üzemeltetők + Amikor egynél több hálózati üzemeltető van engedélyezve, akkor az alkalmazás minden egyes beszélgetéshez a különböző üzemeltetők kiszolgálóit használja. + Ha például a SimpleX Chat kiszolgálón keresztül fogadja az üzeneteket, az alkalmazás a Flux egyik kiszolgálóját használja a privát útválasztáshoz. + Válassza ki a használni kívánt hálózati üzemeltetőket. + Felülvizsgálat később + A kiszolgálókat a beállításokon keresztül konfigurálhatja. + A feltételek 30 nap elteltével lesznek elfogadva az engedélyezett üzemeltetők számára. + Az üzemeltetőket a „Hálózat és kiszolgálók” beállításaban konfigurálhatja. + Frissítés + Folytatás + Feltételek felülvizsgálata + Elfogadott feltételek + A feltételek automatikusan elfogadásra kerülnek az engedélyezett üzemeltetők számára: %s. + Az Ön kiszolgálói + %s.]]> + %s.]]> + %s kiszolgáló + Hálózati üzemeltető + Weboldal + Feltételek elfogadva ekkor: %s. + A feltételek ekkor lesznek elfogadva: %s. + Kiszolgálók használata + %s használata + A jelenlegi feltételek szövegét nem lehetett betölteni, a feltételeket ezen a hivatkozáson keresztül vizsgálhatja felül: + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s.]]> + Feltételek elfogadása + Használati feltételek + %s kiszolgálóinak használatához fogadja el a használati feltételeket.]]> + Használat az üzenetekhez + A fogadáshoz + A privát útválasztáshoz + Hozzáadott üzenetkiszolgálók + Használat a fájlokhoz + A küldéshez + Hozzáadott média- és fájlkiszolgálók + Feltételek megnyitása + Változások megnyitása + Hiba a kiszolgáló frissítésekor + A kiszolgáló-protokoll megváltozott. + A kiszolgáló üzemeltetője megváltozott. + Kiszolgáló-üzemeltető + Kiszolgáló hozzáadva a következő üzemeltetőhöz: %s. + Hiba a kiszolgáló hozzáadásakor + Átlátszóság + Elhomályosítás + Hálózati decentralizáció + A második előre beállított üzemeltető az alkalmazásban! + Flux engedélyezése + Alkalmazás-eszköztárak + a metaadatok jobb védelme érdekében. + Javított csevegési navigáció + - Csevegés megnyitása az első olvasatlan üzenetnél.\n- Ugrás az idézett üzenetekre. + Frissített feltételek megtekintése + Az Ön jelenlegi csevegőprofiljához tartozó új fájlok kiszolgálói + Vagy archívumfájl importálása + Távoli hordozható eszközök \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml index caeec02deb..a081eb37bf 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml @@ -1277,4 +1277,21 @@ Hapus Dibuat pada: %s diblokir + Ganti + Buka blokir + Buka blokir anggota untuk semua? + Buka untuk semua + Diblokir oleh admin + ANGGOTA + Hapus anggota + Status pesan: %s + Status berkas: %s + Grup + dimatikan + Buka blokir anggota? + Buka blokir anggota + tidak aktif + Hapus anggota? + Hapus anggota + Pesan tersimpan \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index 74c2397edd..0b827df4d7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -904,8 +904,7 @@ Aggiornare la modalità di isolamento del trasporto\? Tutte le chat e i messaggi verranno eliminati. Non è reversibile! Profilo di chat - Verrà usata una connessione TCP separata (e le credenziali SOCKS) per ogni contatto e membro del gruppo . -\n Nota: : se hai molte connessioni, il consumo di batteria e traffico può essere notevolmente superiore e alcune connessioni potrebbero fallire. + per ogni contatto e membro del gruppo .\n Nota: : se hai molte connessioni, il consumo di batteria e traffico può essere notevolmente superiore e alcune connessioni potrebbero fallire.]]> Connessione Questa impostazione si applica ai messaggi del profilo di chat attuale Isolamento del trasporto @@ -1101,7 +1100,7 @@ Grazie agli utenti – contribuite via Weblate! Video e file fino a 1 GB Accetta automaticamente - Apri i profili di chat + Cambia i profili di chat Maggiori informazioni Per connettervi, il tuo contatto può scansionare il codice QR o usare il link nell\'app. Quando le persone chiedono di connettersi, puoi accettare o rifiutare. @@ -2119,4 +2118,99 @@ Cambia profilo di chat per inviti una tantum. Elimina o modera fino a 200 messaggi. Inoltra fino a 20 messaggi alla volta. + Nessun server dei messaggi. + Nessun server per ricevere messaggi. + Errori nella configurazione dei server. + Per il profilo di chat %s: + Messaggi non consegnati + Nessun messaggio + Sicurezza della connessione + L\'indirizzo SimpleX e i link una tantum sono sicuri da condividere tramite qualsiasi messenger. + Per proteggerti dalla sostituzione del tuo link, puoi confrontare i codici di sicurezza del contatto. + Puoi impostare il nome della connessione per ricordare con chi è stato condiviso il link. + Condividi link una tantum con un amico + Crea link una tantum + Per i social media + O per condividere in modo privato + Operatori di rete + Quando più di un operatore di rete è attivato, l\'app userà i server di diversi operatori per ogni conversazione. + Puoi configurare gli operatori nelle impostazioni di rete e server. + Scegli gli operatori + Seleziona gli operatori di rete da usare. + Continua + Aggiorna + Esamina più tardi + Server preimpostati + Condizioni accettate + Le condizioni verranno accettate automaticamente per gli operatori attivati il: %s. + I tuoi server + Esamina le condizioni + %s.]]> + %s.]]> + Il testo delle condizioni attuali testo non è stato caricato, puoi consultare le condizioni tramite questo link: + Operatore di rete + Server di %s + Usa %s + Sito web + %s.]]> + Condizioni accettate il: %s. + Operatore + %s.]]> + %s.]]> + %s.]]> + %s.]]> + Accetta le condizioni + Errore di aggiornamento del server + Per l\'instradamento privato + I server per nuovi file del tuo profilo di chat attuale + Per ricevere + Per inviare + Usa per i messaggi + Vedi le condizioni + %s.]]> + %s, accetta le condizioni d'uso.]]> + Condizioni d\'uso + Apri le modifiche + Apri le condizioni + Il protocollo del server è cambiato. + Errore di aggiunta del server + Server dell\'operatore + Server aggiunto all\'operatore %s. + L\'operatore del server è cambiato. + Barre degli strumenti + Trasparenza + Decentralizzazione della rete + Il secondo operatore preimpostato nell\'app! + Attiva Flux + Vedi le condizioni aggiornate + Sfocatura + Server dei messaggi aggiunti + Server di multimediali e file aggiunti + Indirizzo o link una tantum? + Impostazioni dell\'indirizzo + con un solo contatto - condividilo di persona o tramite un messenger.]]> + Le condizioni verranno accettate per gli operatori attivati dopo 30 giorni. + Le condizioni verranno accettate il: %s. + Errore di accettazione delle condizioni + Errore di salvataggio dei server + per una migliore privacy dei metadati. + Ad esempio, se ricevi messaggi tramite il server di SimpleX Chat, l\'app userà uno dei server Flux per l\'instradamento privato. + Navigazione della chat migliorata + Nuovo server + Usa per i file + Indirizzo SimpleX o link una tantum? + Questo messaggio è stato eliminato o non ancora ricevuto. + Tocca \"Crea indirizzo SimpleX\" nel menu per crearlo più tardi. + La connessione ha raggiunto il limite di messaggi non consegnati, il contatto potrebbe essere offline. + Usa i server + Puoi configurare i server nelle impostazioni. + Nessun server di multimediali e file. + Nessun server per l\'instradamento dei messaggi privati. + Nessun server per ricevere file. + Nessun server per inviare file. + - Apri la chat sul primo messaggio non letto.\n- Salta ai messaggi citati. + Condividi indirizzo pubblicamente + Condividi indirizzo SimpleX sui social media. + O importa file archivio + Telefoni remoti \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml index c163458097..01c19a20f0 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml @@ -60,8 +60,7 @@ קוד גישה לאפליקציה גרסת האפליקציה לכל פרופיל צ׳אט שיש ברשותך באפליקציה.]]> - חיבור TCP נפרד (ואישור SOCKS) ייווצר לכל איש קשר וחבר קבוצה. -\nשימו לב: אם ברשותכם חיבורים רבים, צריכת הסוללה ותעבורת האינטרנט עשויה להיות גבוהה משמעותית וחלק מהחיבורים עלולים להיכשל. + לכל איש קשר וחבר קבוצה. \nשימו לב: אם ברשותכם חיבורים רבים, צריכת הסוללה ותעבורת האינטרנט עשויה להיות גבוהה משמעותית וחלק מהחיבורים עלולים להיכשל.]]> הנמען התבקש לקבל את הסרטון הנמען התבקש לקבל את התמונה צרף diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml index edd22933ec..83b29a0b4c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -41,8 +41,7 @@ アプリのバージョン アプリのバージョン: v%s アプリ内の各チャットプロフィールに、.連絡先毎にそれぞれのTCP接続(とSOCKS資格情報)が使われます。]]> - 各連絡先とグループに、それぞれのTCP接続(とSOCKS資格情報)が使われます。 -\n※注意※ 接続が多かったら、電池とデータの使用量が増えて、切断する可能性もあります。 + 各連絡先とグループに、それぞれのTCP接続(とSOCKS資格情報)が使われます。 \n※注意※ 接続が多かったら、電池とデータの使用量が増えて、切断する可能性もあります。]]> 太文字 音声通話 音声とビデオ通話 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml index 9d129847e4..8395f5ea48 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml @@ -351,12 +351,7 @@ 설정에서 잠금 화면에서 바로 전화를 받을 수 있도록 설정할 수 있어요. 연결을 완료하려면 대화 상대가 온라인 상태여야 해요. \n연결 요청을 취소하고 대화 상대를 삭제할 수 있어요 (그리고 새 링크로 재시도). - 다음과 같은 경우에 발생할 수 있어요. -\n1. 대화 상대가 메시지를 보낸 지 30일 지나서 서버에서 삭제된 경우 -\n2. 메시지를 수신하는 데 사용된 서버가 업데이트되고 재부팅된 경우 -\n3. 침해된 연결의 경우 -\n서버 업데이트를 받으려면 설정에서 개발자에게 연락해 주세요. -\n저희 개발팀은 메시지 손실을 방지하기 위해 중복된 서버를 추가할 예정이에요. + 다음과 같은 경우에 발생할 수 있습니다. \n1. 대화 상대가 메시지를 보낸 지 30일 지나서 서버에서 삭제된 경우 \n2. 메시지를 수신하는 데 사용된 서버가 업데이트되고 재부팅된 경우 \n3. 침해된 연결의 경우 SimpleX 잠금 켜짐 응답됨… 확인 받음… @@ -1288,7 +1283,7 @@ 보낸 날짜 전송 디버그 파일 및 미디어는 이 그룹에서 금지됩니다. - 이 장치의 이름을 입력하십시오… + 이 기기의 이름을 입력하십시오… 데스크톱을 찾음 전달 서버: %1$s\n대상 서버 오류: %2$s 전달 서버: %1$s\n오류: %2$s @@ -1420,4 +1415,47 @@ 친구 초대 메시지 영구 삭제 초대 + 운영자 선택 + %s.]]> + 채팅 프로필 변경 + SOCKS 프록시가 지원하지 않는 경우 .onion 호스트를 No로 사용합니다.]]> + %s 이 찾을 수 없음]]> + 앱 설정에서 앱 배터리 사용량 / 제한 없음 을 선택하세요.]]> + %s 이 연결 끊김]]> + %1$s!]]> + 사용해서는 안 됩니다.]]> + 사용자 가이드에서 확인하세요.]]> + 모바일 앱에서 열기 버튼을 클릭합니다.]]> + 운영자 + %s.]]> + 약관 수락 날짜: %s. + %s.]]> + %s.]]> + %s.]]> + 추가된 미디어 및 파일 서버 + 앱 툴바 + 흐리기 + 약관 수락 + 약관을 수락함 + 추가된 메시지 서버 + 주소 또는 일회용 링크? + 주소 설정 + 한 명의 연락처에만 사용할 수 있으며 - 직접 또는 메신저를 통해 공유하십시오.]]> + %s.]]> + %s.]]> + %s 이 현재 사용 중]]> + %s.]]> + SimpleX 백그라운드 서비스를 제공합니다. - 이 기능은 하루에 몇 퍼센트의 배터리를 소모합니다.]]> + %s 의 서버를 사용하려면 사용 약관에 동의하십시오.]]> + %1$s 에 연결 중입니다.]]> + SimpleX의 백그라운드에서 실행되도록 허용하십시오. 그렇지 않으면 알림을 사용할 수 없습니다.]]> + 앱 설정에서 앱 배터리 사용량 / 제한 없음 을 선택하십시오.]]> + %s 이 현재 비활성화됨]]> + SimpleX Chat 개발자에게 연결하여 질문하고 업데이트를 받을 수 있습니다.]]> + %s 이 연결 끊김]]> + 에서 데스크톱에서 사용을 열고 QR 코드를 스캔합니다.]]> + %s]]> + %1$s 그룹에 가입하는 중 입니다.]]> + %s 버전이 지원되지 않습니다. 두 기기에서 동일한 버전을 사용하는지 확인하십시오.]]> + %1$s 그룹에 속해 있습니다.]]> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index 2b71c3243b..3d3aac1957 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -47,8 +47,7 @@ Toestaan 1 dag Accepteer - Er wordt een afzonderlijke TCP-verbinding (en SOCKS-referentie) gebruikt voor elk contact en groepslid . -\nLet op: als u veel verbindingen heeft, kan uw batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen uitvallen. + voor elk contact en groepslid.\nLet op: als u veel verbindingen hebt, kan het batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen mislukken.]]> audio oproep Geluid aan Audio en video gesprekken @@ -1098,7 +1097,7 @@ Poolse interface Dank aan de gebruikers – draag bij via Weblate! Video\'s en bestanden tot 1 GB - Open chatprofielen + Chatprofielen wijzigen Over SimpleX adres Kom meer te weten Om verbinding te maken, kan uw contact de QR-code scannen of de link in de app gebruiken. @@ -2116,4 +2115,98 @@ Maximaal 200 berichten verwijderen of modereren. Stuur maximaal 20 berichten tegelijk door. Betere gesprekken + Accepteer voorwaarden + Berichtservers toegevoegd + Media- en bestandsservers toegevoegd + Geaccepteerde voorwaarden + Adres of eenmalige link? + %s.]]> + Fout bij het opslaan van servers + Geen berichtenservers. + Geen media- en bestandsservers. + Geen servers om bestanden te ontvangen. + Geen servers om berichten te ontvangen. + Fouten in de serverconfiguratie. + Voor chatprofiel %s: + Niet afgeleverde berichten + De verbinding heeft de limiet van niet-afgeleverde berichten bereikt. Uw contactpersoon is mogelijk offline. + Dit bericht is verwijderd of nog niet ontvangen. + Tik op SimpleX-adres maken in het menu om het later te maken. + Adres openbaar delen + Deel eenmalig een link met een vriend + Deel het SimpleX-adres op sociale media. + slechts met één contactpersoon worden gebruikt - deel persoonlijk of via een messenger.]]> + Beveiliging van de verbinding + U kunt een verbindingsnaam instellen, zodat u kunt onthouden met wie de link is gedeeld. + SimpleX-adressen en eenmalige links kunnen veilig worden gedeeld via elke messenger. + Nieuwe server + Voor social media + Of om privé te delen + Adres instellingen + Eenmalige link maken + Operators kiezen + Voor ingeschakelde operators worden de voorwaarden na 30 dagen geaccepteerd. + Netwerkbeheerders + Later beoordelen + Selecteer welke netwerkoperators u wilt gebruiken. + Update + Wanneer er meer dan één netwerkoperator is ingeschakeld, gebruikt de app voor elk gesprek de servers van verschillende operators. + U kunt operators configureren in Netwerk- en serverinstellingen. + Doorgaan + Voorwaarden bekijken + Uw servers + %s.]]> + %s.]]> + %s.]]> + Voorwaarden geaccepteerd op: %s. + Voorwaarden worden geaccepteerd op: %s. + De tekst van de huidige voorwaarden kon niet worden geladen. U kunt de voorwaarden bekijken via deze link: + Netwerkbeheerder + Operator + %s servers + Gebruik %s + Gebruik servers + Website + %s.]]> + %s.]]> + %s te gebruiken, moet u de gebruiksvoorwaarden accepteren.]]> + Gebruiksvoorwaarden + Voor privé-routering + Wijzigingen openen + De servers voor nieuwe bestanden van uw huidige chatprofiel + Om te ontvangen + Gebruik voor bestanden + Gebruik voor berichten + Bekijk voorwaarden + Serverprotocol gewijzigd. + Operatorserver + Server toegevoegd aan operator %s. + Transparantie + voor betere privacy van metagegevens. + Verbeterde chatnavigatie + Netwerk decentralisatie + De tweede vooraf ingestelde operator in de app! + Als u bijvoorbeeld berichten ontvangt via de SimpleX Chat-server, gebruikt de app een van de Flux-servers voor privéroutering. + Flux inschakelen + Geen bericht + App-werkbalken + Vervagen + %s.]]> + %s.]]> + Voorwaarden worden automatisch geaccepteerd voor ingeschakelde operators op: %s. + Fout bij het updaten van de server + Fout bij het accepteren van voorwaarden + Fout bij toevoegen server + Geen servers voor het routeren van privéberichten. + Serveroperator gewijzigd. + Geen servers om bestanden te verzenden. + Open voorwaarden + - Open chat op het eerste ongelezen bericht.\n- Ga naar geciteerde berichten. + Vooraf ingestelde servers + Bekijk de bijgewerkte voorwaarden + SimpleX adres of eenmalige link? + Om te voorkomen dat uw link wordt vervangen, kunt u contactbeveiligingscodes vergelijken. + Om te verzenden + U kunt servers configureren via instellingen. + Of importeer archiefbestand \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml index c679651e7d..10f4f79d47 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -335,8 +335,7 @@ Wersja aplikacji Wersja aplikacji: v%s dla każdego profilu czatu, który masz w aplikacji.]]> - Oddzielne połączenie TCP (i poświadczenia SOCKS) będą używane dla każdego kontaktu i członka grupy. -\nUwaga: jeśli masz wiele połączeń, zużycie baterii i ruchu może być znacznie wyższe, a niektóre połączenia mogą się nie udać. + dla każdego kontaktu i członka grupy. \nUwaga: jeśli masz wiele połączeń, zużycie baterii i ruchu może być znacznie wyższe, a niektóre połączenia mogą się nie udać.]]> Profil czatu Połączenie Wersja rdzenia: v%s diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml index 18c20eba50..02e5547e04 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml @@ -194,8 +194,7 @@ Preservar o último rascunho da mensagem, com anexos. Solicitada a recepção do vídeo para cada perfil de conversa que você tiver na aplicação .]]> - Uma conexão TCP separada (e credencial SOCKS) será usada para cada contato e membro do grupo. -\n Por favor note: se você tiver muitas conexões, o seu consumo de bateria e consumo de tráfego pode ser substancialmente maior e algumas conexões podem falhar. + para cada contato e membro do grupo. \n Por favor note: se você tiver muitas conexões, o seu consumo de bateria e consumo de tráfego pode ser substancialmente maior e algumas conexões podem falhar.]]> Solicitada a recepção da imagem Autenticação indisponível negrito diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml index 7f8e0e2743..c02e17f568 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml @@ -549,8 +549,7 @@ Versiunea aplicației: %s pentru fiecare profil de conversație pe care le aveți în aplicație]]> Permiteți downgrade-ul - O conexiune separată TCP (și SOCKS credential) va fi folosită pentru fiecare contact și membru de grup -\nVa rugăm considerați că: dacă aveți prea multe conexiuni, consumul dumneavoastră de baterie și trafic de internet pot fi considerabil mai mari, iar unele conexiuni pot eșua. + pentru fiecare contact și membru de grup \nVa rugăm considerați că: dacă aveți prea multe conexiuni, consumul dumneavoastră de baterie și trafic de internet pot fi considerabil mai mari, iar unele conexiuni pot eșua.]]> Conexiune terminată Se conectează la desktop Rugat să primească imaginea diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index 3d1e92f83f..59b355fd2b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -987,8 +987,7 @@ Все чаты и сообщения будут удалены - это нельзя отменить! Сборка приложения: %s Версия приложения: v%s - Отдельное TCP-соединение (и авторизация SOCKS) будет использоваться для каждого контакта и члена группы. -\nОбратите внимание: если у Вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать. + для каждого контакта и члена группы. \nОбратите внимание: если у Вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать.]]> для каждого профиля чата, который Вы имеете в приложении.]]> Версия ядра: v%s Удалить профиль чата\? diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml index 48e26132c8..8df7457e0f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml @@ -71,8 +71,7 @@ İzin ver Uygulama erişim kodu Uygulamadaki her konuşma profliniz için ayrı bir TCP bağlantısı (ve SOCKS kimliği) kullanılacaktır.]]> - Konuştuğun kişilerin ve grup üyelerinin tamamı için ayrı bir TCP bağlantısı (ve SOCKS kimliği) kullanılacaktır. -\nBilgin olsun: Çok sayıda bağlantın varsa pilin ve veri kullanımın önemli ölçüde artabilir ve bazı bağlantılar başarısız olabilir. + Konuştuğun kişilerin ve grup üyelerinin tamamı için ayrı bir TCP bağlantısı (ve SOCKS kimliği) kullanılacaktır.\nBilgin olsun: Çok sayıda bağlantın varsa pilin ve veri kullanımın önemli ölçüde artabilir ve bazı bağlantılar başarısız olabilir.]]> Kaydet ve grup üyelerini bilgilendir Uygulama açıkken çalışır Ara @@ -2115,4 +2114,15 @@ 200\'e kadar mesajı silin veya düzenleyin. Daha iyi güvenlik ✅ SimpleX protokolleri Trail of Bits tarafından incelenmiştir. + Adres mi yoksa tek seferlik bağlantı mı? + Mesaj sunucuları eklendi + Koşulları kabul edin + Kabul edilen koşullar + Medya ve dosya sunucuları eklendi + Uygulama araç çubukları + Adres ayarları + Bulanıklık + sadece bir kişiyle kullanılabilir - yüz yüze veya herhangi bir mesajlaşma programı aracılığıyla paylaşın]]> + %s.]]> + %s.]]> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml index a37d13bd51..fcae74db1b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -75,8 +75,7 @@ для кожного профілю чату, який у вас є в додатку.]]> Вигляд Версія додатку: v%s - Окреме TCP-підключення (і обліковий запис SOCKS) буде використовуватися для кожного контакту та учасника групи. -\nЗверніть увагу: якщо у вас багато підключень, споживання заряду батареї та трафіку може значно збільшитися, і деякі підключення можуть бути невдалими. + для кожного контакту та члена групи.\nЗверніть увагу: якщо у вас багато з’єднань, заряд акумулятора та споживання трафіку можуть бути значно вищими, а деякі з’єднання можуть бути невдалими.]]> Активована оптимізація батареї, вимикається фоновий сервіс і періодичні запити нових повідомлень. Ви можете знову увімкнути їх у налаштуваннях. Назад жирний @@ -104,7 +103,7 @@ поганий хеш повідомлення поганий ідентифікатор повідомлення Фон - Це можна вимкнути у налаштуваннях – сповіщення все одно будуть відображатися, коли програма працює. + Це можна вимкнути в налаштуваннях – сповіщення все одно відображатимуться під час роботи програми.]]> Служба фонового режиму завжди активна – сповіщення відображатимуться, як тільки повідомлення будуть доступні. Запит на отримання зображення Прикріпити @@ -244,7 +243,7 @@ Використовувати для нових підключень Видалити сервер Оцінити на GitHub - Як використовувати ваші сервери + Як використовувати власні сервери Збережені сервери WebRTC ICE будуть видалені. Налаштувати сервери ICE Мережа та сервери @@ -621,14 +620,14 @@ Цей рядок не є з\'єднувальним посиланням! Код безпеки Позначити, що перевірено - Ваші профілі чату + Ваші профілі Пароль бази даних та експорт Markdown у повідомленнях Надсилайте питання та ідеї - Ввести адресу сервера вручну + Ввести сервер вручну Попередньо встановлений сервер Адреса вашого сервера - Сервери для нових підключень вашого поточного профілю чату + Сервери для нових підключень до вашого поточного профілю Використовувати сервери SimpleX Chat? Сервери ICE (один на рядок) Помилка збереження серверів ICE @@ -832,7 +831,7 @@ Відео Прийняте вами з\'єднання буде скасоване! Контакт ще не підключений! - Тестові сервери + Тестування серверів Зберегти сервери Ваш сервер Тест сервера не вдався! @@ -994,7 +993,7 @@ Помилка встановлення адреси Підключити Будь ласка, запам\'ятайте або збережіть його надійно - немає можливості відновлення втраченого пароля! - Відкрити профілі чату + Змінити профілі чату Очікування на відео Очікування на файл Голосове повідомлення (%1$s) @@ -1134,7 +1133,7 @@ Файл не знайдено Підключитися через посилання Підключитися - Щоб показати ваш схований профіль, введіть повний пароль у поле пошуку на сторінці Ваші профілі чату. + Щоб показати ваш схований профіль, введіть повний пароль у поле пошуку на сторінці Ваші профілі. Підтвердити пароль %dd Захистіть свої чат-профілі паролем! @@ -1424,7 +1423,7 @@ %d подій в групі Невірне ім\'я! Перемикайте інкогніто під час підключення. - Це ваше посилання для групи %1$s! + %1$s!]]> Розблокувати Неправильний шлях до файлу - підключайтесь до служби каталогів (BETA)! @@ -1470,7 +1469,7 @@ Пристрої робочого столу Не сумісно! Зв\'язати з мобільним - Використовувати зі стаціонарного комп\'ютера + Використовувати з комп\'ютера Підключений мобільний Код сеансу Підключення завершено @@ -1487,7 +1486,7 @@ Некоректна адреса робочого столу Вставити адресу робочого столу Перевірити код з робочим столом - Сканувати QR-код з робочого столу + Сканувати QR-код з комп\'ютера Пристрої Виявлено через локальну мережу - за бажанням повідомляйте про видалених контактів. @@ -1912,7 +1911,7 @@ Будь ласка, попросіть вашого контакту увімкнути дзвінки. Зберегти і перепідключитися Видалити до 20 повідомлень за один раз. - Доступна панель інструментів чату + Доступна панель чату Користуватися застосунком однією рукою. З\'єднуйтеся з друзями швидше. Керуйте своєю мережею @@ -2014,7 +2013,7 @@ Завантажити %s (%s) Відкрити розташування файлу Пропустити цю версію - Доступна панель інструментів чату + Доступна панель чату Не можна зателефонувати контакту Підключення до контакту, будь ласка, зачекайте або перевірте пізніше! Дзвінки заборонені! @@ -2097,7 +2096,7 @@ Звук вимкнено Помилка ініціалізації WebView. Переконайтеся, що WebView встановлено, і його підтримувана архітектура — arm64. \nПомилка: %s Хвіст - Куточок + Кут Форма повідомлення Сесія додатку Нові облікові дані SOCKS будуть використовуватись щоразу, коли ви запускаєте додаток. @@ -2116,4 +2115,99 @@ Видалити або модерувати до 200 повідомлень. Переслати до 20 повідомлень одночасно. Переключити профіль чату для одноразових запрошень. + Помилка прийняття умов + Сервери збереження помилок + Для профілю чату %s: + Ніяких медіа та файлових серверів. + Немає серверів повідомлень. + Немає серверів для маршрутизації приватних повідомлень. + Недоставлені повідомлення + Немає повідомлення + Це повідомлення було видалено або ще не отримано. + Поділіться одноразовим посиланням з другом + Поділіться адресою публічно + Ви можете задати ім\'я з\'єднання, щоб запам\'ятати, з ким ви поділилися посиланням. + Безпека з\'єднання + Щоб захиститися від заміни вашого посилання, ви можете порівняти коди безпеки контактів. + Для соціальних мереж + Або поділитися приватно + Обирайте операторів + Мережеві оператори + Умови будуть прийняті для ввімкнених операторів через 30 днів. + Наприклад, якщо ви отримуєте повідомлення через сервер SimpleX Chat, програма використовуватиме один із серверів Flux для приватної маршрутизації. + Виберіть мережевих операторів для використання. + Ви можете налаштувати сервери за допомогою налаштувань. + Перегляньте пізніше + Оновлення + Прийняті умови + Умови будуть автоматично прийняті для увімкнених операторів: %s. + Оператор мережі + %s серверів + Вебсайт + Ваші сервери + Використовуйте %s + Використовуйте сервери + %s.]]> + %s.]]> + Прийняти умови + Умови перегляду + Додано сервери повідомлень + Для приватної маршрутизації + Щоб отримати + Використовуйте для файлів + Додано медіа та файлові сервери + Відкриті зміни + Відкриті умови + Сервери для нових файлів вашого поточного профілю чату + Щоб відправити + Помилка додавання сервера + Сервер оператора + Сервер додано до оператора %s. + Оператор сервера змінився. + Панелі інструментів додатків + Розмиття + Прозорість + Покращена навігація в чаті + - Відкрити чат на першому непрочитаному повідомленні.\n- Перейти до цитованих повідомлень. + Другий попередньо встановлений оператор у застосунку! + Переглянути оновлені умови + Налаштування адреси + %s.]]> + Адреса або одноразове посилання? + Умови використання + лише з одним контактом – поділіться особисто чи через будь-який месенджер.]]> + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s, прийміть умови використання.]]> + Текст поточних умов не вдалося завантажити, ви можете переглянути умови за цим посиланням: + Помилки в конфігурації серверів. + Умови приймаються з: %s. + Увімкнути flux + Умови приймаються до: %s. + Продовжити + Створити одноразове посилання + Помилка оновлення сервера + для кращої конфіденційності метаданих. + Децентралізація мережі + Оператор + Немає серверів для отримання повідомлень. + SimpleX адреса або одноразове посилання? + Новий сервер + Немає серверів для отримання файлів. + Умови перегляду + Немає серверів для надсилання файлів. + Попередньо встановлені сервери + Протокол сервера змінено. + Поділіться адресою SimpleX у соціальних мережах. + SimpleX-адреси та одноразові посилання можна безпечно ділитися через будь-який месенджер. + З\'єднання досягло ліміту недоставлених повідомлень, ваш контакт може бути офлайн. + Натисніть Створити адресу SimpleX у меню, щоб створити її пізніше. + Якщо увімкнено більше одного оператора, програма використовуватиме сервери різних операторів для кожної розмови. + Використовуйте для повідомлень + Ви можете налаштувати операторів у налаштуваннях Мережі та серверів. + Або імпортуйте архівний файл + Віддалені мобільні \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml index cefaa982a5..f02f7abc15 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml @@ -115,8 +115,7 @@ Tắt âm Yêu cầu để nhận hình ảnh cho mỗi hồ sơ trò chuyện bạn có trong ứng dụng.]]> - Một kết nối TCP riêng biệt (và thông tin xác thực SOCKS) sẽ được sử dụng cho từng liên hệ và thành viên nhóm. -\nXin lưu ý: nếu bạn có nhiều kết nối, mức tiêu thụ pin và lưu lượng truy cập của bạn có thể cao hơn đáng kể và một số kết nối có thể không thành công. + cho từng liên hệ và thành viên nhóm. \nXin lưu ý: nếu bạn có nhiều kết nối, mức tiêu thụ pin và lưu lượng truy cập của bạn có thể cao hơn đáng kể và một số kết nối có thể không thành công.]]> cuộc gọi thoại Các cuộc gọi thoại và video Các cuộc gọi thoại và video @@ -1351,4 +1350,53 @@ Cấm gửi tin nhắn tự xóa. Cấm gửi đường dẫn SimpleX Được proxy + Địa chỉ hay đường dẫn dùng một lần? + với chỉ một liên hệ - chia sẻ trực tiếp hoặc thông qua bất kỳ ứng dụng tin nhắn nào.]]> + Cài đặt máy chủ .onion thành Không nếu proxy SOCKS không hỗ trợ chúng.]]> + %s.]]> + %s.]]> + %s.]]> + Đã thêm các máy chủ truyền tin nhắn + Thanh công cụ ứng dụng + Làm mờ + Chấp nhận điều kiện + Đã thêm các máy chủ truyền tệp & phương tiện + Đã chấp nhận điều kiện + Cài đặt địa chỉ + %s.]]> + %s.]]> + Kho lưu trữ GitHub của chúng tôi.]]> + %s.]]> + %s.]]> + %s.]]> + Hướng dẫn người dùng.]]> + %1$s rồi.]]> + Mức sử dụng pin ứng dụng / Không hạn chế trong phần cài đặt ứng dụng.]]> + %s]]> + cho phép SimpleX chạy trong nền trong hộp thoại tiếp theo. Nếu không, thông báo sẽ bị vô hiệu hóa.]]> + %s, vui lòng chấp nhận điều kiện sử dụng.]]> + Dịch vụ nền SimpleX – nó tiêu tốn một vài phần trăm pin mỗi ngày.]]> + Mức sử dụng pin ứng dụng / Không hạn chế trong phần cài đặt ứng dụng.]]> + %1$s rồi.]]> + %1$s!]]> + %1$s rồi.]]> + Mở trong ứng dụng di động.]]> + Chọn nhà cung cấp + kết nối với các nhà phát triển SimpleX Chat để hỏi bất kỳ câu hỏi nào và nhận thông tin cập nhật.]]> + không được sử dụng cùng một cơ sở dữ liệu trên hai thiết .]]> + Lỗi chấp nhận điều kiện + Lỗi lưu máy chủ + Lỗi trong cấu hình máy chủ. + Bảo mật kết nối + Tạo đường dẫn dùng một lần + Các điều kiện sẽ được chấp nhận với các nhà cung cấp được cho phép sau 30 ngày. + Tiếp tục + Không thể tải văn bản về các điều kiện hiện tại, bạn có thể xem xét các điều kiện thông qua đường dẫn này: + Các điều kiện sử dụng + Cho phép flux + Các điều kiện sẽ được chấp nhận vào: %s. + Lỗi thêm máy chủ + Lỗi cập nhật máy chủ + Các điều kiện đã được chấp nhận vào: %s. + Các điều kiện sẽ được tự động chấp nhận với các nhà cung cấp được cho phép vào: %s. \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index 4c1c60e247..4c0b66d216 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -113,8 +113,7 @@ 开启音频 已要求接收图片 ,用于您在应用程序中的每个聊天资料 。]]> - 每个联系人和群组成员 将使用单独的 TCP 连接(和 SOCKS 凭证)。 -\n请注意:如果您有很多连接,您的电池和流量消耗可能会大大增加,并且某些连接可能会失败。 + 每个联系人和群成员。\n请注意:如果您有很多连接,您的电池和流量消耗可能会大大增加,并且某些连接可能会失败。]]> 返回 最长续航 。您只会在应用程序运行时收到通知(无后台服务)。]]> 较长续航 。应用每 10 分钟检查一次消息。您可能会错过来电或者紧急信息。]]> @@ -1172,7 +1171,7 @@ 收到的信息 只有您的联系人可以添加消息回应。 打开数据库中…… - 打开聊天资料 + 更改聊天资料 您的联系人可以扫描二维码或使用应用程序中的链接来建立连接。 您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。 如果您不能亲自见面,可以在视频通话中展示二维码,或分享链接。 @@ -2117,4 +2116,99 @@ 对一次性邀请切换聊天配置文件。 更佳的通话 允许自行删除或管理员移除最多200条消息。 + 保存服务器出错 + 服务器配置有错误。 + 用于聊天资料 %s: + 无消息服务器 + 无私密消息路由服务器。 + 无消息接收服务器。 + 无文件发送服务器。 + 未送达的消息 + 无消息 + 连接安全性 + 和一位好友分享一次性链接 + 公开分享地址 + 在社媒上分享 SimpleX 地址。 + 你可以设置连接名称,用来记住和谁分享了这个链接。 + 可以通过任何消息应用安全分享 SimpleX 地址和一次性链接。 + 创建一次性链接 + 用于社交媒体 + 或者私下分享 + 选择运营者 + 网络运营者 + 30 天后将接受已启用的运营者的条款。 + 继续 + 稍后审阅 + 选择要使用的网络运营者。 + 更新 + 你可以通过设置配置服务器。 + %s.]]> + 将于下列日期自动接受已启用的运营者的条款:%s。 + 预设服务器 + 你的服务器 + 接受条款的将来日期为:%s。 + 网络运营者 + 运营者 + %s 台服务器 + 网站 + 无法加载当前条款文本,你可以通过此链接审阅条款: + 使用 %s + 使用服务器 + %s.]]> + %s.]]> + 查看条款 + 使用条款 + 用于私密路由 + 消息接收 + 发送 + 用于文件 + 用于消息 + 打开更改 + 打开条款 + 运营者服务器 + 已添加服务器到运营者 %s + 服务器运营者已更改。 + 服务器协议已更改。 + 透明度 + 网络去中心化 + 应用中的第二个预设运营者! + 改进了聊天导航 + 查看更新后的条款 + 比如,如果你通过 SimpleX 服务器收到消息,应用会使用 Flux 服务器中的一台进行私密路由。 + 启用了多于一个网络运营者时,应用会为每个对话使用不同运营者的服务器。 + 接受条款 + 模糊 + 地址或一次性链接? + 已添加消息服务器 + 已添加媒体和文件服务器 + 地址设置 + 已接受条款 + 应用工具栏 + 仅用于一名联系人 - 面对面或通过任何消息应用分享.]]> + %s.]]> + %s.]]> + %s.]]> + %s.]]> + %s的服务器,请接受使用条款。]]> + %s.]]> + 开启 flux + 接受条款出错 + 为了更好的元数据隐私。 + 添加服务器出错 + 无媒体和文件服务器。 + 更新服务器出错 + 新服务器 + 无文件接收服务器。 + - 在第一条未读消息上打开聊天.\n- 跳转到引用的消息. + 审阅条款 + SimpleX 地址或一次性链接? + 要稍后创建 SimpleX 地址,请在菜单中轻按“创建 SimpleX 地址” + 当前聊天资料的新文件服务器 + 此消息被删除或尚未收到。 + 连接达到了未送达消息上限,你的联系人可能处于离线状态。 + 为了防止链接被替换,你可以比较联系人安全代码。 + 你可以在“网络和服务器”设置中配置运营者。 + 接受运营者条款的日期:%s + 远程移动设备 + 或者导入压缩文件 \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml index 65c16db612..22d226829e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -143,8 +143,7 @@ 取消檔案預覽 無法接收檔案 重複的顯示名稱! - 一個單獨的 TCP 連接(和 SOCKS 憑證)將用於每個聯絡人和群組內的成員。 -\n請注意:如果你有很多連接,你的電話電量和數據流量的消耗率會大大增加,一些連接有機會會連接失敗。 + 每個聯絡人和群組內的成員。 \n請注意:如果你有很多連接,你的電話電量和數據流量的消耗率會大大增加,一些連接有機會會連接失敗。]]> 每個聊天室的設定。]]> 返回 省電模式運行中,關閉了背景通知服務和定期更新接收訊息。你可以在通知設定內重新啟用。 From a1e25620f7091433ce3888aa660a95eb6ade31ae Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 3 Dec 2024 15:23:23 +0000 Subject: [PATCH 17/22] website: translations (#5306) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (German) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/de/ * Translated using Weblate (Dutch) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/ * Translated using Weblate (Arabic) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/ * Translated using Weblate (Italian) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/ * Translated using Weblate (Ukrainian) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/uk/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/hu/ * Translated using Weblate (German) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/de/ * Translated using Weblate (Dutch) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/ * Translated using Weblate (Arabic) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/ * Translated using Weblate (Italian) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/ * Translated using Weblate (Ukrainian) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/uk/ * Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (257 of 257 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/hu/ --------- Co-authored-by: mlanp Co-authored-by: M1K4 Co-authored-by: jonnysemon Co-authored-by: Random Co-authored-by: Max Co-authored-by: 大王叫我来巡山 Co-authored-by: summoner001 --- website/langs/ar.json | 7 ++++--- website/langs/de.json | 3 ++- website/langs/hu.json | 7 ++++--- website/langs/it.json | 7 ++++--- website/langs/nl.json | 3 ++- website/langs/uk.json | 3 ++- website/langs/zh_Hans.json | 3 ++- 7 files changed, 20 insertions(+), 13 deletions(-) diff --git a/website/langs/ar.json b/website/langs/ar.json index 927dcb0c49..9274e71850 100644 --- a/website/langs/ar.json +++ b/website/langs/ar.json @@ -244,15 +244,16 @@ "f-droid-page-simplex-chat-repo-section-text": "لإضافته إلى عميل F-Droid، امسح رمز QR أو استخدم عنوان URL هذا:", "f-droid-page-f-droid-org-repo-section-text": "مستودعات SimpleX Chat و F-Droid.org مبنية على مفاتيح مختلفة. للتبديل، يُرجى تصدير قاعدة بيانات الدردشة وإعادة تثبيت التطبيق.", "comparison-section-list-point-4a": "مُرحلات SimpleX لا يمكنها أن تتنازل عن تعمية بين الطرفين. تحقق من رمز الأمان للتخفيف من الهجوم على القناة خارج النطاق", - "hero-overlay-3-title": "التقييم الأمني", + "hero-overlay-3-title": "التقييمات الأمنية", "hero-overlay-card-3-p-2": "قامت Trail of Bits بمراجعة مكونات التشفير والشبكات الخاصة بمنصة SimpleX في نوفمبر 2022. اقرأ المزيد في الإعلان.", "jobs": "انضم للفريق", - "hero-overlay-3-textlink": "التقييم الأمني", + "hero-overlay-3-textlink": "التقييمات الأمنية", "hero-overlay-card-3-p-1": "Trail of Bits هي شركة رائدة في مجال الاستشارات الأمنية والتكنولوجية، ومن بين عملائها شركات التكنولوجيا الكبرى والوكالات الحكومية ومشاريع blockchain الكبرى.", "docs-dropdown-9": "التنزيلات", "please-enable-javascript": "الرجاء تفعيل جافا سكريبت (JavaScript) لرؤية رمز QR.", "please-use-link-in-mobile-app": "يُرجى استخدام الرابط في تطبيق الجوال", "docs-dropdown-10": "الشفافية", "docs-dropdown-11": "الأسئلة الأكثر شيوعًا", - "docs-dropdown-12": "الأمان" + "docs-dropdown-12": "الأمان", + "hero-overlay-card-3-p-3": "قامت Trail of Bits بمراجعة التصميم التعموي لبروتوكولات شبكة SimpleX في يوليو 2024. اقرأ المزيد." } diff --git a/website/langs/de.json b/website/langs/de.json index 1a5c42d980..c5d1fceefa 100644 --- a/website/langs/de.json +++ b/website/langs/de.json @@ -254,5 +254,6 @@ "please-use-link-in-mobile-app": "Bitte nutzen Sie den Link in der Mobiltelefon-App", "docs-dropdown-10": "Transparent", "docs-dropdown-11": "FAQ", - "docs-dropdown-12": "Sicherheit" + "docs-dropdown-12": "Sicherheit", + "hero-overlay-card-3-p-3": "Trail of Bits hat das kryptografische Design des Netzwerk-Protokolls von SimpleX im Juli 2024 überprüft. Hier finden Sie weitere Informationen dazu." } diff --git a/website/langs/hu.json b/website/langs/hu.json index f7cf1c558b..b0b76714bc 100644 --- a/website/langs/hu.json +++ b/website/langs/hu.json @@ -29,12 +29,12 @@ "hero-p-1": "Más alkalmazások felhasználói azonosítókkal rendelkeznek: Signal, Matrix, Session, Briar, Jami, Cwtch, stb.
A SimpleX nem, még véletlenszerű számokkal sem.
Ez radikálisan javítja az adatvédelmet.", "hero-overlay-1-textlink": "Miért ártanak a felhasználói azonosítók az adatvédelemnek?", "hero-overlay-2-textlink": "Hogyan működik a SimpleX?", - "hero-overlay-3-textlink": "A biztonság értékelése", + "hero-overlay-3-textlink": "Biztonsági felmérések", "hero-2-header": "Privát kapcsolat létrehozása", "hero-2-header-desc": "A videó bemutatja, hogyan kapcsolódhat az ismerőséhez egy egyszer használható QR-kód segítségével, személyesen vagy videokapcsolaton keresztül. Ugyanakkor egy meghívó-hivatkozás megosztásával is kapcsolódhat.", "hero-overlay-1-title": "Hogyan működik a SimpleX?", "hero-overlay-2-title": "Miért ártanak a felhasználói azonosítók az adatvédelemnek?", - "hero-overlay-3-title": "A biztonság értékelése", + "hero-overlay-3-title": "Biztonsági felmérések", "feature-1-title": "E2E-titkosított üzenetek markdown formázással és szerkesztéssel", "feature-2-title": "E2E-titkosított
képek, videók és fájlok", "feature-3-title": "E2E-titkosított decentralizált csoportok — csak a felhasználók tudják, hogy ezek léteznek", @@ -254,5 +254,6 @@ "glossary": "Fogalomtár", "simplex-chat-via-f-droid": "SimpleX Chat az F-Droidon keresztül", "simplex-chat-repo": "SimpleX Chat tároló", - "stable-and-beta-versions-built-by-developers": "A fejlesztők által készített stabil és béta verziók" + "stable-and-beta-versions-built-by-developers": "A fejlesztők által készített stabil és béta verziók", + "hero-overlay-card-3-p-3": "A Trail of Bits 2024 júliusában felülvizsgálta a SimpleX hálózati protokollok kriptográfiai felépítését. Tudjon meg többet." } diff --git a/website/langs/it.json b/website/langs/it.json index 431354c068..bdc4c38d45 100644 --- a/website/langs/it.json +++ b/website/langs/it.json @@ -244,15 +244,16 @@ "stable-and-beta-versions-built-by-developers": "Versioni stabili e beta compilate dagli sviluppatori", "f-droid-page-simplex-chat-repo-section-text": "Per aggiungerlo al tuo client F-Droid scansiona il codice QR o usa questo URL:", "comparison-section-list-point-4a": "I relay di SimpleX non possono compromettere la crittografia e2e. Verifica il codice di sicurezza per mitigare gli attacchi sul canale fuori banda", - "hero-overlay-3-title": "Valutazione della sicurezza", + "hero-overlay-3-title": "Valutazioni della sicurezza", "hero-overlay-card-3-p-2": "Trail of Bits ha revisionato i componenti di crittografia e di rete della piattaforma SimpleX nel novembre 2022. Maggiori informazioni.", "jobs": "Unisciti al team", - "hero-overlay-3-textlink": "Valutazione della sicurezza", + "hero-overlay-3-textlink": "Valutazioni della sicurezza", "hero-overlay-card-3-p-1": "Trail of Bits è leader nella consulenza di sicurezza e tecnologia, i cui clienti includono grandi aziende, agenzie governative e importanti progetti di blockchain.", "docs-dropdown-9": "Download", "please-enable-javascript": "Attiva JavaScript per vedere il codice QR.", "please-use-link-in-mobile-app": "Usa il link nell'app mobile", "docs-dropdown-10": "Trasparenza", "docs-dropdown-12": "Sicurezza", - "docs-dropdown-11": "Domande frequenti" + "docs-dropdown-11": "Domande frequenti", + "hero-overlay-card-3-p-3": "Trail of Bits ha analizzato la progettazione crittografica dei protocolli della rete SimpleX nel luglio 2024. Leggi di più." } diff --git a/website/langs/nl.json b/website/langs/nl.json index 18edf45369..c725cc3d3e 100644 --- a/website/langs/nl.json +++ b/website/langs/nl.json @@ -254,5 +254,6 @@ "please-use-link-in-mobile-app": "Gebruik de link in de mobiele app", "docs-dropdown-10": "Transparantie", "docs-dropdown-11": "FAQ", - "docs-dropdown-12": "Beveiliging" + "docs-dropdown-12": "Beveiliging", + "hero-overlay-card-3-p-3": "Trail of Bits heeft in juli 2024 het cryptografische ontwerp van SimpleX-netwerkprotocollen beoordeeld. Lees meer." } diff --git a/website/langs/uk.json b/website/langs/uk.json index 5fa2f02b99..d055aa68a2 100644 --- a/website/langs/uk.json +++ b/website/langs/uk.json @@ -254,5 +254,6 @@ "please-use-link-in-mobile-app": "Будь ласка, скористайтеся посиланням у мобільному додатку", "docs-dropdown-11": "ПОШИРЕНІ ЗАПИТАННЯ", "docs-dropdown-10": "Прозорість", - "docs-dropdown-12": "Безпека" + "docs-dropdown-12": "Безпека", + "hero-overlay-card-3-p-3": "Trail of Bits переглянув криптографічний дизайн мережевих протоколів SimpleX в липні 2024 року. Детальніше." } diff --git a/website/langs/zh_Hans.json b/website/langs/zh_Hans.json index 87a8cc3c78..e482056565 100644 --- a/website/langs/zh_Hans.json +++ b/website/langs/zh_Hans.json @@ -254,5 +254,6 @@ "please-enable-javascript": "请启用 JavaScript 以查看二维码。", "docs-dropdown-10": "透明度", "docs-dropdown-11": "常问问题", - "docs-dropdown-12": "安全性" + "docs-dropdown-12": "安全性", + "hero-overlay-card-3-p-3": "Trail of Bits 于 2024 年 7 月审核了 SimpleX 网络协议的加密设计。了解更多信息。" } From 6593de89c200051cff66a1412d2ec10e984ac7c0 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Tue, 3 Dec 2024 19:25:15 +0400 Subject: [PATCH 18/22] ios: make more texts different for groups and business chats (#5307) --- .../Chat/Group/AddGroupMembersView.swift | 5 +- .../Views/Chat/Group/GroupChatInfoView.swift | 55 +++++++++++++------ .../Chat/Group/GroupMemberInfoView.swift | 31 +++++++++-- .../Views/ChatList/ChatListNavLink.swift | 21 ++++--- 4 files changed, 79 insertions(+), 33 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift index 691bda39a6..925f4120bc 100644 --- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift +++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift @@ -140,12 +140,13 @@ struct AddGroupMembersViewCommon: View { return dummy }() - private func inviteMembersButton() -> some View { + @ViewBuilder private func inviteMembersButton() -> some View { + let label: LocalizedStringKey = groupInfo.businessChat == nil ? "Invite to group" : "Invite to chat" Button { inviteMembers() } label: { HStack { - Text("Invite to group") + Text(label) Image(systemName: "checkmark") } } diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift index 89f0fcbedf..27aa0edb5b 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift @@ -101,7 +101,12 @@ struct GroupChatInfoView: View { } header: { Text("") } footer: { - Text("Only group owners can change group preferences.") + let label: LocalizedStringKey = ( + groupInfo.businessChat == nil + ? "Only group owners can change group preferences." + : "Only chat owners can change preferences." + ) + Text(label) .foregroundColor(theme.colors.secondary) } @@ -494,11 +499,12 @@ struct GroupChatInfoView: View { } } - private func deleteGroupButton() -> some View { + @ViewBuilder private func deleteGroupButton() -> some View { + let label: LocalizedStringKey = groupInfo.businessChat == nil ? "Delete group" : "Delete chat" Button(role: .destructive) { alert = .deleteGroupAlert } label: { - Label("Delete group", systemImage: "trash") + Label(label, systemImage: "trash") .foregroundColor(Color.red) } } @@ -512,20 +518,22 @@ struct GroupChatInfoView: View { } } - private func leaveGroupButton() -> some View { + @ViewBuilder private func leaveGroupButton() -> some View { + let label: LocalizedStringKey = groupInfo.businessChat == nil ? "Leave group" : "Leave chat" Button(role: .destructive) { alert = .leaveGroupAlert } label: { - Label("Leave group", systemImage: "rectangle.portrait.and.arrow.right") + Label(label, systemImage: "rectangle.portrait.and.arrow.right") .foregroundColor(Color.red) } } // TODO reuse this and clearChatAlert with ChatInfoView private func deleteGroupAlert() -> Alert { + let label: LocalizedStringKey = groupInfo.businessChat == nil ? "Delete group?" : "Delete chat?" return Alert( - title: Text("Delete group?"), - message: deleteGroupAlertMessage(), + title: Text(label), + message: deleteGroupAlertMessage(groupInfo), primaryButton: .destructive(Text("Delete")) { Task { do { @@ -544,10 +552,6 @@ struct GroupChatInfoView: View { ) } - private func deleteGroupAlertMessage() -> Text { - groupInfo.membership.memberCurrent ? Text("Group will be deleted for all members - this cannot be undone!") : Text("Group will be deleted for you - this cannot be undone!") - } - private func clearChatAlert() -> Alert { Alert( title: Text("Clear conversation?"), @@ -563,9 +567,15 @@ struct GroupChatInfoView: View { } private func leaveGroupAlert() -> Alert { - Alert( - title: Text("Leave group?"), - message: Text("You will stop receiving messages from this group. Chat history will be preserved."), + let titleLabel: LocalizedStringKey = groupInfo.businessChat == nil ? "Leave group?" : "Leave chat?" + let messageLabel: LocalizedStringKey = ( + groupInfo.businessChat == nil + ? "You will stop receiving messages from this group. Chat history will be preserved." + : "You will stop receiving messages from this chat. Chat history will be preserved." + ) + return Alert( + title: Text(titleLabel), + message: Text(messageLabel), primaryButton: .destructive(Text("Leave")) { Task { await leaveGroup(chat.chatInfo.apiId) @@ -609,9 +619,14 @@ struct GroupChatInfoView: View { } private func removeMemberAlert(_ mem: GroupMember) -> Alert { - Alert( + let messageLabel: LocalizedStringKey = ( + groupInfo.businessChat == nil + ? "Member will be removed from group - this cannot be undone!" + : "Member will be removed from chat - this cannot be undone!" + ) + return Alert( title: Text("Remove member?"), - message: Text("Member will be removed from group - this cannot be undone!"), + message: Text(messageLabel), primaryButton: .destructive(Text("Remove")) { Task { do { @@ -631,6 +646,14 @@ struct GroupChatInfoView: View { } } +func deleteGroupAlertMessage(_ groupInfo: GroupInfo) -> Text { + groupInfo.businessChat == nil ? ( + groupInfo.membership.memberCurrent ? Text("Group will be deleted for all members - this cannot be undone!") : Text("Group will be deleted for you - this cannot be undone!") + ) : ( + groupInfo.membership.memberCurrent ? Text("Chat will be deleted for all members - this cannot be undone!") : Text("Chat will be deleted for you - this cannot be undone!") + ) +} + func groupPreferencesButton(_ groupInfo: Binding, _ creatingGroup: Bool = false) -> some View { let label: LocalizedStringKey = groupInfo.wrappedValue.businessChat == nil ? "Group preferences" : "Chat preferences" return NavigationLink { diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift index ed40c0592b..9f3de7ac59 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift @@ -135,7 +135,8 @@ struct GroupMemberInfoView: View { } Section(header: Text("Member").foregroundColor(theme.colors.secondary)) { - infoRow("Group", groupInfo.displayName) + let label: LocalizedStringKey = groupInfo.businessChat == nil ? "Group" : "Chat" + infoRow(label, groupInfo.displayName) if let roles = member.canChangeRoleTo(groupInfo: groupInfo) { Picker("Change role", selection: $newRole) { @@ -305,10 +306,15 @@ struct GroupMemberInfoView: View { } func showDirectMessagesProhibitedAlert(_ title: LocalizedStringKey) { + let messageLabel: LocalizedStringKey = ( + groupInfo.businessChat == nil + ? "Direct messages between members are prohibited in this group." + : "Direct messages between members are prohibited in this chat." + ) alert = .someAlert(alert: SomeAlert( alert: mkAlert( title: title, - message: "Direct messages between members are prohibited in this group." + message: messageLabel ), id: "can't message member, direct messages prohibited" )) @@ -537,9 +543,14 @@ struct GroupMemberInfoView: View { } private func removeMemberAlert(_ mem: GroupMember) -> Alert { - Alert( + let label: LocalizedStringKey = ( + groupInfo.businessChat == nil + ? "Member will be removed from group - this cannot be undone!" + : "Member will be removed from chat - this cannot be undone!" + ) + return Alert( title: Text("Remove member?"), - message: Text("Member will be removed from group - this cannot be undone!"), + message: Text(label), primaryButton: .destructive(Text("Remove")) { Task { do { @@ -562,7 +573,15 @@ struct GroupMemberInfoView: View { private func changeMemberRoleAlert(_ mem: GroupMember) -> Alert { Alert( title: Text("Change member role?"), - message: mem.memberCurrent ? Text("Member role will be changed to \"\(newRole.text)\". All group members will be notified.") : Text("Member role will be changed to \"\(newRole.text)\". The member will receive a new invitation."), + message: ( + mem.memberCurrent + ? ( + groupInfo.businessChat == nil + ? Text("Member role will be changed to \"\(newRole.text)\". All group members will be notified.") + : Text("Member role will be changed to \"\(newRole.text)\". All chat members will be notified.") + ) + : Text("Member role will be changed to \"\(newRole.text)\". The member will receive a new invitation.") + ), primaryButton: .default(Text("Change")) { Task { do { @@ -570,7 +589,7 @@ struct GroupMemberInfoView: View { await MainActor.run { _ = chatModel.upsertGroupMember(groupInfo, updatedMember) } - + } catch let error { newRole = mem.memberRole logger.error("apiMemberRole error: \(responseError(error))") diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift index d2a93b9bd1..6c5dad1f74 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift @@ -404,8 +404,9 @@ struct ChatListNavLink: View { } private func deleteGroupAlert(_ groupInfo: GroupInfo) -> Alert { - Alert( - title: Text("Delete group?"), + let label: LocalizedStringKey = groupInfo.businessChat == nil ? "Delete group?" : "Delete chat?" + return Alert( + title: Text(label), message: deleteGroupAlertMessage(groupInfo), primaryButton: .destructive(Text("Delete")) { Task { await deleteChat(chat) } @@ -414,10 +415,6 @@ struct ChatListNavLink: View { ) } - private func deleteGroupAlertMessage(_ groupInfo: GroupInfo) -> Text { - groupInfo.membership.memberCurrent ? Text("Group will be deleted for all members - this cannot be undone!") : Text("Group will be deleted for you - this cannot be undone!") - } - private func clearChatAlert() -> Alert { Alert( title: Text("Clear conversation?"), @@ -441,9 +438,15 @@ struct ChatListNavLink: View { } private func leaveGroupAlert(_ groupInfo: GroupInfo) -> Alert { - Alert( - title: Text("Leave group?"), - message: Text("You will stop receiving messages from this group. Chat history will be preserved."), + let titleLabel: LocalizedStringKey = groupInfo.businessChat == nil ? "Leave group?" : "Leave chat?" + let messageLabel: LocalizedStringKey = ( + groupInfo.businessChat == nil + ? "You will stop receiving messages from this group. Chat history will be preserved." + : "You will stop receiving messages from this chat. Chat history will be preserved." + ) + return Alert( + title: Text(titleLabel), + message: Text(messageLabel), primaryButton: .destructive(Text("Leave")) { Task { await leaveGroup(groupInfo.groupId) } }, From 247d12fa4015ee07210352a766eb74f62e9b8e97 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Tue, 3 Dec 2024 21:44:06 +0400 Subject: [PATCH 19/22] android, desktop: make more texts different for groups and business chats; ios: preferences texts (#5308) --- .../Chat/Group/GroupMemberInfoView.swift | 2 +- .../ar.xcloc/Localized Contents/ar.xliff | 28 +++---- .../bg.xcloc/Localized Contents/bg.xliff | 56 ++++++------- .../bn.xcloc/Localized Contents/bn.xliff | 36 ++++---- .../cs.xcloc/Localized Contents/cs.xliff | 56 ++++++------- .../de.xcloc/Localized Contents/de.xliff | 56 ++++++------- .../el.xcloc/Localized Contents/el.xliff | 28 +++---- .../en.xcloc/Localized Contents/en.xliff | 84 +++++++++---------- .../es.xcloc/Localized Contents/es.xliff | 56 ++++++------- .../fi.xcloc/Localized Contents/fi.xliff | 56 ++++++------- .../fr.xcloc/Localized Contents/fr.xliff | 56 ++++++------- .../he.xcloc/Localized Contents/he.xliff | 44 +++++----- .../hr.xcloc/Localized Contents/hr.xliff | 28 +++---- .../hu.xcloc/Localized Contents/hu.xliff | 56 ++++++------- .../it.xcloc/Localized Contents/it.xliff | 56 ++++++------- .../ja.xcloc/Localized Contents/ja.xliff | 56 ++++++------- .../ko.xcloc/Localized Contents/ko.xliff | 28 +++---- .../lt.xcloc/Localized Contents/lt.xliff | 28 +++---- .../nl.xcloc/Localized Contents/nl.xliff | 56 ++++++------- .../pl.xcloc/Localized Contents/pl.xliff | 56 ++++++------- .../Localized Contents/pt-BR.xliff | 28 +++---- .../pt.xcloc/Localized Contents/pt.xliff | 28 +++---- .../ru.xcloc/Localized Contents/ru.xliff | 56 ++++++------- .../th.xcloc/Localized Contents/th.xliff | 56 ++++++------- .../tr.xcloc/Localized Contents/tr.xliff | 56 ++++++------- .../uk.xcloc/Localized Contents/uk.xliff | 56 ++++++------- .../Localized Contents/zh-Hans.xliff | 56 ++++++------- .../Localized Contents/zh-Hant.xliff | 36 ++++---- apps/ios/SimpleXChat/ChatTypes.swift | 28 +++---- apps/ios/bg.lproj/Localizable.strings | 28 +++---- apps/ios/cs.lproj/Localizable.strings | 24 +++--- apps/ios/de.lproj/Localizable.strings | 28 +++---- apps/ios/es.lproj/Localizable.strings | 28 +++---- apps/ios/fi.lproj/Localizable.strings | 24 +++--- apps/ios/fr.lproj/Localizable.strings | 28 +++---- apps/ios/hu.lproj/Localizable.strings | 28 +++---- apps/ios/it.lproj/Localizable.strings | 28 +++---- apps/ios/ja.lproj/Localizable.strings | 24 +++--- apps/ios/nl.lproj/Localizable.strings | 28 +++---- apps/ios/pl.lproj/Localizable.strings | 28 +++---- apps/ios/ru.lproj/Localizable.strings | 28 +++---- apps/ios/th.lproj/Localizable.strings | 24 +++--- apps/ios/tr.lproj/Localizable.strings | 28 +++---- apps/ios/uk.lproj/Localizable.strings | 28 +++---- apps/ios/zh-Hans.lproj/Localizable.strings | 28 +++---- .../chat/simplex/common/model/SimpleXAPI.kt | 2 +- .../views/chat/group/AddGroupMembersView.kt | 11 ++- .../views/chat/group/GroupChatInfoView.kt | 48 +++++++---- .../views/chat/group/GroupMemberInfoView.kt | 33 +++++--- .../AdvancedNetworkSettings.kt | 4 +- .../commonMain/resources/MR/ar/strings.xml | 2 +- .../commonMain/resources/MR/base/strings.xml | 43 ++++++---- .../commonMain/resources/MR/bg/strings.xml | 2 +- .../commonMain/resources/MR/cs/strings.xml | 2 +- .../commonMain/resources/MR/de/strings.xml | 2 +- .../commonMain/resources/MR/es/strings.xml | 2 +- .../commonMain/resources/MR/fa/strings.xml | 2 +- .../commonMain/resources/MR/fi/strings.xml | 2 +- .../commonMain/resources/MR/fr/strings.xml | 2 +- .../commonMain/resources/MR/hu/strings.xml | 2 +- .../commonMain/resources/MR/in/strings.xml | 2 +- .../commonMain/resources/MR/it/strings.xml | 8 +- .../commonMain/resources/MR/iw/strings.xml | 2 +- .../commonMain/resources/MR/ja/strings.xml | 2 +- .../commonMain/resources/MR/ko/strings.xml | 2 +- .../commonMain/resources/MR/lt/strings.xml | 2 +- .../commonMain/resources/MR/nl/strings.xml | 2 +- .../commonMain/resources/MR/pl/strings.xml | 2 +- .../resources/MR/pt-rBR/strings.xml | 2 +- .../commonMain/resources/MR/pt/strings.xml | 2 +- .../commonMain/resources/MR/ru/strings.xml | 2 +- .../commonMain/resources/MR/th/strings.xml | 2 +- .../commonMain/resources/MR/tr/strings.xml | 2 +- .../commonMain/resources/MR/uk/strings.xml | 2 +- .../commonMain/resources/MR/vi/strings.xml | 2 +- .../resources/MR/zh-rCN/strings.xml | 2 +- .../resources/MR/zh-rTW/strings.xml | 2 +- 77 files changed, 1000 insertions(+), 953 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift index 9f3de7ac59..90d6829d93 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift @@ -308,7 +308,7 @@ struct GroupMemberInfoView: View { func showDirectMessagesProhibitedAlert(_ title: LocalizedStringKey) { let messageLabel: LocalizedStringKey = ( groupInfo.businessChat == nil - ? "Direct messages between members are prohibited in this group." + ? "Direct messages between members are prohibited." : "Direct messages between members are prohibited in this chat." ) alert = .someAlert(alert: SomeAlert( diff --git a/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff b/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff index 53707d108f..ef91bb30fd 100644 --- a/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff +++ b/apps/ios/SimpleX Localizations/ar.xcloc/Localized Contents/ar.xliff @@ -1043,8 +1043,8 @@ Direct messages chat feature
- - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. No comment provided by engineer. @@ -1059,8 +1059,8 @@ Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. No comment provided by engineer. @@ -1423,16 +1423,16 @@ Group members can irreversibly delete sent messages. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. No comment provided by engineer. @@ -1620,8 +1620,8 @@ Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -2855,8 +2855,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index f1e9ee0f39..e483406fe5 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -2384,8 +2384,8 @@ This is your own one-time link! Лични съобщения chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Личните съобщения между членовете са забранени в тази група. No comment provided by engineer. @@ -2423,8 +2423,8 @@ This is your own one-time link! Изчезващите съобщения са забранени в този чат. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Изчезващите съобщения са забранени в тази група. No comment provided by engineer. @@ -3246,8 +3246,8 @@ This is your own one-time link! Файлове и медия chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Файловете и медията са забранени в тази група. No comment provided by engineer. @@ -3502,38 +3502,38 @@ Error: %2$@ Групови линкове No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Членовете на групата могат да добавят реакции към съобщенията. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Членовете на групата могат да изпращат SimpleX линкове. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Членовете на групата могат да изпращат лични съобщения. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Членовете на групата могат да изпращат изчезващи съобщения. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Членовете на групата могат да изпращат файлове и медия. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Членовете на групата могат да изпращат гласови съобщения. No comment provided by engineer. @@ -3944,8 +3944,8 @@ More improvements are coming soon! Необратимото изтриване на съобщения е забранено в този чат. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Необратимото изтриване на съобщения е забранено в тази група. No comment provided by engineer. @@ -4272,8 +4272,8 @@ This is your link for group %@! Реакциите на съобщения са забранени в този чат. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Реакциите на съобщения са забранени в тази група. No comment provided by engineer. @@ -6390,8 +6390,8 @@ Enable in *Network & servers* settings. SimpleX линкове chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. SimpleX линкове са забранени в тази група. No comment provided by engineer. @@ -7427,8 +7427,8 @@ To connect, please ask your contact to create another connection link and check Гласовите съобщения са забранени в този чат. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Гласовите съобщения са забранени в тази група. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/bn.xcloc/Localized Contents/bn.xliff b/apps/ios/SimpleX Localizations/bn.xcloc/Localized Contents/bn.xliff index f7630b9e1f..7002f790df 100644 --- a/apps/ios/SimpleX Localizations/bn.xcloc/Localized Contents/bn.xliff +++ b/apps/ios/SimpleX Localizations/bn.xcloc/Localized Contents/bn.xliff @@ -1247,8 +1247,8 @@ Direct messages chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. No comment provided by engineer. @@ -1267,8 +1267,8 @@ Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. No comment provided by engineer. @@ -1747,24 +1747,24 @@ Group links No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. No comment provided by engineer. Group members can irreversibly delete sent messages. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. No comment provided by engineer. @@ -2016,8 +2016,8 @@ Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -2203,8 +2203,8 @@ Message reactions are prohibited in this chat. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. No comment provided by engineer. @@ -3720,8 +3720,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index a4bff0f321..7efd941d11 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -2309,8 +2309,8 @@ This is your own one-time link! Přímé zprávy chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Přímé zprávy mezi členy jsou v této skupině zakázány. No comment provided by engineer. @@ -2348,8 +2348,8 @@ This is your own one-time link! Mizící zprávy jsou v tomto chatu zakázány. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Mizící zprávy jsou v této skupině zakázány. No comment provided by engineer. @@ -3144,8 +3144,8 @@ This is your own one-time link! Soubory a média chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Soubory a média jsou zakázány v této skupině. No comment provided by engineer. @@ -3389,37 +3389,37 @@ Error: %2$@ Odkazy na skupiny No comment provided by engineer. - - Group members can add message reactions. + + 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. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Členové skupiny mohou posílat přímé zprávy. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Členové skupiny mohou posílat mizící zprávy. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Členové skupiny mohou posílat soubory a média. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Členové skupiny mohou posílat hlasové zprávy. No comment provided by engineer. @@ -3815,8 +3815,8 @@ More improvements are coming soon! Nevratné mazání zpráv je v tomto chatu zakázáno. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Nevratné mazání zpráv je v této skupině zakázáno. No comment provided by engineer. @@ -4132,8 +4132,8 @@ This is your link for group %@! Reakce na zprávy jsou v tomto chatu zakázány. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Reakce na zprávy jsou v této skupině zakázány. No comment provided by engineer. @@ -6188,8 +6188,8 @@ Enable in *Network & servers* settings. Odkazy na SimpleX chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. No comment provided by engineer. @@ -7186,8 +7186,8 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu Hlasové zprávy jsou v tomto chatu zakázány. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Hlasové zprávy jsou v této skupině zakázány. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 3770207e39..afce946eea 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -2500,8 +2500,8 @@ Das ist Ihr eigener Einmal-Link! Direkte Nachrichten chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. In dieser Gruppe sind Direktnachrichten zwischen Mitgliedern nicht erlaubt. No comment provided by engineer. @@ -2540,8 +2540,8 @@ Das ist Ihr eigener Einmal-Link! In diesem Chat sind verschwindende Nachrichten nicht erlaubt. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. In dieser Gruppe sind verschwindende Nachrichten nicht erlaubt. No comment provided by engineer. @@ -3398,8 +3398,8 @@ Das ist Ihr eigener Einmal-Link! Dateien und Medien chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. In dieser Gruppe sind Dateien und Medien nicht erlaubt. No comment provided by engineer. @@ -3672,38 +3672,38 @@ Fehler: %2$@ Gruppen-Links No comment provided by engineer. - - Group members can add message reactions. + + 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. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Gruppenmitglieder können SimpleX-Links senden. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Gruppenmitglieder können Direktnachrichten versenden. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Gruppenmitglieder können verschwindende Nachrichten senden. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Gruppenmitglieder können Dateien und Medien senden. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Gruppenmitglieder können Sprachnachrichten versenden. No comment provided by engineer. @@ -4121,8 +4121,8 @@ Weitere Verbesserungen sind bald verfügbar! In diesem Chat ist das unwiederbringliche Löschen von Nachrichten nicht erlaubt. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. In dieser Gruppe ist das unwiederbringliche Löschen von Nachrichten nicht erlaubt. No comment provided by engineer. @@ -4459,8 +4459,8 @@ Das ist Ihr Link für die Gruppe %@! In diesem Chat sind Reaktionen auf Nachrichten nicht erlaubt. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. In dieser Gruppe sind Reaktionen auf Nachrichten nicht erlaubt. No comment provided by engineer. @@ -6707,8 +6707,8 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. SimpleX-Links chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. In dieser Gruppe sind SimpleX-Links nicht erlaubt. No comment provided by engineer. @@ -7804,8 +7804,8 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s In diesem Chat sind Sprachnachrichten nicht erlaubt. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. In dieser Gruppe sind Sprachnachrichten nicht erlaubt. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/el.xcloc/Localized Contents/el.xliff b/apps/ios/SimpleX Localizations/el.xcloc/Localized Contents/el.xliff index 9a112d12fa..b601d1fa74 100644 --- a/apps/ios/SimpleX Localizations/el.xcloc/Localized Contents/el.xliff +++ b/apps/ios/SimpleX Localizations/el.xcloc/Localized Contents/el.xliff @@ -1124,8 +1124,8 @@ Available in v5.1 Direct messages chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. No comment provided by engineer. @@ -1140,8 +1140,8 @@ Available in v5.1 Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. No comment provided by engineer. @@ -1576,16 +1576,16 @@ Available in v5.1 Group members can irreversibly delete sent messages. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. No comment provided by engineer. @@ -1817,8 +1817,8 @@ Available in v5.1 Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -3333,8 +3333,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. 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 72ad43f136..2301f671a4 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -2506,9 +2506,9 @@ This is your own one-time link! Direct messages chat feature - - Direct messages between members are prohibited in this group. - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. + Direct messages between members are prohibited. No comment provided by engineer. @@ -2546,9 +2546,9 @@ This is your own one-time link! Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. + Disappearing messages are prohibited. No comment provided by engineer. @@ -3404,9 +3404,9 @@ This is your own one-time link! Files and media chat feature - - Files and media are prohibited in this group. - Files and media are prohibited in this group. + + Files and media are prohibited. + Files and media are prohibited. No comment provided by engineer. @@ -3678,39 +3678,39 @@ Error: %2$@ Group links No comment provided by engineer. - - Group members can add message reactions. - Group members can add message reactions. + + Members can add message reactions. + Members can add message reactions. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) + Members can irreversibly delete sent messages. (24 hours) No comment provided by engineer. - - Group members can send SimpleX links. - Group members can send SimpleX links. + + Members can send SimpleX links. + Members can send SimpleX links. No comment provided by engineer. - - Group members can send direct messages. - Group members can send direct messages. + + Members can send direct messages. + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. - Group members can send disappearing messages. + + Members can send disappearing messages. + Members can send disappearing messages. No comment provided by engineer. - - Group members can send files and media. - Group members can send files and media. + + Members can send files and media. + Members can send files and media. No comment provided by engineer. - - Group members can send voice messages. - Group members can send voice messages. + + Members can send voice messages. + Members can send voice messages. No comment provided by engineer. @@ -4127,9 +4127,9 @@ More improvements are coming soon! Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -4465,9 +4465,9 @@ This is your link for group %@! Message reactions are prohibited in this chat. No comment provided by engineer. - - Message reactions are prohibited in this group. - Message reactions are prohibited in this group. + + Message reactions are prohibited. + Message reactions are prohibited. No comment provided by engineer. @@ -6714,9 +6714,9 @@ Enable in *Network & servers* settings. SimpleX links chat feature - - SimpleX links are prohibited in this group. - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. + SimpleX links are prohibited. No comment provided by engineer. @@ -7812,9 +7812,9 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. - Voice messages are prohibited in this group. + + Voice messages are prohibited. + Voice messages are prohibited. No comment provided by engineer. 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 cfffd783d9..647d650698 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -2500,8 +2500,8 @@ This is your own one-time link! Mensajes directos chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Los mensajes directos entre miembros del grupo no están permitidos. No comment provided by engineer. @@ -2540,8 +2540,8 @@ This is your own one-time link! Los mensajes temporales no están permitidos en este chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Los mensajes temporales no están permitidos en este grupo. No comment provided by engineer. @@ -3398,8 +3398,8 @@ This is your own one-time link! Archivos y multimedia chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Los archivos y multimedia no están permitidos en este grupo. No comment provided by engineer. @@ -3672,38 +3672,38 @@ Error: %2$@ Enlaces de grupo No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Los miembros pueden añadir reacciones a los mensajes. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Los miembros del grupo pueden enviar enlaces SimpleX. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Los miembros del grupo pueden enviar mensajes directos. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Los miembros del grupo pueden enviar mensajes temporales. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Los miembros del grupo pueden enviar archivos y multimedia. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Los miembros del grupo pueden enviar mensajes de voz. No comment provided by engineer. @@ -4121,8 +4121,8 @@ More improvements are coming soon! La eliminación irreversible de mensajes no está permitida en este chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. La eliminación irreversible de mensajes no está permitida en este grupo. No comment provided by engineer. @@ -4459,8 +4459,8 @@ This is your link for group %@! Las reacciones a los mensajes no están permitidas en este chat. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Las reacciones a los mensajes no están permitidas en este grupo. No comment provided by engineer. @@ -6707,8 +6707,8 @@ Actívalo en ajustes de *Servidores y Redes*. Enlaces SimpleX chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. Los enlaces SimpleX no se permiten en este grupo. No comment provided by engineer. @@ -7804,8 +7804,8 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Los mensajes de voz no están permitidos en este chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Los mensajes de voz no están permitidos en este grupo. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index 763b502ddb..00996b4a4f 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -2302,8 +2302,8 @@ This is your own one-time link! Yksityisviestit chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Yksityisviestit jäsenten välillä ovat kiellettyjä tässä ryhmässä. No comment provided by engineer. @@ -2341,8 +2341,8 @@ This is your own one-time link! Katoavat viestit ovat kiellettyjä tässä keskustelussa. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Katoavat viestit ovat kiellettyjä tässä ryhmässä. No comment provided by engineer. @@ -3134,8 +3134,8 @@ This is your own one-time link! Tiedostot ja media chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Tiedostot ja media ovat tässä ryhmässä kiellettyjä. No comment provided by engineer. @@ -3379,37 +3379,37 @@ Error: %2$@ Ryhmälinkit No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Ryhmän jäsenet voivat lisätä viestireaktioita. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Ryhmän jäsenet voivat lähettää suoraviestejä. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Ryhmän jäsenet voivat lähettää katoavia viestejä. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Ryhmän jäsenet voivat lähettää ääniviestejä. No comment provided by engineer. @@ -3805,8 +3805,8 @@ More improvements are coming soon! Viestien peruuttamaton poisto on kielletty tässä keskustelussa. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Viestien peruuttamaton poisto on kielletty tässä ryhmässä. No comment provided by engineer. @@ -4122,8 +4122,8 @@ This is your link for group %@! Viestireaktiot ovat kiellettyjä tässä keskustelussa. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Viestireaktiot ovat kiellettyjä tässä ryhmässä. No comment provided by engineer. @@ -6175,8 +6175,8 @@ Enable in *Network & servers* settings. SimpleX-linkit chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. No comment provided by engineer. @@ -7171,8 +7171,8 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja Ääniviestit ovat kiellettyjä tässä keskustelussa. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Ääniviestit ovat kiellettyjä tässä ryhmässä. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index d91ce3c106..9498c255c8 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -2472,8 +2472,8 @@ Il s'agit de votre propre lien unique ! Messages directs chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Les messages directs entre membres sont interdits dans ce groupe. No comment provided by engineer. @@ -2512,8 +2512,8 @@ Il s'agit de votre propre lien unique ! Les messages éphémères sont interdits dans cette discussion. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Les messages éphémères sont interdits dans ce groupe. No comment provided by engineer. @@ -3362,8 +3362,8 @@ Il s'agit de votre propre lien unique ! Fichiers et médias chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Les fichiers et les médias sont interdits dans ce groupe. No comment provided by engineer. @@ -3632,38 +3632,38 @@ Erreur : %2$@ Liens de groupe No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Les membres du groupe peuvent ajouter des réactions aux messages. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Les membres du groupe peuvent envoyer des liens SimpleX. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Les membres du groupe peuvent envoyer des messages directs. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Les membres du groupes peuvent envoyer des messages éphémères. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Les membres du groupe peuvent envoyer des fichiers et des médias. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Les membres du groupe peuvent envoyer des messages vocaux. No comment provided by engineer. @@ -4079,8 +4079,8 @@ D'autres améliorations sont à venir ! La suppression irréversible de message est interdite dans ce chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. La suppression irréversible de messages est interdite dans ce groupe. No comment provided by engineer. @@ -4417,8 +4417,8 @@ Voici votre lien pour le groupe %@ ! Les réactions aux messages sont interdites dans ce chat. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Les réactions aux messages sont interdites dans ce groupe. No comment provided by engineer. @@ -6633,8 +6633,8 @@ Activez-le dans les paramètres *Réseau et serveurs*. Liens SimpleX chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. Les liens SimpleX sont interdits dans ce groupe. No comment provided by engineer. @@ -7712,8 +7712,8 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Les messages vocaux sont interdits dans ce chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Les messages vocaux sont interdits dans ce groupe. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/he.xcloc/Localized Contents/he.xliff b/apps/ios/SimpleX Localizations/he.xcloc/Localized Contents/he.xliff index 813eebc01a..08f46bb056 100644 --- a/apps/ios/SimpleX Localizations/he.xcloc/Localized Contents/he.xliff +++ b/apps/ios/SimpleX Localizations/he.xcloc/Localized Contents/he.xliff @@ -1386,8 +1386,8 @@ Available in v5.1 הודעות ישירות chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. הודעות ישירות בין חברי קבוצה אסורות בקבוצה זו. No comment provided by engineer. @@ -1406,8 +1406,8 @@ Available in v5.1 הודעות נעלמות אסורות בצ׳אט זה. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. הודעות נעלמות אסורות בקבוצה זו. No comment provided by engineer. @@ -1951,18 +1951,18 @@ Available in v5.1 חברי הקבוצה יכולים למחוק באופן בלתי הפיך הודעות שנשלחו. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. חברי הקבוצה יכולים לשלוח הודעות ישירות. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. חברי הקבוצה יכולים לשלוח הודעות נעלמות. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. חברי הקבוצה יכולים לשלוח הודעות קוליות. No comment provided by engineer. @@ -2252,8 +2252,8 @@ Available in v5.1 מחיקה בלתי הפיכה של הודעות אסורה בצ׳אט זה. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. מחיקה בלתי הפיכה של הודעות אסורה בקבוצה זו. No comment provided by engineer. @@ -3859,8 +3859,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. @@ -4958,8 +4958,8 @@ SimpleX servers cannot see your profile. נמחק No comment provided by engineer. - - Files and media are prohibited in this group. + + Files and media are prohibited. קבצים ומדיה אסורים בקבוצה זו. No comment provided by engineer. @@ -5018,13 +5018,13 @@ SimpleX servers cannot see your profile. הזמן חברים No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. חברי הקבוצה יכולים להוסיף תגובות אמוג׳י להודעות. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. חברי הקבוצה יכולים לשלוח קבצים ומדיה. No comment provided by engineer. @@ -5222,8 +5222,8 @@ SimpleX servers cannot see your profile. תגובות אמוג׳י להודעות אסורות בצ׳אט זה. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. תגובות אמוג׳י להודעות אסורות בקבוצה זו. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff b/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff index 7ae670185c..2fd96e3492 100644 --- a/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff +++ b/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff @@ -1034,8 +1034,8 @@ Direct messages chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. No comment provided by engineer. @@ -1050,8 +1050,8 @@ Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. No comment provided by engineer. @@ -1414,16 +1414,16 @@ Group members can irreversibly delete sent messages. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. No comment provided by engineer. @@ -1611,8 +1611,8 @@ Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -2842,8 +2842,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff index 44750dfbb2..a17a6430d1 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -2500,8 +2500,8 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Közvetlen üzenetek chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. A közvetlen üzenetek küldése a tagok között le van tiltva ebben a csoportban. No comment provided by engineer. @@ -2540,8 +2540,8 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Az eltűnő üzenetek küldése le van tiltva ebben a csevegésben. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Az eltűnő üzenetek küldése le van tiltva ebben a csoportban. No comment provided by engineer. @@ -3398,8 +3398,8 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Fájlok és médiatartalmak chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. A fájlok- és a médiatartalmak le vannak tiltva ebben a csoportban. No comment provided by engineer. @@ -3672,38 +3672,38 @@ Hiba: %2$@ Csoporthivatkozások No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Csoporttagok üzenetreakciókat adhatnak hozzá. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. A csoport tagjai küldhetnek SimpleX-hivatkozásokat. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. A csoport tagjai küldhetnek eltűnő üzeneteket. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. A csoport tagjai küldhetnek fájlokat és médiatartalmakat. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. A csoport tagjai küldhetnek hangüzeneteket. No comment provided by engineer. @@ -4121,8 +4121,8 @@ További fejlesztések hamarosan! Az üzenetek végleges törlése le van tiltva ebben a csevegésben. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Az üzenetek végleges törlése le van tiltva ebben a csoportban. No comment provided by engineer. @@ -4459,8 +4459,8 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Az üzenetreakciók küldése le van tiltva ebben a csevegésben. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Az üzenetreakciók küldése le van tiltva ebben a csoportban. No comment provided by engineer. @@ -6707,8 +6707,8 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. SimpleX-hivatkozások chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. A SimpleX-hivatkozások küldése le van tiltva ebben a csoportban. No comment provided by engineer. @@ -7804,8 +7804,8 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc A hangüzenetek küldése le van tiltva ebben a csevegésben. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. A hangüzenetek küldése le van tiltva ebben a csoportban. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index 8e54ba40dd..0992a1f6bc 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -2500,8 +2500,8 @@ Questo è il tuo link una tantum! Messaggi diretti chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. I messaggi diretti tra i membri sono vietati in questo gruppo. No comment provided by engineer. @@ -2540,8 +2540,8 @@ Questo è il tuo link una tantum! I messaggi a tempo sono vietati in questa chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. I messaggi a tempo sono vietati in questo gruppo. No comment provided by engineer. @@ -3398,8 +3398,8 @@ Questo è il tuo link una tantum! File e multimediali chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. File e contenuti multimediali sono vietati in questo gruppo. No comment provided by engineer. @@ -3672,38 +3672,38 @@ Errore: %2$@ Link del gruppo No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. I membri del gruppo possono aggiungere reazioni ai messaggi. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. I membri del gruppo possono inviare link di Simplex. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. I membri del gruppo possono inviare messaggi diretti. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. I membri del gruppo possono inviare messaggi a tempo. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. I membri del gruppo possono inviare file e contenuti multimediali. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. I membri del gruppo possono inviare messaggi vocali. No comment provided by engineer. @@ -4121,8 +4121,8 @@ Altri miglioramenti sono in arrivo! L'eliminazione irreversibile dei messaggi è vietata in questa chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. L'eliminazione irreversibile dei messaggi è vietata in questo gruppo. No comment provided by engineer. @@ -4459,8 +4459,8 @@ Questo è il tuo link per il gruppo %@! Le reazioni ai messaggi sono vietate in questa chat. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Le reazioni ai messaggi sono vietate in questo gruppo. No comment provided by engineer. @@ -6707,8 +6707,8 @@ Attivalo nelle impostazioni *Rete e server*. Link di SimpleX chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. I link di SimpleX sono vietati in questo gruppo. No comment provided by engineer. @@ -7804,8 +7804,8 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e I messaggi vocali sono vietati in questa chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. I messaggi vocali sono vietati in questo gruppo. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff index 1a5ffdd680..32d2db371b 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -2348,8 +2348,8 @@ This is your own one-time link! ダイレクトメッセージ chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. このグループではメンバー間のダイレクトメッセージが使用禁止です。 No comment provided by engineer. @@ -2387,8 +2387,8 @@ This is your own one-time link! このチャットでは消えるメッセージが使用禁止です。 No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. このグループでは消えるメッセージが使用禁止です。 No comment provided by engineer. @@ -3181,8 +3181,8 @@ This is your own one-time link! ファイルとメディア chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. このグループでは、ファイルとメディアは禁止されています。 No comment provided by engineer. @@ -3426,37 +3426,37 @@ Error: %2$@ グループのリンク No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. グループメンバーはメッセージへのリアクションを追加できます。 No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) グループのメンバーがメッセージを完全削除することができます。(24時間) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. グループのメンバーがダイレクトメッセージを送信できます。 No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. グループのメンバーが消えるメッセージを送信できます。 No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. グループメンバーはファイルやメディアを送信できます。 No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. グループのメンバーが音声メッセージを送信できます。 No comment provided by engineer. @@ -3852,8 +3852,8 @@ More improvements are coming soon! このチャットではメッセージの完全削除が使用禁止です。 No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. このグループではメッセージの完全削除が使用禁止です。 No comment provided by engineer. @@ -4168,8 +4168,8 @@ This is your link for group %@! このチャットではメッセージへのリアクションは禁止されています。 No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. このグループではメッセージへのリアクションは禁止されています。 No comment provided by engineer. @@ -6217,8 +6217,8 @@ Enable in *Network & servers* settings. SimpleXリンク chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. No comment provided by engineer. @@ -7213,8 +7213,8 @@ To connect, please ask your contact to create another connection link and check このチャットでは音声メッセージが使用禁止です。 No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. このグループでは音声メッセージが使用禁止です。 No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/ko.xcloc/Localized Contents/ko.xliff b/apps/ios/SimpleX Localizations/ko.xcloc/Localized Contents/ko.xliff index ac9d83e24b..9aaa83afc3 100644 --- a/apps/ios/SimpleX Localizations/ko.xcloc/Localized Contents/ko.xliff +++ b/apps/ios/SimpleX Localizations/ko.xcloc/Localized Contents/ko.xliff @@ -1009,8 +1009,8 @@ Direct messages chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. No comment provided by engineer. @@ -1025,8 +1025,8 @@ Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. No comment provided by engineer. @@ -1417,16 +1417,16 @@ Group members can irreversibly delete sent messages. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. No comment provided by engineer. @@ -1638,8 +1638,8 @@ Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -2964,8 +2964,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff b/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff index e16f585da8..54a713478f 100644 --- a/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff +++ b/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff @@ -1029,8 +1029,8 @@ Direct messages chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. No comment provided by engineer. @@ -1045,8 +1045,8 @@ Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. No comment provided by engineer. @@ -1413,16 +1413,16 @@ Group members can irreversibly delete sent messages. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. No comment provided by engineer. @@ -1610,8 +1610,8 @@ Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -2869,8 +2869,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 50b3fdae3e..b9cba70c3a 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -2500,8 +2500,8 @@ Dit is uw eigen eenmalige link! Directe berichten chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Directe berichten tussen leden zijn verboden in deze groep. No comment provided by engineer. @@ -2540,8 +2540,8 @@ Dit is uw eigen eenmalige link! Verdwijnende berichten zijn verboden in dit gesprek. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Verdwijnende berichten zijn verboden in deze groep. No comment provided by engineer. @@ -3398,8 +3398,8 @@ Dit is uw eigen eenmalige link! Bestanden en media chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Bestanden en media zijn verboden in deze groep. No comment provided by engineer. @@ -3672,38 +3672,38 @@ Fout: %2$@ Groep links No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Groepsleden kunnen bericht reacties toevoegen. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Groepsleden kunnen SimpleX-links verzenden. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Groepsleden kunnen directe berichten sturen. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Groepsleden kunnen verdwijnende berichten sturen. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Groepsleden kunnen bestanden en media verzenden. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Groepsleden kunnen spraak berichten verzenden. No comment provided by engineer. @@ -4121,8 +4121,8 @@ Binnenkort meer verbeteringen! Het onomkeerbaar verwijderen van berichten is verboden in dit gesprek. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Het onomkeerbaar verwijderen van berichten is verboden in deze groep. No comment provided by engineer. @@ -4459,8 +4459,8 @@ Dit is jouw link voor groep %@! Reacties op berichten zijn verboden in deze chat. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Reacties op berichten zijn verboden in deze groep. No comment provided by engineer. @@ -6707,8 +6707,8 @@ Schakel dit in in *Netwerk en servers*-instellingen. SimpleX links chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. SimpleX-links zijn in deze groep verboden. No comment provided by engineer. @@ -7804,8 +7804,8 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Spraak berichten zijn verboden in deze chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Spraak berichten zijn verboden in deze groep. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index 0095b5e031..bdfe502952 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -2465,8 +2465,8 @@ To jest twój jednorazowy link! Bezpośrednie wiadomości chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Bezpośrednie wiadomości między członkami są zabronione w tej grupie. No comment provided by engineer. @@ -2505,8 +2505,8 @@ To jest twój jednorazowy link! Znikające wiadomości są zabronione na tym czacie. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Znikające wiadomości są zabronione w tej grupie. No comment provided by engineer. @@ -3355,8 +3355,8 @@ To jest twój jednorazowy link! Pliki i media chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Pliki i media są zabronione w tej grupie. No comment provided by engineer. @@ -3624,38 +3624,38 @@ Błąd: %2$@ Linki grupowe No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Członkowie grupy mogą dodawać reakcje wiadomości. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Członkowie grupy mogą wysyłać linki SimpleX. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Członkowie grupy mogą wysyłać bezpośrednie wiadomości. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Członkowie grupy mogą wysyłać znikające wiadomości. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Członkowie grupy mogą wysyłać pliki i media. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Członkowie grupy mogą wysyłać wiadomości głosowe. No comment provided by engineer. @@ -4069,8 +4069,8 @@ More improvements are coming soon! Nieodwracalne usuwanie wiadomości jest na tym czacie zabronione. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Nieodwracalne usuwanie wiadomości jest w tej grupie zabronione. No comment provided by engineer. @@ -4407,8 +4407,8 @@ To jest twój link do grupy %@! Reakcje wiadomości są zabronione na tym czacie. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Reakcje wiadomości są zabronione w tej grupie. No comment provided by engineer. @@ -6623,8 +6623,8 @@ Włącz w ustawianiach *Sieć i serwery* . Linki SimpleX chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. Linki SimpleX są zablokowane na tej grupie. No comment provided by engineer. @@ -7699,8 +7699,8 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Wiadomości głosowe są zabronione na tym czacie. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Wiadomości głosowe są zabronione w tej grupie. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/pt-BR.xcloc/Localized Contents/pt-BR.xliff b/apps/ios/SimpleX Localizations/pt-BR.xcloc/Localized Contents/pt-BR.xliff index 40fc2cd4b3..9badf9c2e4 100644 --- a/apps/ios/SimpleX Localizations/pt-BR.xcloc/Localized Contents/pt-BR.xliff +++ b/apps/ios/SimpleX Localizations/pt-BR.xcloc/Localized Contents/pt-BR.xliff @@ -1204,8 +1204,8 @@ Mensagens diretas chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Mensagens diretas entre membros são proibidas neste grupo. No comment provided by engineer. @@ -1224,8 +1224,8 @@ Mensagens temporárias são proibidas nesse chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Mensagens que temporárias são proibidas neste grupo. No comment provided by engineer. @@ -1638,18 +1638,18 @@ Os membros do grupo podem excluir mensagens enviadas de forma irreversível. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Os membros do grupo podem enviar DMs. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Os membros do grupo podem enviar mensagens que desaparecem. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Os membros do grupo podem enviar mensagens de voz. No comment provided by engineer. @@ -1873,8 +1873,8 @@ A exclusão irreversível de mensagens é proibida neste chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. A exclusão irreversível de mensagens é proibida neste grupo. No comment provided by engineer. @@ -3269,8 +3269,8 @@ Para se conectar, peça ao seu contato para criar outro link de conexão e verif Mensagens de voz são proibidas neste chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Mensagens de voz são proibidas neste grupo. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff b/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff index e20181e4f7..de1787bdad 100644 --- a/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff +++ b/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff @@ -1227,8 +1227,8 @@ Available in v5.1 Direct messages chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. No comment provided by engineer. @@ -1243,8 +1243,8 @@ Available in v5.1 Disappearing messages are prohibited in this chat. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. No comment provided by engineer. @@ -1679,16 +1679,16 @@ Available in v5.1 Group members can irreversibly delete sent messages. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. No comment provided by engineer. @@ -1920,8 +1920,8 @@ Available in v5.1 Irreversible message deletion is prohibited in this chat. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. No comment provided by engineer. @@ -3436,8 +3436,8 @@ To connect, please ask your contact to create another connection link and check Voice messages are prohibited in this chat. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index e7230dbcb2..6d57734259 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -2473,8 +2473,8 @@ This is your own one-time link! Прямые сообщения chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Прямые сообщения между членами группы запрещены. No comment provided by engineer. @@ -2513,8 +2513,8 @@ This is your own one-time link! Исчезающие сообщения запрещены в этом чате. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Исчезающие сообщения запрещены в этой группе. No comment provided by engineer. @@ -3363,8 +3363,8 @@ This is your own one-time link! Файлы и медиа chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Файлы и медиа запрещены в этой группе. No comment provided by engineer. @@ -3633,38 +3633,38 @@ Error: %2$@ Ссылки групп No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Члены группы могут добавлять реакции на сообщения. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Члены группы могут необратимо удалять отправленные сообщения. (24 часа) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Члены группы могут отправлять ссылки SimpleX. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Члены группы могут посылать прямые сообщения. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Члены группы могут посылать исчезающие сообщения. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Члены группы могут слать файлы и медиа. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Члены группы могут отправлять голосовые сообщения. No comment provided by engineer. @@ -4079,8 +4079,8 @@ More improvements are coming soon! Необратимое удаление сообщений запрещено в этом чате. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Необратимое удаление сообщений запрещено в этой группе. No comment provided by engineer. @@ -4417,8 +4417,8 @@ This is your link for group %@! Реакции на сообщения в этом чате запрещены. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Реакции на сообщения запрещены в этой группе. No comment provided by engineer. @@ -6633,8 +6633,8 @@ Enable in *Network & servers* settings. SimpleX ссылки chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. Ссылки SimpleX запрещены в этой группе. No comment provided by engineer. @@ -7712,8 +7712,8 @@ To connect, please ask your contact to create another connection link and check Голосовые сообщения запрещены в этом чате. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Голосовые сообщения запрещены в этой группе. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index f3097bf8f2..cec1637438 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -2290,8 +2290,8 @@ This is your own one-time link! ข้อความโดยตรง chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. ข้อความโดยตรงระหว่างสมาชิกเป็นสิ่งต้องห้ามในกลุ่มนี้ No comment provided by engineer. @@ -2329,8 +2329,8 @@ This is your own one-time link! ข้อความที่จะหายไปหลังเวลาที่กําหนด (disappearing message) เป็นสิ่งต้องห้ามในแชทนี้ No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. ข้อความที่จะหายไปหลังเวลาที่กําหนด (disappearing message) เป็นสิ่งต้องห้ามในกลุ่มนี้ No comment provided by engineer. @@ -3119,8 +3119,8 @@ This is your own one-time link! ไฟล์และสื่อ chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. ไฟล์และสื่อเป็นสิ่งต้องห้ามในกลุ่มนี้ No comment provided by engineer. @@ -3364,37 +3364,37 @@ Error: %2$@ ลิงค์กลุ่ม No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้ No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้ No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้ No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. สมาชิกกลุ่มสามารถส่งไฟล์และสื่อ No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. สมาชิกกลุ่มสามารถส่งข้อความเสียง No comment provided by engineer. @@ -3788,8 +3788,8 @@ More improvements are coming soon! ไม่สามารถลบข้อความแบบแก้ไขไม่ได้ในแชทนี้ No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. การลบข้อความแบบแก้ไขไม่ได้เป็นสิ่งที่ห้ามในกลุ่มนี้ No comment provided by engineer. @@ -4105,8 +4105,8 @@ This is your link for group %@! ห้ามแสดงปฏิกิริยาบนข้อความในแชทนี้ No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. ปฏิกิริยาบนข้อความเป็นสิ่งต้องห้ามในกลุ่มนี้ No comment provided by engineer. @@ -6149,8 +6149,8 @@ Enable in *Network & servers* settings. ลิงก์ SimpleX chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. No comment provided by engineer. @@ -7141,8 +7141,8 @@ To connect, please ask your contact to create another connection link and check ห้ามส่งข้อความเสียงในแชทนี้ No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. ข้อความเสียงเป็นสิ่งต้องห้ามในกลุ่มนี้ No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index eca1c67b85..8ab4b2419d 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -2472,8 +2472,8 @@ Bu senin kendi tek kullanımlık bağlantın! Doğrudan mesajlar chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. Bu grupta üyeler arasında direkt mesajlaşma yasaktır. No comment provided by engineer. @@ -2512,8 +2512,8 @@ Bu senin kendi tek kullanımlık bağlantın! Kaybolan mesajlar bu sohbette yasaklanmış. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. Kaybolan mesajlar bu grupta yasaklanmış. No comment provided by engineer. @@ -3362,8 +3362,8 @@ Bu senin kendi tek kullanımlık bağlantın! Dosyalar ve medya chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Dosyalar ve medya bu grupta yasaklandı. No comment provided by engineer. @@ -3632,38 +3632,38 @@ Hata: %2$@ Grup bağlantıları No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Grup üyeleri mesaj tepkileri ekleyebilir. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Grup üyeleri SimpleX bağlantıları gönderebilir. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Grup üyeleri doğrudan mesajlar gönderebilir. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Grup üyeleri kaybolan mesajlar gönderebilir. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Grup üyeleri dosyalar ve medya gönderebilir. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Grup üyeleri sesli mesajlar gönderebilir. No comment provided by engineer. @@ -4079,8 +4079,8 @@ Daha fazla iyileştirme yakında geliyor! Bu sohbette geri döndürülemez mesaj silme yasaktır. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. Bu grupta geri döndürülemez mesaj silme yasaktır. No comment provided by engineer. @@ -4417,8 +4417,8 @@ Bu senin grup için bağlantın %@! Mesaj tepkileri bu sohbette yasaklandı. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Mesaj tepkileri bu grupta yasaklandı. No comment provided by engineer. @@ -6633,8 +6633,8 @@ Enable in *Network & servers* settings. SimpleX bağlantıları chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. SimpleX bağlantıları bu grupta yasaklandı. No comment provided by engineer. @@ -7712,8 +7712,8 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Bu sohbette sesli mesajlar yasaktır. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Bu grupta sesli mesajlar yasaktır. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 0d05edbfbe..801b3d0c79 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -2500,8 +2500,8 @@ This is your own one-time link! Прямі повідомлення chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. У цій групі заборонені прямі повідомлення між учасниками. No comment provided by engineer. @@ -2540,8 +2540,8 @@ This is your own one-time link! Зникаючі повідомлення в цьому чаті заборонені. No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. У цій групі заборонено зникаючі повідомлення. No comment provided by engineer. @@ -3398,8 +3398,8 @@ This is your own one-time link! Файли і медіа chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. Файли та медіа в цій групі заборонені. No comment provided by engineer. @@ -3672,38 +3672,38 @@ Error: %2$@ Групові посилання No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. Учасники групи можуть додавати реакції на повідомлення. No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години) No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. Учасники групи можуть надсилати посилання SimpleX. No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. Учасники групи можуть надсилати прямі повідомлення. No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. Учасники групи можуть надсилати зникаючі повідомлення. No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. Учасники групи можуть надсилати файли та медіа. No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. Учасники групи можуть надсилати голосові повідомлення. No comment provided by engineer. @@ -4121,8 +4121,8 @@ More improvements are coming soon! У цьому чаті заборонено безповоротне видалення повідомлень. No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. У цій групі заборонено безповоротне видалення повідомлень. No comment provided by engineer. @@ -4459,8 +4459,8 @@ This is your link for group %@! Реакції на повідомлення в цьому чаті заборонені. No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. Реакції на повідомлення в цій групі заборонені. No comment provided by engineer. @@ -6707,8 +6707,8 @@ Enable in *Network & servers* settings. Посилання SimpleX chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. У цій групі заборонені посилання на SimpleX. No comment provided by engineer. @@ -7804,8 +7804,8 @@ To connect, please ask your contact to create another connection link and check Голосові повідомлення в цьому чаті заборонені. No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. Голосові повідомлення в цій групі заборонені. No comment provided by engineer. 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 300a33d7b4..d9cb36f971 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 @@ -2455,8 +2455,8 @@ This is your own one-time link! 私信 chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. 此群中禁止成员之间私信。 No comment provided by engineer. @@ -2495,8 +2495,8 @@ This is your own one-time link! 此聊天中禁止显示限时消息。 No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. 该组禁止限时消息。 No comment provided by engineer. @@ -3337,8 +3337,8 @@ This is your own one-time link! 文件和媒体 chat feature - - Files and media are prohibited in this group. + + Files and media are prohibited. 此群组中禁止文件和媒体。 No comment provided by engineer. @@ -3602,38 +3602,38 @@ Error: %2$@ 群组链接 No comment provided by engineer. - - Group members can add message reactions. + + Members can add message reactions. 群组成员可以添加信息回应。 No comment provided by engineer. - - Group members can irreversibly delete sent messages. (24 hours) + + Members can irreversibly delete sent messages. (24 hours) 群组成员可以不可撤回地删除已发送的消息 No comment provided by engineer. - - Group members can send SimpleX links. + + Members can send SimpleX links. 群成员可发送 SimpleX 链接。 No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. 群组成员可以私信。 No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. 群组成员可以发送限时消息。 No comment provided by engineer. - - Group members can send files and media. + + Members can send files and media. 群组成员可以发送文件和媒体。 No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. 群组成员可以发送语音消息。 No comment provided by engineer. @@ -4046,8 +4046,8 @@ More improvements are coming soon! 此聊天中禁止不可撤回消息移除。 No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. 此群组中禁止不可撤回消息移除。 No comment provided by engineer. @@ -4384,8 +4384,8 @@ This is your link for group %@! 该聊天禁用了消息回应。 No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. 该群组禁用了消息回应。 No comment provided by engineer. @@ -6580,8 +6580,8 @@ Enable in *Network & servers* settings. SimpleX 链接 chat feature - - SimpleX links are prohibited in this group. + + SimpleX links are prohibited. 此群禁止 SimpleX 链接。 No comment provided by engineer. @@ -7649,8 +7649,8 @@ To connect, please ask your contact to create another connection link and check 语音信息在此聊天中被禁止。 No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. 语音信息在该群组中被禁用。 No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff b/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff index da4f843974..93b9725131 100644 --- a/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hant.xcloc/Localized Contents/zh-Hant.xliff @@ -1173,8 +1173,8 @@ 私訊 chat feature - - Direct messages between members are prohibited in this group. + + Direct messages between members are prohibited. 私訊群組內的成員於這個群組內是禁用的。 No comment provided by engineer. @@ -1193,8 +1193,8 @@ 自動銷毀訊息已被禁止於此聊天室。 No comment provided by engineer. - - Disappearing messages are prohibited in this group. + + Disappearing messages are prohibited. 自動銷毀訊息於這個群組內是禁用的。 No comment provided by engineer. @@ -1618,18 +1618,18 @@ 群組內的成員可以不可逆地刪除訊息。 No comment provided by engineer. - - Group members can send direct messages. + + Members can send direct messages. 群組內的成員可以私訊群組內的成員。 No comment provided by engineer. - - Group members can send disappearing messages. + + Members can send disappearing messages. 群組內的成員可以傳送自動銷毀的訊息。 No comment provided by engineer. - - Group members can send voice messages. + + Members can send voice messages. 群組內的成員可以傳送語音訊息。 No comment provided by engineer. @@ -1864,8 +1864,8 @@ 不可逆地刪除訊息於這個聊天室內是禁用的。 No comment provided by engineer. - - Irreversible message deletion is prohibited in this group. + + Irreversible message deletion is prohibited. 不可逆地刪除訊息於這個群組內是禁用的。 No comment provided by engineer. @@ -3316,8 +3316,8 @@ To connect, please ask your contact to create another connection link and check 語音訊息於這個聊天窒是禁用的。 No comment provided by engineer. - - Voice messages are prohibited in this group. + + Voice messages are prohibited. 語音訊息於這個群組內是禁用的。 No comment provided by engineer. @@ -5513,8 +5513,8 @@ It can happen because of some bug or when the connection is compromised.啟用自毀密碼 set passcode view - - Group members can add message reactions. + + Members can add message reactions. 群組內的成員可以新增訊息互動。 No comment provided by engineer. @@ -5689,8 +5689,8 @@ It can happen because of some bug or when the connection is compromised.已移除在 No comment provided by engineer. - - Message reactions are prohibited in this group. + + Message reactions are prohibited. 訊息互動於這個群組內是禁用的。 No comment provided by engineer. diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index b2532c1dc1..5379cce236 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -821,38 +821,38 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { switch self { case .timedMessages: switch enabled { - case .on: return "Group members can send disappearing messages." - case .off: return "Disappearing messages are prohibited in this group." + case .on: return "Members can send disappearing messages." + case .off: return "Disappearing messages are prohibited." } case .directMessages: switch enabled { - case .on: return "Group members can send direct messages." - case .off: return "Direct messages between members are prohibited in this group." + case .on: return "Members can send direct messages." + case .off: return "Direct messages between members are prohibited." } case .fullDelete: switch enabled { - case .on: return "Group members can irreversibly delete sent messages. (24 hours)" - case .off: return "Irreversible message deletion is prohibited in this group." + case .on: return "Members can irreversibly delete sent messages. (24 hours)" + case .off: return "Irreversible message deletion is prohibited." } case .reactions: switch enabled { - case .on: return "Group members can add message reactions." - case .off: return "Message reactions are prohibited in this group." + case .on: return "Members can add message reactions." + case .off: return "Message reactions are prohibited." } case .voice: switch enabled { - case .on: return "Group members can send voice messages." - case .off: return "Voice messages are prohibited in this group." + case .on: return "Members can send voice messages." + case .off: return "Voice messages are prohibited." } case .files: switch enabled { - case .on: return "Group members can send files and media." - case .off: return "Files and media are prohibited in this group." + case .on: return "Members can send files and media." + case .off: return "Files and media are prohibited." } case .simplexLinks: switch enabled { - case .on: return "Group members can send SimpleX links." - case .off: return "SimpleX links are prohibited in this group." + case .on: return "Members can send SimpleX links." + case .off: return "SimpleX links are prohibited." } case .history: switch enabled { diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index aa955d7a7a..a63ca87a99 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -1299,7 +1299,7 @@ "Direct messages" = "Лични съобщения"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Личните съобщения между членовете са забранени в тази група."; +"Direct messages between members are prohibited." = "Личните съобщения между членовете са забранени в тази група."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Деактивиране (запазване на промените)"; @@ -1323,7 +1323,7 @@ "Disappearing messages are prohibited in this chat." = "Изчезващите съобщения са забранени в този чат."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Изчезващите съобщения са забранени в тази група."; +"Disappearing messages are prohibited." = "Изчезващите съобщения са забранени в тази група."; /* No comment provided by engineer. */ "Disappears at" = "Изчезва в"; @@ -1786,7 +1786,7 @@ "Files and media" = "Файлове и медия"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Файловете и медията са забранени в тази група."; +"Files and media are prohibited." = "Файловете и медията са забранени в тази група."; /* No comment provided by engineer. */ "Files and media not allowed" = "Файлове и медия не са разрешени"; @@ -1906,25 +1906,25 @@ "Group links" = "Групови линкове"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Членовете на групата могат да добавят реакции към съобщенията."; +"Members can add message reactions." = "Членовете на групата могат да добавят реакции към съобщенията."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Членовете на групата могат да изпращат лични съобщения."; +"Members can send direct messages." = "Членовете на групата могат да изпращат лични съобщения."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Членовете на групата могат да изпращат изчезващи съобщения."; +"Members can send disappearing messages." = "Членовете на групата могат да изпращат изчезващи съобщения."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Членовете на групата могат да изпращат файлове и медия."; +"Members can send files and media." = "Членовете на групата могат да изпращат файлове и медия."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Членовете на групата могат да изпращат SimpleX линкове."; +"Members can send SimpleX links." = "Членовете на групата могат да изпращат SimpleX линкове."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Членовете на групата могат да изпращат гласови съобщения."; +"Members can send voice messages." = "Членовете на групата могат да изпращат гласови съобщения."; /* notification */ "Group message:" = "Групово съобщение:"; @@ -2203,7 +2203,7 @@ "Irreversible message deletion is prohibited in this chat." = "Необратимото изтриване на съобщения е забранено в този чат."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Необратимото изтриване на съобщения е забранено в тази група."; +"Irreversible message deletion is prohibited." = "Необратимото изтриване на съобщения е забранено в тази група."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Позволява да имате много анонимни връзки без споделени данни между тях в един чат профил ."; @@ -2392,7 +2392,7 @@ "Message reactions are prohibited in this chat." = "Реакциите на съобщения са забранени в този чат."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Реакциите на съобщения са забранени в тази група."; +"Message reactions are prohibited." = "Реакциите на съобщения са забранени в тази група."; /* notification */ "message received" = "получено съобщение"; @@ -3450,7 +3450,7 @@ "SimpleX links" = "SimpleX линкове"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "SimpleX линкове са забранени в тази група."; +"SimpleX links are prohibited." = "SimpleX линкове са забранени в тази група."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "SimpleX линковете не са разрешени"; @@ -3987,7 +3987,7 @@ "Voice messages are prohibited in this chat." = "Гласовите съобщения са забранени в този чат."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Гласовите съобщения са забранени в тази група."; +"Voice messages are prohibited." = "Гласовите съобщения са забранени в тази група."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Гласовите съобщения не са разрешени"; diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index 9e96aafcfd..a150c2427f 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -1059,7 +1059,7 @@ "Direct messages" = "Přímé zprávy"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Přímé zprávy mezi členy jsou v této skupině zakázány."; +"Direct messages between members are prohibited." = "Přímé zprávy mezi členy jsou v této skupině zakázány."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Vypnout (zachovat přepsání)"; @@ -1083,7 +1083,7 @@ "Disappearing messages are prohibited in this chat." = "Mizící zprávy jsou v tomto chatu zakázány."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Mizící zprávy jsou v této skupině zakázány."; +"Disappearing messages are prohibited." = "Mizící zprávy jsou v této skupině zakázány."; /* No comment provided by engineer. */ "Disappears at" = "Zmizí v"; @@ -1461,7 +1461,7 @@ "Files and media" = "Soubory a média"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Soubory a média jsou zakázány v této skupině."; +"Files and media are prohibited." = "Soubory a média jsou zakázány v této skupině."; /* No comment provided by engineer. */ "Files and media prohibited!" = "Soubory a média jsou zakázány!"; @@ -1545,22 +1545,22 @@ "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."; +"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. (24 hours)" = "Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Členové skupiny mohou posílat přímé zprávy."; +"Members can send direct messages." = "Členové skupiny mohou posílat přímé zprávy."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Členové skupiny mohou posílat mizící zprávy."; +"Members can send disappearing messages." = "Členové skupiny mohou posílat mizící zprávy."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Členové skupiny mohou posílat soubory a média."; +"Members can send files and media." = "Členové skupiny mohou posílat soubory a média."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Členové skupiny mohou posílat hlasové zprávy."; +"Members can send voice messages." = "Členové skupiny mohou posílat hlasové zprávy."; /* notification */ "Group message:" = "Skupinová zpráva:"; @@ -1794,7 +1794,7 @@ "Irreversible message deletion is prohibited in this chat." = "Nevratné mazání zpráv je v tomto chatu zakázáno."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Nevratné mazání zpráv je v této skupině zakázáno."; +"Irreversible message deletion is prohibited." = "Nevratné mazání zpráv je v této skupině zakázáno."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Umožňuje mít v jednom profilu chatu mnoho anonymních spojení bez jakýchkoli sdílených údajů mezi nimi."; @@ -1950,7 +1950,7 @@ "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."; +"Message reactions are prohibited." = "Reakce na zprávy jsou v této skupině zakázány."; /* notification */ "message received" = "zpráva přijata"; @@ -3206,7 +3206,7 @@ "Voice messages are prohibited in this chat." = "Hlasové zprávy jsou v tomto chatu zakázány."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Hlasové zprávy jsou v této skupině zakázány."; +"Voice messages are prohibited." = "Hlasové zprávy jsou v této skupině zakázány."; /* No comment provided by engineer. */ "Voice messages prohibited!" = "Hlasové zprávy jsou zakázány!"; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 1e92d094b4..6231000330 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -1656,7 +1656,7 @@ "Direct messages" = "Direkte Nachrichten"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "In dieser Gruppe sind Direktnachrichten zwischen Mitgliedern nicht erlaubt."; +"Direct messages between members are prohibited." = "In dieser Gruppe sind Direktnachrichten zwischen Mitgliedern nicht erlaubt."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Deaktivieren (vorgenommene Einstellungen bleiben erhalten)"; @@ -1683,7 +1683,7 @@ "Disappearing messages are prohibited in this chat." = "In diesem Chat sind verschwindende Nachrichten nicht erlaubt."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "In dieser Gruppe sind verschwindende Nachrichten nicht erlaubt."; +"Disappearing messages are prohibited." = "In dieser Gruppe sind verschwindende Nachrichten nicht erlaubt."; /* No comment provided by engineer. */ "Disappears at" = "Verschwindet um"; @@ -2254,7 +2254,7 @@ "Files and media" = "Dateien und Medien"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "In dieser Gruppe sind Dateien und Medien nicht erlaubt."; +"Files and media are prohibited." = "In dieser Gruppe sind Dateien und Medien nicht erlaubt."; /* No comment provided by engineer. */ "Files and media not allowed" = "Dateien und Medien sind nicht erlaubt"; @@ -2425,25 +2425,25 @@ "Group links" = "Gruppen-Links"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Gruppenmitglieder können eine Reaktion auf Nachrichten geben."; +"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. (24 hours)" = "Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Gruppenmitglieder können Direktnachrichten versenden."; +"Members can send direct messages." = "Gruppenmitglieder können Direktnachrichten versenden."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Gruppenmitglieder können verschwindende Nachrichten senden."; +"Members can send disappearing messages." = "Gruppenmitglieder können verschwindende Nachrichten senden."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Gruppenmitglieder können Dateien und Medien senden."; +"Members can send files and media." = "Gruppenmitglieder können Dateien und Medien senden."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Gruppenmitglieder können SimpleX-Links senden."; +"Members can send SimpleX links." = "Gruppenmitglieder können SimpleX-Links senden."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Gruppenmitglieder können Sprachnachrichten versenden."; +"Members can send voice messages." = "Gruppenmitglieder können Sprachnachrichten versenden."; /* notification */ "Group message:" = "Grppennachricht:"; @@ -2746,7 +2746,7 @@ "Irreversible message deletion is prohibited in this chat." = "In diesem Chat ist das unwiederbringliche Löschen von Nachrichten nicht erlaubt."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "In dieser Gruppe ist das unwiederbringliche Löschen von Nachrichten nicht erlaubt."; +"Irreversible message deletion is prohibited." = "In dieser Gruppe ist das unwiederbringliche Löschen von Nachrichten nicht erlaubt."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Er ermöglicht mehrere anonyme Verbindungen in einem einzigen Chat-Profil ohne Daten zwischen diesen zu teilen."; @@ -2968,7 +2968,7 @@ "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."; +"Message reactions are prohibited." = "In dieser Gruppe sind Reaktionen auf Nachrichten nicht erlaubt."; /* notification */ "message received" = "Nachricht empfangen"; @@ -4416,7 +4416,7 @@ "SimpleX links" = "SimpleX-Links"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "In dieser Gruppe sind SimpleX-Links nicht erlaubt."; +"SimpleX links are prohibited." = "In dieser Gruppe sind SimpleX-Links nicht erlaubt."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "SimpleX-Links sind nicht erlaubt"; @@ -5148,7 +5148,7 @@ "Voice messages are prohibited in this chat." = "In diesem Chat sind Sprachnachrichten nicht erlaubt."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "In dieser Gruppe sind Sprachnachrichten nicht erlaubt."; +"Voice messages are prohibited." = "In dieser Gruppe sind Sprachnachrichten nicht erlaubt."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Sprachnachrichten sind nicht erlaubt"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index d02497515e..d15e6d75ce 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -1656,7 +1656,7 @@ "Direct messages" = "Mensajes directos"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Los mensajes directos entre miembros del grupo no están permitidos."; +"Direct messages between members are prohibited." = "Los mensajes directos entre miembros del grupo no están permitidos."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Desactivar (conservando anulaciones)"; @@ -1683,7 +1683,7 @@ "Disappearing messages are prohibited in this chat." = "Los mensajes temporales no están permitidos en este chat."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Los mensajes temporales no están permitidos en este grupo."; +"Disappearing messages are prohibited." = "Los mensajes temporales no están permitidos en este grupo."; /* No comment provided by engineer. */ "Disappears at" = "Desaparecerá"; @@ -2254,7 +2254,7 @@ "Files and media" = "Archivos y multimedia"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Los archivos y multimedia no están permitidos en este grupo."; +"Files and media are prohibited." = "Los archivos y multimedia no están permitidos en este grupo."; /* No comment provided by engineer. */ "Files and media not allowed" = "Archivos y multimedia no permitidos"; @@ -2425,25 +2425,25 @@ "Group links" = "Enlaces de grupo"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Los miembros pueden añadir reacciones a los mensajes."; +"Members can add message reactions." = "Los miembros pueden añadir reacciones a los mensajes."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Los miembros del grupo pueden enviar mensajes directos."; +"Members can send direct messages." = "Los miembros del grupo pueden enviar mensajes directos."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Los miembros del grupo pueden enviar mensajes temporales."; +"Members can send disappearing messages." = "Los miembros del grupo pueden enviar mensajes temporales."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Los miembros del grupo pueden enviar archivos y multimedia."; +"Members can send files and media." = "Los miembros del grupo pueden enviar archivos y multimedia."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Los miembros del grupo pueden enviar enlaces SimpleX."; +"Members can send SimpleX links." = "Los miembros del grupo pueden enviar enlaces SimpleX."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Los miembros del grupo pueden enviar mensajes de voz."; +"Members can send voice messages." = "Los miembros del grupo pueden enviar mensajes de voz."; /* notification */ "Group message:" = "Mensaje de grupo:"; @@ -2746,7 +2746,7 @@ "Irreversible message deletion is prohibited in this chat." = "La eliminación irreversible de mensajes no está permitida en este chat."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "La eliminación irreversible de mensajes no está permitida en este grupo."; +"Irreversible message deletion is prohibited." = "La eliminación irreversible de mensajes no está permitida en este grupo."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Permite tener varias conexiones anónimas sin datos compartidos entre estas dentro del mismo perfil."; @@ -2968,7 +2968,7 @@ "Message reactions are prohibited in this chat." = "Las reacciones a los mensajes no están permitidas en este chat."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Las reacciones a los mensajes no están permitidas en este grupo."; +"Message reactions are prohibited." = "Las reacciones a los mensajes no están permitidas en este grupo."; /* notification */ "message received" = "mensaje recibido"; @@ -4416,7 +4416,7 @@ "SimpleX links" = "Enlaces SimpleX"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "Los enlaces SimpleX no se permiten en este grupo."; +"SimpleX links are prohibited." = "Los enlaces SimpleX no se permiten en este grupo."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "Enlaces SimpleX no permitidos"; @@ -5148,7 +5148,7 @@ "Voice messages are prohibited in this chat." = "Los mensajes de voz no están permitidos en este chat."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Los mensajes de voz no están permitidos en este grupo."; +"Voice messages are prohibited." = "Los mensajes de voz no están permitidos en este grupo."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Mensajes de voz no permitidos"; diff --git a/apps/ios/fi.lproj/Localizable.strings b/apps/ios/fi.lproj/Localizable.strings index 6f28ddd3b0..8946be02b4 100644 --- a/apps/ios/fi.lproj/Localizable.strings +++ b/apps/ios/fi.lproj/Localizable.strings @@ -1041,7 +1041,7 @@ "Direct messages" = "Yksityisviestit"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Yksityisviestit jäsenten välillä ovat kiellettyjä tässä ryhmässä."; +"Direct messages between members are prohibited." = "Yksityisviestit jäsenten välillä ovat kiellettyjä tässä ryhmässä."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Poista käytöstä (pidä ohitukset)"; @@ -1065,7 +1065,7 @@ "Disappearing messages are prohibited in this chat." = "Katoavat viestit ovat kiellettyjä tässä keskustelussa."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Katoavat viestit ovat kiellettyjä tässä ryhmässä."; +"Disappearing messages are prohibited." = "Katoavat viestit ovat kiellettyjä tässä ryhmässä."; /* No comment provided by engineer. */ "Disappears at" = "Katoaa klo"; @@ -1437,7 +1437,7 @@ "Files and media" = "Tiedostot ja media"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Tiedostot ja media ovat tässä ryhmässä kiellettyjä."; +"Files and media are prohibited." = "Tiedostot ja media ovat tässä ryhmässä kiellettyjä."; /* No comment provided by engineer. */ "Files and media prohibited!" = "Tiedostot ja media kielletty!"; @@ -1521,22 +1521,22 @@ "Group links" = "Ryhmälinkit"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Ryhmän jäsenet voivat lisätä viestireaktioita."; +"Members can add message reactions." = "Ryhmän jäsenet voivat lisätä viestireaktioita."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Ryhmän jäsenet voivat lähettää suoraviestejä."; +"Members can send direct messages." = "Ryhmän jäsenet voivat lähettää suoraviestejä."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Ryhmän jäsenet voivat lähettää katoavia viestejä."; +"Members can send disappearing messages." = "Ryhmän jäsenet voivat lähettää katoavia viestejä."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa."; +"Members can send files and media." = "Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Ryhmän jäsenet voivat lähettää ääniviestejä."; +"Members can send voice messages." = "Ryhmän jäsenet voivat lähettää ääniviestejä."; /* notification */ "Group message:" = "Ryhmäviesti:"; @@ -1770,7 +1770,7 @@ "Irreversible message deletion is prohibited in this chat." = "Viestien peruuttamaton poisto on kielletty tässä keskustelussa."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Viestien peruuttamaton poisto on kielletty tässä ryhmässä."; +"Irreversible message deletion is prohibited." = "Viestien peruuttamaton poisto on kielletty tässä ryhmässä."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Se mahdollistaa useiden nimettömien yhteyksien muodostamisen yhdessä keskusteluprofiilissa ilman, että niiden välillä on jaettuja tietoja."; @@ -1926,7 +1926,7 @@ "Message reactions are prohibited in this chat." = "Viestireaktiot ovat kiellettyjä tässä keskustelussa."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Viestireaktiot ovat kiellettyjä tässä ryhmässä."; +"Message reactions are prohibited." = "Viestireaktiot ovat kiellettyjä tässä ryhmässä."; /* notification */ "message received" = "viesti vastaanotettu"; @@ -3164,7 +3164,7 @@ "Voice messages are prohibited in this chat." = "Ääniviestit ovat kiellettyjä tässä keskustelussa."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Ääniviestit ovat kiellettyjä tässä ryhmässä."; +"Voice messages are prohibited." = "Ääniviestit ovat kiellettyjä tässä ryhmässä."; /* No comment provided by engineer. */ "Voice messages prohibited!" = "Ääniviestit kielletty!"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 273fb76d6e..f1a8e97758 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -1572,7 +1572,7 @@ "Direct messages" = "Messages directs"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Les messages directs entre membres sont interdits dans ce groupe."; +"Direct messages between members are prohibited." = "Les messages directs entre membres sont interdits dans ce groupe."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Désactiver (conserver les remplacements)"; @@ -1599,7 +1599,7 @@ "Disappearing messages are prohibited in this chat." = "Les messages éphémères sont interdits dans cette discussion."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Les messages éphémères sont interdits dans ce groupe."; +"Disappearing messages are prohibited." = "Les messages éphémères sont interdits dans ce groupe."; /* No comment provided by engineer. */ "Disappears at" = "Disparaîtra le"; @@ -2146,7 +2146,7 @@ "Files and media" = "Fichiers et médias"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Les fichiers et les médias sont interdits dans ce groupe."; +"Files and media are prohibited." = "Les fichiers et les médias sont interdits dans ce groupe."; /* No comment provided by engineer. */ "Files and media not allowed" = "Fichiers et médias non autorisés"; @@ -2302,25 +2302,25 @@ "Group links" = "Liens de groupe"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Les membres du groupe peuvent ajouter des réactions aux messages."; +"Members can add message reactions." = "Les membres du groupe peuvent ajouter des réactions aux messages."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Les membres du groupe peuvent envoyer des messages directs."; +"Members can send direct messages." = "Les membres du groupe peuvent envoyer des messages directs."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Les membres du groupes peuvent envoyer des messages éphémères."; +"Members can send disappearing messages." = "Les membres du groupes peuvent envoyer des messages éphémères."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Les membres du groupe peuvent envoyer des fichiers et des médias."; +"Members can send files and media." = "Les membres du groupe peuvent envoyer des fichiers et des médias."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Les membres du groupe peuvent envoyer des liens SimpleX."; +"Members can send SimpleX links." = "Les membres du groupe peuvent envoyer des liens SimpleX."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Les membres du groupe peuvent envoyer des messages vocaux."; +"Members can send voice messages." = "Les membres du groupe peuvent envoyer des messages vocaux."; /* notification */ "Group message:" = "Message du groupe :"; @@ -2617,7 +2617,7 @@ "Irreversible message deletion is prohibited in this chat." = "La suppression irréversible de message est interdite dans ce chat."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "La suppression irréversible de messages est interdite dans ce groupe."; +"Irreversible message deletion is prohibited." = "La suppression irréversible de messages est interdite dans ce groupe."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Cela permet d'avoir plusieurs connections anonymes sans aucune données partagées entre elles sur un même profil."; @@ -2839,7 +2839,7 @@ "Message reactions are prohibited in this chat." = "Les réactions aux messages sont interdites dans ce chat."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Les réactions aux messages sont interdites dans ce groupe."; +"Message reactions are prohibited." = "Les réactions aux messages sont interdites dans ce groupe."; /* notification */ "message received" = "message reçu"; @@ -4191,7 +4191,7 @@ "SimpleX links" = "Liens SimpleX"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "Les liens SimpleX sont interdits dans ce groupe."; +"SimpleX links are prohibited." = "Les liens SimpleX sont interdits dans ce groupe."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "Les liens SimpleX ne sont pas autorisés"; @@ -4872,7 +4872,7 @@ "Voice messages are prohibited in this chat." = "Les messages vocaux sont interdits dans ce chat."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Les messages vocaux sont interdits dans ce groupe."; +"Voice messages are prohibited." = "Les messages vocaux sont interdits dans ce groupe."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Les messages vocaux ne sont pas autorisés"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index 9103f4baf3..c1008ad30b 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -1656,7 +1656,7 @@ "Direct messages" = "Közvetlen üzenetek"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "A közvetlen üzenetek küldése a tagok között le van tiltva ebben a csoportban."; +"Direct messages between members are prohibited." = "A közvetlen üzenetek küldése a tagok között le van tiltva ebben a csoportban."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Letiltás (felülírások megtartásával)"; @@ -1683,7 +1683,7 @@ "Disappearing messages are prohibited in this chat." = "Az eltűnő üzenetek küldése le van tiltva ebben a csevegésben."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Az eltűnő üzenetek küldése le van tiltva ebben a csoportban."; +"Disappearing messages are prohibited." = "Az eltűnő üzenetek küldése le van tiltva ebben a csoportban."; /* No comment provided by engineer. */ "Disappears at" = "Eltűnik ekkor:"; @@ -2254,7 +2254,7 @@ "Files and media" = "Fájlok és médiatartalmak"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "A fájlok- és a médiatartalmak le vannak tiltva ebben a csoportban."; +"Files and media are prohibited." = "A fájlok- és a médiatartalmak le vannak tiltva ebben a csoportban."; /* No comment provided by engineer. */ "Files and media not allowed" = "A fájlok- és médiatartalmak nincsenek engedélyezve"; @@ -2425,25 +2425,25 @@ "Group links" = "Csoporthivatkozások"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Csoporttagok üzenetreakciókat adhatnak hozzá."; +"Members can add message reactions." = "Csoporttagok üzenetreakciókat adhatnak hozzá."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra)"; +"Members can irreversibly delete sent messages. (24 hours)" = "A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket."; +"Members can send direct messages." = "A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "A csoport tagjai küldhetnek eltűnő üzeneteket."; +"Members can send disappearing messages." = "A csoport tagjai küldhetnek eltűnő üzeneteket."; /* No comment provided by engineer. */ -"Group members can send files and media." = "A csoport tagjai küldhetnek fájlokat és médiatartalmakat."; +"Members can send files and media." = "A csoport tagjai küldhetnek fájlokat és médiatartalmakat."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "A csoport tagjai küldhetnek SimpleX-hivatkozásokat."; +"Members can send SimpleX links." = "A csoport tagjai küldhetnek SimpleX-hivatkozásokat."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "A csoport tagjai küldhetnek hangüzeneteket."; +"Members can send voice messages." = "A csoport tagjai küldhetnek hangüzeneteket."; /* notification */ "Group message:" = "Csoport üzenet:"; @@ -2746,7 +2746,7 @@ "Irreversible message deletion is prohibited in this chat." = "Az üzenetek végleges törlése le van tiltva ebben a csevegésben."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Az üzenetek végleges törlése le van tiltva ebben a csoportban."; +"Irreversible message deletion is prohibited." = "Az üzenetek végleges törlése le van tiltva ebben a csoportban."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Lehetővé teszi, hogy egyetlen csevegőprofilon belül több névtelen kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük."; @@ -2968,7 +2968,7 @@ "Message reactions are prohibited in this chat." = "Az üzenetreakciók küldése le van tiltva ebben a csevegésben."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Az üzenetreakciók küldése le van tiltva ebben a csoportban."; +"Message reactions are prohibited." = "Az üzenetreakciók küldése le van tiltva ebben a csoportban."; /* notification */ "message received" = "üzenet érkezett"; @@ -4416,7 +4416,7 @@ "SimpleX links" = "SimpleX-hivatkozások"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "A SimpleX-hivatkozások küldése le van tiltva ebben a csoportban."; +"SimpleX links are prohibited." = "A SimpleX-hivatkozások küldése le van tiltva ebben a csoportban."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "A SimpleX-hivatkozások küldése le van tiltva"; @@ -5148,7 +5148,7 @@ "Voice messages are prohibited in this chat." = "A hangüzenetek küldése le van tiltva ebben a csevegésben."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "A hangüzenetek küldése le van tiltva ebben a csoportban."; +"Voice messages are prohibited." = "A hangüzenetek küldése le van tiltva ebben a csoportban."; /* No comment provided by engineer. */ "Voice messages not allowed" = "A hangüzenetek küldése le van tiltva"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 9abd660f0c..42f399b710 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -1656,7 +1656,7 @@ "Direct messages" = "Messaggi diretti"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "I messaggi diretti tra i membri sono vietati in questo gruppo."; +"Direct messages between members are prohibited." = "I messaggi diretti tra i membri sono vietati in questo gruppo."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Disattiva (mantieni sostituzioni)"; @@ -1683,7 +1683,7 @@ "Disappearing messages are prohibited in this chat." = "I messaggi a tempo sono vietati in questa chat."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "I messaggi a tempo sono vietati in questo gruppo."; +"Disappearing messages are prohibited." = "I messaggi a tempo sono vietati in questo gruppo."; /* No comment provided by engineer. */ "Disappears at" = "Scompare il"; @@ -2254,7 +2254,7 @@ "Files and media" = "File e multimediali"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "File e contenuti multimediali sono vietati in questo gruppo."; +"Files and media are prohibited." = "File e contenuti multimediali sono vietati in questo gruppo."; /* No comment provided by engineer. */ "Files and media not allowed" = "File e multimediali non consentiti"; @@ -2425,25 +2425,25 @@ "Group links" = "Link del gruppo"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "I membri del gruppo possono aggiungere reazioni ai messaggi."; +"Members can add message reactions." = "I membri del gruppo possono aggiungere reazioni ai messaggi."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)"; +"Members can irreversibly delete sent messages. (24 hours)" = "I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "I membri del gruppo possono inviare messaggi diretti."; +"Members can send direct messages." = "I membri del gruppo possono inviare messaggi diretti."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "I membri del gruppo possono inviare messaggi a tempo."; +"Members can send disappearing messages." = "I membri del gruppo possono inviare messaggi a tempo."; /* No comment provided by engineer. */ -"Group members can send files and media." = "I membri del gruppo possono inviare file e contenuti multimediali."; +"Members can send files and media." = "I membri del gruppo possono inviare file e contenuti multimediali."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "I membri del gruppo possono inviare link di Simplex."; +"Members can send SimpleX links." = "I membri del gruppo possono inviare link di Simplex."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "I membri del gruppo possono inviare messaggi vocali."; +"Members can send voice messages." = "I membri del gruppo possono inviare messaggi vocali."; /* notification */ "Group message:" = "Messaggio del gruppo:"; @@ -2746,7 +2746,7 @@ "Irreversible message deletion is prohibited in this chat." = "L'eliminazione irreversibile dei messaggi è vietata in questa chat."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "L'eliminazione irreversibile dei messaggi è vietata in questo gruppo."; +"Irreversible message deletion is prohibited." = "L'eliminazione irreversibile dei messaggi è vietata in questo gruppo."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Permette di avere molte connessioni anonime senza dati condivisi tra di loro in un unico profilo di chat."; @@ -2968,7 +2968,7 @@ "Message reactions are prohibited in this chat." = "Le reazioni ai messaggi sono vietate in questa chat."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Le reazioni ai messaggi sono vietate in questo gruppo."; +"Message reactions are prohibited." = "Le reazioni ai messaggi sono vietate in questo gruppo."; /* notification */ "message received" = "messaggio ricevuto"; @@ -4416,7 +4416,7 @@ "SimpleX links" = "Link di SimpleX"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "I link di SimpleX sono vietati in questo gruppo."; +"SimpleX links are prohibited." = "I link di SimpleX sono vietati in questo gruppo."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "Link di SimpleX non consentiti"; @@ -5148,7 +5148,7 @@ "Voice messages are prohibited in this chat." = "I messaggi vocali sono vietati in questa chat."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "I messaggi vocali sono vietati in questo gruppo."; +"Voice messages are prohibited." = "I messaggi vocali sono vietati in questo gruppo."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Messaggi vocali non consentiti"; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 5bcd706702..019472b804 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -1179,7 +1179,7 @@ "Direct messages" = "ダイレクトメッセージ"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "このグループではメンバー間のダイレクトメッセージが使用禁止です。"; +"Direct messages between members are prohibited." = "このグループではメンバー間のダイレクトメッセージが使用禁止です。"; /* No comment provided by engineer. */ "Disable (keep overrides)" = "無効にする(設定の優先を維持)"; @@ -1203,7 +1203,7 @@ "Disappearing messages are prohibited in this chat." = "このチャットでは消えるメッセージが使用禁止です。"; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "このグループでは消えるメッセージが使用禁止です。"; +"Disappearing messages are prohibited." = "このグループでは消えるメッセージが使用禁止です。"; /* No comment provided by engineer. */ "Disappears at" = "に消えます"; @@ -1578,7 +1578,7 @@ "Files and media" = "ファイルとメディア"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "このグループでは、ファイルとメディアは禁止されています。"; +"Files and media are prohibited." = "このグループでは、ファイルとメディアは禁止されています。"; /* No comment provided by engineer. */ "Files and media prohibited!" = "ファイルとメディアは禁止されています!"; @@ -1662,22 +1662,22 @@ "Group links" = "グループのリンク"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "グループメンバーはメッセージへのリアクションを追加できます。"; +"Members can add message reactions." = "グループメンバーはメッセージへのリアクションを追加できます。"; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "グループのメンバーがメッセージを完全削除することができます。(24時間)"; +"Members can irreversibly delete sent messages. (24 hours)" = "グループのメンバーがメッセージを完全削除することができます。(24時間)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "グループのメンバーがダイレクトメッセージを送信できます。"; +"Members can send direct messages." = "グループのメンバーがダイレクトメッセージを送信できます。"; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "グループのメンバーが消えるメッセージを送信できます。"; +"Members can send disappearing messages." = "グループのメンバーが消えるメッセージを送信できます。"; /* No comment provided by engineer. */ -"Group members can send files and media." = "グループメンバーはファイルやメディアを送信できます。"; +"Members can send files and media." = "グループメンバーはファイルやメディアを送信できます。"; /* No comment provided by engineer. */ -"Group members can send voice messages." = "グループのメンバーが音声メッセージを送信できます。"; +"Members can send voice messages." = "グループのメンバーが音声メッセージを送信できます。"; /* notification */ "Group message:" = "グループメッセージ:"; @@ -1911,7 +1911,7 @@ "Irreversible message deletion is prohibited in this chat." = "このチャットではメッセージの完全削除が使用禁止です。"; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "このグループではメッセージの完全削除が使用禁止です。"; +"Irreversible message deletion is prohibited." = "このグループではメッセージの完全削除が使用禁止です。"; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "これにより単一のチャット プロファイル内で、データを共有せずに多数の匿名の接続をすることができます。"; @@ -2064,7 +2064,7 @@ "Message reactions are prohibited in this chat." = "このチャットではメッセージへのリアクションは禁止されています。"; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "このグループではメッセージへのリアクションは禁止されています。"; +"Message reactions are prohibited." = "このグループではメッセージへのリアクションは禁止されています。"; /* notification */ "message received" = "メッセージを受信"; @@ -3290,7 +3290,7 @@ "Voice messages are prohibited in this chat." = "このチャットでは音声メッセージが使用禁止です。"; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "このグループでは音声メッセージが使用禁止です。"; +"Voice messages are prohibited." = "このグループでは音声メッセージが使用禁止です。"; /* No comment provided by engineer. */ "Voice messages prohibited!" = "音声メッセージは使用禁止です!"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index fadec1b09b..652ccdf63c 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -1656,7 +1656,7 @@ "Direct messages" = "Directe berichten"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Directe berichten tussen leden zijn verboden in deze groep."; +"Direct messages between members are prohibited." = "Directe berichten tussen leden zijn verboden in deze groep."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Uitschakelen (overschrijvingen behouden)"; @@ -1683,7 +1683,7 @@ "Disappearing messages are prohibited in this chat." = "Verdwijnende berichten zijn verboden in dit gesprek."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Verdwijnende berichten zijn verboden in deze groep."; +"Disappearing messages are prohibited." = "Verdwijnende berichten zijn verboden in deze groep."; /* No comment provided by engineer. */ "Disappears at" = "Verdwijnt op"; @@ -2254,7 +2254,7 @@ "Files and media" = "Bestanden en media"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Bestanden en media zijn verboden in deze groep."; +"Files and media are prohibited." = "Bestanden en media zijn verboden in deze groep."; /* No comment provided by engineer. */ "Files and media not allowed" = "Bestanden en media niet toegestaan"; @@ -2425,25 +2425,25 @@ "Group links" = "Groep links"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Groepsleden kunnen bericht reacties toevoegen."; +"Members can add message reactions." = "Groepsleden kunnen bericht reacties toevoegen."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Groepsleden kunnen directe berichten sturen."; +"Members can send direct messages." = "Groepsleden kunnen directe berichten sturen."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Groepsleden kunnen verdwijnende berichten sturen."; +"Members can send disappearing messages." = "Groepsleden kunnen verdwijnende berichten sturen."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Groepsleden kunnen bestanden en media verzenden."; +"Members can send files and media." = "Groepsleden kunnen bestanden en media verzenden."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Groepsleden kunnen SimpleX-links verzenden."; +"Members can send SimpleX links." = "Groepsleden kunnen SimpleX-links verzenden."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Groepsleden kunnen spraak berichten verzenden."; +"Members can send voice messages." = "Groepsleden kunnen spraak berichten verzenden."; /* notification */ "Group message:" = "Groep bericht:"; @@ -2746,7 +2746,7 @@ "Irreversible message deletion is prohibited in this chat." = "Het onomkeerbaar verwijderen van berichten is verboden in dit gesprek."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Het onomkeerbaar verwijderen van berichten is verboden in deze groep."; +"Irreversible message deletion is prohibited." = "Het onomkeerbaar verwijderen van berichten is verboden in deze groep."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chatprofiel."; @@ -2968,7 +2968,7 @@ "Message reactions are prohibited in this chat." = "Reacties op berichten zijn verboden in deze chat."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Reacties op berichten zijn verboden in deze groep."; +"Message reactions are prohibited." = "Reacties op berichten zijn verboden in deze groep."; /* notification */ "message received" = "bericht ontvangen"; @@ -4416,7 +4416,7 @@ "SimpleX links" = "SimpleX links"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "SimpleX-links zijn in deze groep verboden."; +"SimpleX links are prohibited." = "SimpleX-links zijn in deze groep verboden."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "SimpleX-links zijn niet toegestaan"; @@ -5148,7 +5148,7 @@ "Voice messages are prohibited in this chat." = "Spraak berichten zijn verboden in deze chat."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Spraak berichten zijn verboden in deze groep."; +"Voice messages are prohibited." = "Spraak berichten zijn verboden in deze groep."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Spraakberichten niet toegestaan"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index 6650b1d8c8..04279064ee 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -1551,7 +1551,7 @@ "Direct messages" = "Bezpośrednie wiadomości"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Bezpośrednie wiadomości między członkami są zabronione w tej grupie."; +"Direct messages between members are prohibited." = "Bezpośrednie wiadomości między członkami są zabronione w tej grupie."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Wyłącz (zachowaj nadpisania)"; @@ -1578,7 +1578,7 @@ "Disappearing messages are prohibited in this chat." = "Znikające wiadomości są zabronione na tym czacie."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Znikające wiadomości są zabronione w tej grupie."; +"Disappearing messages are prohibited." = "Znikające wiadomości są zabronione w tej grupie."; /* No comment provided by engineer. */ "Disappears at" = "Znika o"; @@ -2125,7 +2125,7 @@ "Files and media" = "Pliki i media"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Pliki i media są zabronione w tej grupie."; +"Files and media are prohibited." = "Pliki i media są zabronione w tej grupie."; /* No comment provided by engineer. */ "Files and media not allowed" = "Pliki i multimedia nie są dozwolone"; @@ -2278,25 +2278,25 @@ "Group links" = "Linki grupowe"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Członkowie grupy mogą dodawać reakcje wiadomości."; +"Members can add message reactions." = "Członkowie grupy mogą dodawać reakcje wiadomości."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Członkowie grupy mogą wysyłać bezpośrednie wiadomości."; +"Members can send direct messages." = "Członkowie grupy mogą wysyłać bezpośrednie wiadomości."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Członkowie grupy mogą wysyłać znikające wiadomości."; +"Members can send disappearing messages." = "Członkowie grupy mogą wysyłać znikające wiadomości."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Członkowie grupy mogą wysyłać pliki i media."; +"Members can send files and media." = "Członkowie grupy mogą wysyłać pliki i media."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Członkowie grupy mogą wysyłać linki SimpleX."; +"Members can send SimpleX links." = "Członkowie grupy mogą wysyłać linki SimpleX."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Członkowie grupy mogą wysyłać wiadomości głosowe."; +"Members can send voice messages." = "Członkowie grupy mogą wysyłać wiadomości głosowe."; /* notification */ "Group message:" = "Wiadomość grupowa:"; @@ -2590,7 +2590,7 @@ "Irreversible message deletion is prohibited in this chat." = "Nieodwracalne usuwanie wiadomości jest na tym czacie zabronione."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Nieodwracalne usuwanie wiadomości jest w tej grupie zabronione."; +"Irreversible message deletion is prohibited." = "Nieodwracalne usuwanie wiadomości jest w tej grupie zabronione."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "To pozwala na posiadanie wielu anonimowych połączeń bez żadnych wspólnych danych między nimi w pojedynczym profilu czatu."; @@ -2812,7 +2812,7 @@ "Message reactions are prohibited in this chat." = "Reakcje wiadomości są zabronione na tym czacie."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Reakcje wiadomości są zabronione w tej grupie."; +"Message reactions are prohibited." = "Reakcje wiadomości są zabronione w tej grupie."; /* notification */ "message received" = "wiadomość otrzymana"; @@ -4164,7 +4164,7 @@ "SimpleX links" = "Linki SimpleX"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "Linki SimpleX są zablokowane na tej grupie."; +"SimpleX links are prohibited." = "Linki SimpleX są zablokowane na tej grupie."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "Linki SimpleX są niedozwolone"; @@ -4836,7 +4836,7 @@ "Voice messages are prohibited in this chat." = "Wiadomości głosowe są zabronione na tym czacie."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Wiadomości głosowe są zabronione w tej grupie."; +"Voice messages are prohibited." = "Wiadomości głosowe są zabronione w tej grupie."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Wiadomości głosowe są niedozwolone"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 6db8181e8d..bb7ec81ace 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -1575,7 +1575,7 @@ "Direct messages" = "Прямые сообщения"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Прямые сообщения между членами группы запрещены."; +"Direct messages between members are prohibited." = "Прямые сообщения между членами группы запрещены."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Выключить (кроме исключений)"; @@ -1602,7 +1602,7 @@ "Disappearing messages are prohibited in this chat." = "Исчезающие сообщения запрещены в этом чате."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Исчезающие сообщения запрещены в этой группе."; +"Disappearing messages are prohibited." = "Исчезающие сообщения запрещены в этой группе."; /* No comment provided by engineer. */ "Disappears at" = "Исчезает"; @@ -2149,7 +2149,7 @@ "Files and media" = "Файлы и медиа"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Файлы и медиа запрещены в этой группе."; +"Files and media are prohibited." = "Файлы и медиа запрещены в этой группе."; /* No comment provided by engineer. */ "Files and media not allowed" = "Файлы и медиа не разрешены"; @@ -2305,25 +2305,25 @@ "Group links" = "Ссылки групп"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Члены группы могут добавлять реакции на сообщения."; +"Members can add message reactions." = "Члены группы могут добавлять реакции на сообщения."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Члены группы могут необратимо удалять отправленные сообщения. (24 часа)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Члены группы могут необратимо удалять отправленные сообщения. (24 часа)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Члены группы могут посылать прямые сообщения."; +"Members can send direct messages." = "Члены группы могут посылать прямые сообщения."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Члены группы могут посылать исчезающие сообщения."; +"Members can send disappearing messages." = "Члены группы могут посылать исчезающие сообщения."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Члены группы могут слать файлы и медиа."; +"Members can send files and media." = "Члены группы могут слать файлы и медиа."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Члены группы могут отправлять ссылки SimpleX."; +"Members can send SimpleX links." = "Члены группы могут отправлять ссылки SimpleX."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Члены группы могут отправлять голосовые сообщения."; +"Members can send voice messages." = "Члены группы могут отправлять голосовые сообщения."; /* notification */ "Group message:" = "Групповое сообщение:"; @@ -2620,7 +2620,7 @@ "Irreversible message deletion is prohibited in this chat." = "Необратимое удаление сообщений запрещено в этом чате."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Необратимое удаление сообщений запрещено в этой группе."; +"Irreversible message deletion is prohibited." = "Необратимое удаление сообщений запрещено в этой группе."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Это позволяет иметь много анонимных соединений без общих данных между ними в одном профиле пользователя."; @@ -2842,7 +2842,7 @@ "Message reactions are prohibited in this chat." = "Реакции на сообщения в этом чате запрещены."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Реакции на сообщения запрещены в этой группе."; +"Message reactions are prohibited." = "Реакции на сообщения запрещены в этой группе."; /* notification */ "message received" = "получено сообщение"; @@ -4194,7 +4194,7 @@ "SimpleX links" = "SimpleX ссылки"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "Ссылки SimpleX запрещены в этой группе."; +"SimpleX links are prohibited." = "Ссылки SimpleX запрещены в этой группе."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "Ссылки SimpleX не разрешены"; @@ -4875,7 +4875,7 @@ "Voice messages are prohibited in this chat." = "Голосовые сообщения запрещены в этом чате."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Голосовые сообщения запрещены в этой группе."; +"Voice messages are prohibited." = "Голосовые сообщения запрещены в этой группе."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Голосовые сообщения не разрешены"; diff --git a/apps/ios/th.lproj/Localizable.strings b/apps/ios/th.lproj/Localizable.strings index 1b3dec5ee1..962c64b710 100644 --- a/apps/ios/th.lproj/Localizable.strings +++ b/apps/ios/th.lproj/Localizable.strings @@ -1005,7 +1005,7 @@ "Direct messages" = "ข้อความโดยตรง"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "ข้อความโดยตรงระหว่างสมาชิกเป็นสิ่งต้องห้ามในกลุ่มนี้"; +"Direct messages between members are prohibited." = "ข้อความโดยตรงระหว่างสมาชิกเป็นสิ่งต้องห้ามในกลุ่มนี้"; /* No comment provided by engineer. */ "Disable (keep overrides)" = "ปิดใช้งาน (เก็บการแทนที่)"; @@ -1026,7 +1026,7 @@ "Disappearing messages are prohibited in this chat." = "ข้อความที่จะหายไปหลังเวลาที่กําหนด (disappearing message) เป็นสิ่งต้องห้ามในแชทนี้"; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "ข้อความที่จะหายไปหลังเวลาที่กําหนด (disappearing message) เป็นสิ่งต้องห้ามในกลุ่มนี้"; +"Disappearing messages are prohibited." = "ข้อความที่จะหายไปหลังเวลาที่กําหนด (disappearing message) เป็นสิ่งต้องห้ามในกลุ่มนี้"; /* No comment provided by engineer. */ "Disappears at" = "หายไปที่"; @@ -1386,7 +1386,7 @@ "Files and media" = "ไฟล์และสื่อ"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "ไฟล์และสื่อเป็นสิ่งต้องห้ามในกลุ่มนี้"; +"Files and media are prohibited." = "ไฟล์และสื่อเป็นสิ่งต้องห้ามในกลุ่มนี้"; /* No comment provided by engineer. */ "Files and media prohibited!" = "ไฟล์และสื่อต้องห้าม!"; @@ -1470,22 +1470,22 @@ "Group links" = "ลิงค์กลุ่ม"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้"; +"Members can add message reactions." = "สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้"; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร"; +"Members can irreversibly delete sent messages. (24 hours)" = "สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้"; +"Members can send direct messages." = "สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้"; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้"; +"Members can send disappearing messages." = "สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้"; /* No comment provided by engineer. */ -"Group members can send files and media." = "สมาชิกกลุ่มสามารถส่งไฟล์และสื่อ"; +"Members can send files and media." = "สมาชิกกลุ่มสามารถส่งไฟล์และสื่อ"; /* No comment provided by engineer. */ -"Group members can send voice messages." = "สมาชิกกลุ่มสามารถส่งข้อความเสียง"; +"Members can send voice messages." = "สมาชิกกลุ่มสามารถส่งข้อความเสียง"; /* notification */ "Group message:" = "ข้อความกลุ่ม:"; @@ -1713,7 +1713,7 @@ "Irreversible message deletion is prohibited in this chat." = "ไม่สามารถลบข้อความแบบแก้ไขไม่ได้ในแชทนี้"; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "การลบข้อความแบบแก้ไขไม่ได้เป็นสิ่งที่ห้ามในกลุ่มนี้"; +"Irreversible message deletion is prohibited." = "การลบข้อความแบบแก้ไขไม่ได้เป็นสิ่งที่ห้ามในกลุ่มนี้"; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "อนุญาตให้มีการเชื่อมต่อที่ไม่ระบุตัวตนจำนวนมากโดยไม่มีข้อมูลที่ใช้ร่วมกันระหว่างกันในโปรไฟล์การแชทเดียว"; @@ -1869,7 +1869,7 @@ "Message reactions are prohibited in this chat." = "ห้ามแสดงปฏิกิริยาบนข้อความในแชทนี้"; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "ปฏิกิริยาบนข้อความเป็นสิ่งต้องห้ามในกลุ่มนี้"; +"Message reactions are prohibited." = "ปฏิกิริยาบนข้อความเป็นสิ่งต้องห้ามในกลุ่มนี้"; /* notification */ "message received" = "ข้อความที่ได้รับ"; @@ -3071,7 +3071,7 @@ "Voice messages are prohibited in this chat." = "ห้ามส่งข้อความเสียงในแชทนี้"; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "ข้อความเสียงเป็นสิ่งต้องห้ามในกลุ่มนี้"; +"Voice messages are prohibited." = "ข้อความเสียงเป็นสิ่งต้องห้ามในกลุ่มนี้"; /* No comment provided by engineer. */ "Voice messages prohibited!" = "ห้ามข้อความเสียง!"; diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index b849dda85a..ec29de0cf3 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -1572,7 +1572,7 @@ "Direct messages" = "Doğrudan mesajlar"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "Bu grupta üyeler arasında direkt mesajlaşma yasaktır."; +"Direct messages between members are prohibited." = "Bu grupta üyeler arasında direkt mesajlaşma yasaktır."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Devre dışı bırak (geçersiz kılmaları koru)"; @@ -1599,7 +1599,7 @@ "Disappearing messages are prohibited in this chat." = "Kaybolan mesajlar bu sohbette yasaklanmış."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "Kaybolan mesajlar bu grupta yasaklanmış."; +"Disappearing messages are prohibited." = "Kaybolan mesajlar bu grupta yasaklanmış."; /* No comment provided by engineer. */ "Disappears at" = "da kaybolur"; @@ -2146,7 +2146,7 @@ "Files and media" = "Dosyalar ve medya"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Dosyalar ve medya bu grupta yasaklandı."; +"Files and media are prohibited." = "Dosyalar ve medya bu grupta yasaklandı."; /* No comment provided by engineer. */ "Files and media not allowed" = "Dosyalar ve medyaya izin verilmiyor"; @@ -2302,25 +2302,25 @@ "Group links" = "Grup bağlantıları"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Grup üyeleri mesaj tepkileri ekleyebilir."; +"Members can add message reactions." = "Grup üyeleri mesaj tepkileri ekleyebilir."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Grup üyeleri doğrudan mesajlar gönderebilir."; +"Members can send direct messages." = "Grup üyeleri doğrudan mesajlar gönderebilir."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Grup üyeleri kaybolan mesajlar gönderebilir."; +"Members can send disappearing messages." = "Grup üyeleri kaybolan mesajlar gönderebilir."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Grup üyeleri dosyalar ve medya gönderebilir."; +"Members can send files and media." = "Grup üyeleri dosyalar ve medya gönderebilir."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Grup üyeleri SimpleX bağlantıları gönderebilir."; +"Members can send SimpleX links." = "Grup üyeleri SimpleX bağlantıları gönderebilir."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Grup üyeleri sesli mesajlar gönderebilir."; +"Members can send voice messages." = "Grup üyeleri sesli mesajlar gönderebilir."; /* notification */ "Group message:" = "Grup mesajı:"; @@ -2617,7 +2617,7 @@ "Irreversible message deletion is prohibited in this chat." = "Bu sohbette geri döndürülemez mesaj silme yasaktır."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "Bu grupta geri döndürülemez mesaj silme yasaktır."; +"Irreversible message deletion is prohibited." = "Bu grupta geri döndürülemez mesaj silme yasaktır."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Tek bir sohbet profilinde aralarında herhangi bir veri paylaşımı olmadan birçok anonim bağlantıya sahip olmaya izin verir."; @@ -2839,7 +2839,7 @@ "Message reactions are prohibited in this chat." = "Mesaj tepkileri bu sohbette yasaklandı."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Mesaj tepkileri bu grupta yasaklandı."; +"Message reactions are prohibited." = "Mesaj tepkileri bu grupta yasaklandı."; /* notification */ "message received" = "mesaj alındı"; @@ -4191,7 +4191,7 @@ "SimpleX links" = "SimpleX bağlantıları"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "SimpleX bağlantıları bu grupta yasaklandı."; +"SimpleX links are prohibited." = "SimpleX bağlantıları bu grupta yasaklandı."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "SimpleX bağlantılarına izin verilmiyor"; @@ -4872,7 +4872,7 @@ "Voice messages are prohibited in this chat." = "Bu sohbette sesli mesajlar yasaktır."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Bu grupta sesli mesajlar yasaktır."; +"Voice messages are prohibited." = "Bu grupta sesli mesajlar yasaktır."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Sesli mesajlara izin verilmiyor"; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 7b66aa5efb..28cc2839e8 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -1656,7 +1656,7 @@ "Direct messages" = "Прямі повідомлення"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "У цій групі заборонені прямі повідомлення між учасниками."; +"Direct messages between members are prohibited." = "У цій групі заборонені прямі повідомлення між учасниками."; /* No comment provided by engineer. */ "Disable (keep overrides)" = "Вимкнути (зберегти перевизначення)"; @@ -1683,7 +1683,7 @@ "Disappearing messages are prohibited in this chat." = "Зникаючі повідомлення в цьому чаті заборонені."; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "У цій групі заборонено зникаючі повідомлення."; +"Disappearing messages are prohibited." = "У цій групі заборонено зникаючі повідомлення."; /* No comment provided by engineer. */ "Disappears at" = "Зникає за"; @@ -2254,7 +2254,7 @@ "Files and media" = "Файли і медіа"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "Файли та медіа в цій групі заборонені."; +"Files and media are prohibited." = "Файли та медіа в цій групі заборонені."; /* No comment provided by engineer. */ "Files and media not allowed" = "Файли та медіафайли заборонені"; @@ -2425,25 +2425,25 @@ "Group links" = "Групові посилання"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "Учасники групи можуть додавати реакції на повідомлення."; +"Members can add message reactions." = "Учасники групи можуть додавати реакції на повідомлення."; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години)"; +"Members can irreversibly delete sent messages. (24 hours)" = "Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години)"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "Учасники групи можуть надсилати прямі повідомлення."; +"Members can send direct messages." = "Учасники групи можуть надсилати прямі повідомлення."; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "Учасники групи можуть надсилати зникаючі повідомлення."; +"Members can send disappearing messages." = "Учасники групи можуть надсилати зникаючі повідомлення."; /* No comment provided by engineer. */ -"Group members can send files and media." = "Учасники групи можуть надсилати файли та медіа."; +"Members can send files and media." = "Учасники групи можуть надсилати файли та медіа."; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "Учасники групи можуть надсилати посилання SimpleX."; +"Members can send SimpleX links." = "Учасники групи можуть надсилати посилання SimpleX."; /* No comment provided by engineer. */ -"Group members can send voice messages." = "Учасники групи можуть надсилати голосові повідомлення."; +"Members can send voice messages." = "Учасники групи можуть надсилати голосові повідомлення."; /* notification */ "Group message:" = "Групове повідомлення:"; @@ -2746,7 +2746,7 @@ "Irreversible message deletion is prohibited in this chat." = "У цьому чаті заборонено безповоротне видалення повідомлень."; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "У цій групі заборонено безповоротне видалення повідомлень."; +"Irreversible message deletion is prohibited." = "У цій групі заборонено безповоротне видалення повідомлень."; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Це дозволяє мати багато анонімних з'єднань без будь-яких спільних даних між ними в одному профілі чату."; @@ -2968,7 +2968,7 @@ "Message reactions are prohibited in this chat." = "Реакції на повідомлення в цьому чаті заборонені."; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "Реакції на повідомлення в цій групі заборонені."; +"Message reactions are prohibited." = "Реакції на повідомлення в цій групі заборонені."; /* notification */ "message received" = "повідомлення отримано"; @@ -4416,7 +4416,7 @@ "SimpleX links" = "Посилання SimpleX"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "У цій групі заборонені посилання на SimpleX."; +"SimpleX links are prohibited." = "У цій групі заборонені посилання на SimpleX."; /* No comment provided by engineer. */ "SimpleX links not allowed" = "Посилання SimpleX заборонені"; @@ -5148,7 +5148,7 @@ "Voice messages are prohibited in this chat." = "Голосові повідомлення в цьому чаті заборонені."; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "Голосові повідомлення в цій групі заборонені."; +"Voice messages are prohibited." = "Голосові повідомлення в цій групі заборонені."; /* No comment provided by engineer. */ "Voice messages not allowed" = "Голосові повідомлення заборонені"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index a524b5739d..5fac1a8577 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -1521,7 +1521,7 @@ "Direct messages" = "私信"; /* No comment provided by engineer. */ -"Direct messages between members are prohibited in this group." = "此群中禁止成员之间私信。"; +"Direct messages between members are prohibited." = "此群中禁止成员之间私信。"; /* No comment provided by engineer. */ "Disable (keep overrides)" = "禁用(保留覆盖)"; @@ -1548,7 +1548,7 @@ "Disappearing messages are prohibited in this chat." = "此聊天中禁止显示限时消息。"; /* No comment provided by engineer. */ -"Disappearing messages are prohibited in this group." = "该组禁止限时消息。"; +"Disappearing messages are prohibited." = "该组禁止限时消息。"; /* No comment provided by engineer. */ "Disappears at" = "消失于"; @@ -2074,7 +2074,7 @@ "Files and media" = "文件和媒体"; /* No comment provided by engineer. */ -"Files and media are prohibited in this group." = "此群组中禁止文件和媒体。"; +"Files and media are prohibited." = "此群组中禁止文件和媒体。"; /* No comment provided by engineer. */ "Files and media not allowed" = "不允许文件和媒体"; @@ -2215,25 +2215,25 @@ "Group links" = "群组链接"; /* No comment provided by engineer. */ -"Group members can add message reactions." = "群组成员可以添加信息回应。"; +"Members can add message reactions." = "群组成员可以添加信息回应。"; /* No comment provided by engineer. */ -"Group members can irreversibly delete sent messages. (24 hours)" = "群组成员可以不可撤回地删除已发送的消息"; +"Members can irreversibly delete sent messages. (24 hours)" = "群组成员可以不可撤回地删除已发送的消息"; /* No comment provided by engineer. */ -"Group members can send direct messages." = "群组成员可以私信。"; +"Members can send direct messages." = "群组成员可以私信。"; /* No comment provided by engineer. */ -"Group members can send disappearing messages." = "群组成员可以发送限时消息。"; +"Members can send disappearing messages." = "群组成员可以发送限时消息。"; /* No comment provided by engineer. */ -"Group members can send files and media." = "群组成员可以发送文件和媒体。"; +"Members can send files and media." = "群组成员可以发送文件和媒体。"; /* No comment provided by engineer. */ -"Group members can send SimpleX links." = "群成员可发送 SimpleX 链接。"; +"Members can send SimpleX links." = "群成员可发送 SimpleX 链接。"; /* No comment provided by engineer. */ -"Group members can send voice messages." = "群组成员可以发送语音消息。"; +"Members can send voice messages." = "群组成员可以发送语音消息。"; /* notification */ "Group message:" = "群组消息:"; @@ -2524,7 +2524,7 @@ "Irreversible message deletion is prohibited in this chat." = "此聊天中禁止不可撤回消息移除。"; /* No comment provided by engineer. */ -"Irreversible message deletion is prohibited in this group." = "此群组中禁止不可撤回消息移除。"; +"Irreversible message deletion is prohibited." = "此群组中禁止不可撤回消息移除。"; /* No comment provided by engineer. */ "It allows having many anonymous connections without any shared data between them in a single chat profile." = "它允许在一个聊天资料中有多个匿名连接,而它们之间没有任何共享数据。"; @@ -2746,7 +2746,7 @@ "Message reactions are prohibited in this chat." = "该聊天禁用了消息回应。"; /* No comment provided by engineer. */ -"Message reactions are prohibited in this group." = "该群组禁用了消息回应。"; +"Message reactions are prohibited." = "该群组禁用了消息回应。"; /* notification */ "message received" = "消息已收到"; @@ -4044,7 +4044,7 @@ "SimpleX links" = "SimpleX 链接"; /* No comment provided by engineer. */ -"SimpleX links are prohibited in this group." = "此群禁止 SimpleX 链接。"; +"SimpleX links are prohibited." = "此群禁止 SimpleX 链接。"; /* No comment provided by engineer. */ "SimpleX links not allowed" = "不允许SimpleX 链接"; @@ -4692,7 +4692,7 @@ "Voice messages are prohibited in this chat." = "语音信息在此聊天中被禁止。"; /* No comment provided by engineer. */ -"Voice messages are prohibited in this group." = "语音信息在该群组中被禁用。"; +"Voice messages are prohibited." = "语音信息在该群组中被禁用。"; /* No comment provided by engineer. */ "Voice messages not allowed" = "不允许语音消息"; diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index f0f63f2c72..9531712554 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -5001,7 +5001,7 @@ enum class GroupFeature: Feature { } DirectMessages -> when(enabled) { GroupFeatureEnabled.ON -> generalGetString(MR.strings.group_members_can_send_dms) - GroupFeatureEnabled.OFF -> generalGetString(MR.strings.direct_messages_are_prohibited_in_chat) + GroupFeatureEnabled.OFF -> generalGetString(MR.strings.direct_messages_are_prohibited) } FullDelete -> when(enabled) { GroupFeatureEnabled.ON -> generalGetString(MR.strings.group_members_can_delete) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt index b351f56c29..25661f00a0 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt @@ -33,6 +33,7 @@ import chat.simplex.common.views.usersettings.SettingsActionItem import chat.simplex.common.model.GroupInfo import chat.simplex.common.platform.* import chat.simplex.res.MR +import dev.icerock.moko.resources.StringResource @Composable fun AddGroupMembersView(rhId: Long?, groupInfo: GroupInfo, creatingGroup: Boolean = false, chatModel: ChatModel, close: () -> Unit) { @@ -126,7 +127,8 @@ fun AddGroupMembersLayout( tint = MaterialTheme.colors.secondary, modifier = Modifier.padding(end = 10.dp).size(20.dp) ) - Text(generalGetString(MR.strings.group_main_profile_sent), textAlign = TextAlign.Center, style = MaterialTheme.typography.body2) + val textId = if (groupInfo.businessChat == null) MR.strings.group_main_profile_sent else MR.strings.chat_main_profile_sent + Text(generalGetString(textId), textAlign = TextAlign.Center, style = MaterialTheme.typography.body2) } } @@ -168,7 +170,8 @@ fun AddGroupMembersLayout( if (creatingGroup && selectedContacts.isEmpty()) { SkipInvitingButton(close) } else { - InviteMembersButton(inviteMembers, disabled = selectedContacts.isEmpty() || !allowModifyMembers) + val titleId = if (groupInfo.businessChat == null) MR.strings.invite_to_group_button else MR.strings.invite_to_chat_button + InviteMembersButton(titleId, inviteMembers, disabled = selectedContacts.isEmpty() || !allowModifyMembers) } } SectionCustomFooter { @@ -220,10 +223,10 @@ private fun RoleSelectionRow(groupInfo: GroupInfo, selectedRole: MutableState Unit, disabled: Boolean) { +fun InviteMembersButton(titleId: StringResource, onClick: () -> Unit, disabled: Boolean) { SettingsActionItem( painterResource(MR.images.ic_check), - stringResource(MR.strings.invite_to_group_button), + stringResource(titleId), click = onClick, textColor = MaterialTheme.colors.primary, iconColor = MaterialTheme.colors.primary, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt index 870df388b2..804222f264 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt @@ -123,12 +123,18 @@ fun ModalData.GroupChatInfoView(chatModel: ChatModel, rhId: Long?, chatId: Strin fun deleteGroupDialog(chat: Chat, groupInfo: GroupInfo, chatModel: ChatModel, close: (() -> Unit)? = null) { val chatInfo = chat.chatInfo - val alertTextKey = - if (groupInfo.membership.memberCurrent) MR.strings.delete_group_for_all_members_cannot_undo_warning - else MR.strings.delete_group_for_self_cannot_undo_warning + val titleId = if (groupInfo.businessChat == null) MR.strings.delete_group_question else MR.strings.delete_chat_question + val messageId = + if (groupInfo.businessChat == null) { + if (groupInfo.membership.memberCurrent) MR.strings.delete_group_for_all_members_cannot_undo_warning + else MR.strings.delete_group_for_self_cannot_undo_warning + } else { + if (groupInfo.membership.memberCurrent) MR.strings.delete_chat_for_all_members_cannot_undo_warning + else MR.strings.delete_chat_for_self_cannot_undo_warning + } AlertManager.shared.showAlertDialog( - title = generalGetString(MR.strings.delete_group_question), - text = generalGetString(alertTextKey), + title = generalGetString(titleId), + text = generalGetString(messageId), confirmText = generalGetString(MR.strings.delete_verb), onConfirm = { withBGApi { @@ -151,9 +157,14 @@ fun deleteGroupDialog(chat: Chat, groupInfo: GroupInfo, chatModel: ChatModel, cl } fun leaveGroupDialog(rhId: Long?, groupInfo: GroupInfo, chatModel: ChatModel, close: (() -> Unit)? = null) { + val titleId = if (groupInfo.businessChat == null) MR.strings.leave_group_question else MR.strings.leave_chat_question + val messageId = if (groupInfo.businessChat == null) + MR.strings.you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved + else + MR.strings.you_will_stop_receiving_messages_from_this_chat_chat_history_will_be_preserved AlertManager.shared.showAlertDialog( - title = generalGetString(MR.strings.leave_group_question), - text = generalGetString(MR.strings.you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved), + title = generalGetString(titleId), + text = generalGetString(messageId), confirmText = generalGetString(MR.strings.leave_group_button), onConfirm = { withLongRunningApi(60_000) { @@ -166,9 +177,13 @@ fun leaveGroupDialog(rhId: Long?, groupInfo: GroupInfo, chatModel: ChatModel, cl } private fun removeMemberAlert(rhId: Long?, groupInfo: GroupInfo, mem: GroupMember) { + val messageId = if (groupInfo.businessChat == null) + MR.strings.member_will_be_removed_from_group_cannot_be_undone + else + MR.strings.member_will_be_removed_from_chat_cannot_be_undone AlertManager.shared.showAlertDialog( title = generalGetString(MR.strings.button_remove_member_question), - text = generalGetString(MR.strings.member_will_be_removed_from_group_cannot_be_undone), + text = generalGetString(messageId), confirmText = generalGetString(MR.strings.remove_member_confirmation), onConfirm = { withBGApi { @@ -353,7 +368,8 @@ fun ModalData.GroupChatInfoLayout( } } } - SectionTextFooter(stringResource(MR.strings.only_group_owners_can_change_prefs)) + val footerId = if (groupInfo.businessChat == null) MR.strings.only_group_owners_can_change_prefs else MR.strings.only_chat_owners_can_change_prefs + SectionTextFooter(stringResource(footerId)) SectionDividerSpaced(maxTopPadding = true) SectionView(title = String.format(generalGetString(MR.strings.group_info_section_title_num_members), members.count() + 1)) { @@ -397,10 +413,12 @@ fun ModalData.GroupChatInfoLayout( SectionView { ClearChatButton(clearChat) if (groupInfo.canDelete) { - DeleteGroupButton(deleteGroup) + val titleId = if (groupInfo.businessChat == null) MR.strings.button_delete_group else MR.strings.button_delete_chat + DeleteGroupButton(titleId, deleteGroup) } if (groupInfo.membership.memberCurrent) { - LeaveGroupButton(leaveGroup) + val titleId = if (groupInfo.businessChat == null) MR.strings.button_leave_group else MR.strings.button_leave_chat + LeaveGroupButton(titleId, leaveGroup) } } @@ -655,10 +673,10 @@ private fun AddOrEditWelcomeMessage(welcomeMessage: String?, onClick: () -> Unit } @Composable -private fun LeaveGroupButton(onClick: () -> Unit) { +private fun LeaveGroupButton(titleId: StringResource, onClick: () -> Unit) { SettingsActionItem( painterResource(MR.images.ic_logout), - stringResource(MR.strings.button_leave_group), + stringResource(titleId), onClick, iconColor = Color.Red, textColor = Color.Red @@ -666,10 +684,10 @@ private fun LeaveGroupButton(onClick: () -> Unit) { } @Composable -private fun DeleteGroupButton(onClick: () -> Unit) { +private fun DeleteGroupButton(titleId: StringResource, onClick: () -> Unit) { SettingsActionItem( painterResource(MR.images.ic_delete), - stringResource(MR.strings.button_delete_group), + stringResource(titleId), onClick, iconColor = Color.Red, textColor = Color.Red diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt index a78dd36887..7f0d5f088e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt @@ -38,6 +38,7 @@ import chat.simplex.common.model.GroupInfo import chat.simplex.common.platform.* import chat.simplex.common.views.chatlist.openLoadedChat import chat.simplex.res.MR +import dev.icerock.moko.resources.StringResource import kotlinx.datetime.Clock @Composable @@ -104,7 +105,7 @@ fun GroupMemberInfoView( if (it == newRole.value) return@GroupMemberInfoLayout val prevValue = newRole.value newRole.value = it - updateMemberRoleDialog(it, member, onDismiss = { + updateMemberRoleDialog(it, groupInfo, member, onDismiss = { newRole.value = prevValue }) { withBGApi { @@ -211,9 +212,13 @@ fun GroupMemberInfoView( } fun removeMemberDialog(rhId: Long?, groupInfo: GroupInfo, member: GroupMember, chatModel: ChatModel, close: (() -> Unit)? = null) { + val messageId = if (groupInfo.businessChat == null) + MR.strings.member_will_be_removed_from_group_cannot_be_undone + else + MR.strings.member_will_be_removed_from_chat_cannot_be_undone AlertManager.shared.showAlertDialog( title = generalGetString(MR.strings.button_remove_member), - text = generalGetString(MR.strings.member_will_be_removed_from_group_cannot_be_undone), + text = generalGetString(messageId), confirmText = generalGetString(MR.strings.remove_member_confirmation), onConfirm = { withBGApi { @@ -346,14 +351,15 @@ fun GroupMemberInfoLayout( showSendMessageToEnableCallsAlert() }) } else { // no known contact chat && directMessages are off + val messageId = if (groupInfo.businessChat == null) MR.strings.direct_messages_are_prohibited_in_group else MR.strings.direct_messages_are_prohibited_in_chat InfoViewActionButton(modifier = Modifier.fillMaxWidth(0.33f), painterResource(MR.images.ic_chat_bubble), generalGetString(MR.strings.info_view_message_button), disabled = false, disabledLook = true, onClick = { - showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_send_message_to_member_alert_title)) + showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_send_message_to_member_alert_title), messageId) }) InfoViewActionButton(modifier = Modifier.fillMaxWidth(0.5f), painterResource(MR.images.ic_call), generalGetString(MR.strings.info_view_call_button), disabled = false, disabledLook = true, onClick = { - showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title)) + showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title), messageId) }) InfoViewActionButton(modifier = Modifier.fillMaxWidth(1f), painterResource(MR.images.ic_videocam), generalGetString(MR.strings.info_view_video_button), disabled = false, disabledLook = true, onClick = { - showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title)) + showDirectMessagesProhibitedAlert(generalGetString(MR.strings.cant_call_member_alert_title), messageId) }) } } @@ -394,7 +400,8 @@ fun GroupMemberInfoLayout( } SectionView(title = stringResource(MR.strings.member_info_section_title_member)) { - InfoRow(stringResource(MR.strings.info_row_group), groupInfo.displayName) + val titleId = if (groupInfo.businessChat == null) MR.strings.info_row_group else MR.strings.info_row_chat + InfoRow(stringResource(titleId), groupInfo.displayName) val roles = remember { member.canChangeRoleTo(groupInfo) } if (roles != null) { RoleSelectionRow(roles, newRole, onRoleSelected) @@ -470,10 +477,10 @@ private fun showSendMessageToEnableCallsAlert() { ) } -private fun showDirectMessagesProhibitedAlert(title: String) { +private fun showDirectMessagesProhibitedAlert(title: String, messageId: StringResource) { AlertManager.shared.showAlertMsg( title = title, - text = generalGetString(MR.strings.direct_messages_are_prohibited_in_chat) + text = generalGetString(messageId) ) } @@ -635,15 +642,19 @@ fun MemberProfileImage( private fun updateMemberRoleDialog( newRole: GroupMemberRole, + groupInfo: GroupInfo, member: GroupMember, onDismiss: () -> Unit, onConfirm: () -> Unit ) { AlertManager.shared.showAlertDialog( title = generalGetString(MR.strings.change_member_role_question), - text = if (member.memberCurrent) - String.format(generalGetString(MR.strings.member_role_will_be_changed_with_notification), newRole.text) - else + text = if (member.memberCurrent) { + if (groupInfo.businessChat == null) + String.format(generalGetString(MR.strings.member_role_will_be_changed_with_notification), newRole.text) + else + String.format(generalGetString(MR.strings.member_role_will_be_changed_with_notification_chat), newRole.text) + } else String.format(generalGetString(MR.strings.member_role_will_be_changed_with_invitation), newRole.text), confirmText = generalGetString(MR.strings.change_verb), onDismiss = onDismiss, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt index 838cac0172..fc042cc46c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt @@ -418,7 +418,7 @@ fun IntSettingRow(title: String, selection: MutableState, values: List Spacer(Modifier.size(4.dp)) Icon( if (!expanded.value) painterResource(MR.images.ic_arrow_drop_down) else painterResource(MR.images.ic_arrow_drop_up), - generalGetString(MR.strings.invite_to_group_button), + contentDescription = null, modifier = Modifier.padding(start = 8.dp), tint = MaterialTheme.colors.secondary ) @@ -478,7 +478,7 @@ fun TimeoutSettingRow(title: String, selection: MutableState, values: List Spacer(Modifier.size(4.dp)) Icon( if (!expanded.value) painterResource(MR.images.ic_arrow_drop_down) else painterResource(MR.images.ic_arrow_drop_up), - generalGetString(MR.strings.invite_to_group_button), + contentDescription = null, modifier = Modifier.padding(start = 8.dp), tint = MaterialTheme.colors.secondary ) diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index c8d995cfd9..1171b1d1ae 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -621,7 +621,7 @@ %d أسبوع لا يمكن أن يحتوي اسم العرض على مسافة فارغة. مكالمة فيديو مُعمّاة بين الطريفين - الرسائل المباشرة بين الأعضاء ممنوعة في هذه المجموعة. + الرسائل المباشرة بين الأعضاء ممنوعة في هذه المجموعة. %d ساعة %d ساعة %d ساعات diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 53df6d4818..7291c8cbb1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1425,7 +1425,9 @@ You joined this group. Connecting to inviting group member. Leave Leave group? + Leave chat? You will stop receiving messages from this group. Chat history will be preserved. + You will stop receiving messages from this chat. Chat history will be preserved. Invite members Group inactive Invitation expired! @@ -1542,6 +1544,7 @@ Initial role Expand role selection Invite to group + Invite to chat Skip inviting members Select contacts Contact checked @@ -1558,10 +1561,15 @@ %1$s MEMBERS you: %1$s Delete group + Delete chat Delete group? + Delete chat? Group will be deleted for all members - this cannot be undone! + Chat will be deleted for all members - this cannot be undone! Group will be deleted for you - this cannot be undone! + Chat will be deleted for you - this cannot be undone! Leave group + Leave chat Edit group profile Add welcome message Welcome message @@ -1578,6 +1586,7 @@ Error creating member contact Error sending invitation Only group owners can change group preferences. + Only chat owners can change preferences. Address Share address You can share this address with your contacts to let them connect with %s. @@ -1624,6 +1633,7 @@ Send direct message Member will be removed from group - this cannot be undone! + Member will be removed from chat - this cannot be undone! Remove Remove member Block member? @@ -1649,6 +1659,7 @@ Switch Change group role? The role will be changed to "%s". Everyone in the group will be notified. + The role will be changed to "%s". Everyone in the chat will be notified. The role will be changed to "%s". The member will receive a new invitation. Connect directly? Сonnection request will be sent to this group member. @@ -1656,6 +1667,7 @@ Error changing role Error blocking member for all Group + Chat Connection direct indirect (%1$s) @@ -1703,6 +1715,7 @@ Enter group name: Group full name: Your chat profile will be sent to group members + Your chat profile will be sent to chat members Create group @@ -1957,20 +1970,22 @@ Prohibit sending SimpleX links Send up to 100 last messages to new members. Do not send history to new members. - Group members can send disappearing messages. - Disappearing messages are prohibited in this group. - Group members can send direct messages. - Direct messages between members are prohibited in this group. - Group members can irreversibly delete sent messages. (24 hours) - Irreversible message deletion is prohibited in this group. - Group members can send voice messages. - Voice messages are prohibited in this group. - Group members can add message reactions. - Message reactions are prohibited in this group. - Group members can send files and media. - Files and media are prohibited in this group. - Group members can send SimpleX links. - SimpleX links are prohibited in this group. + Members can send disappearing messages. + Disappearing messages are prohibited. + Members can send direct messages. + Direct messages between members are prohibited. + Direct messages between members are prohibited in this group. + Direct messages between members are prohibited in this chat. + Members can irreversibly delete sent messages. (24 hours) + Irreversible message deletion is prohibited. + Members can send voice messages. + Voice messages are prohibited. + Members can add message reactions. + Message reactions are prohibited. + Members can send files and media. + Files and media are prohibited. + Members can send SimpleX links. + SimpleX links are prohibited. Up to 100 last messages are sent to new members. History is not sent to new members. Delete after diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml index d59867574d..22e93b041a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -460,7 +460,7 @@ Изчезващи съобщения активирано активирано за контакт - Личните съобщения между членовете са забранени в тази група. + Личните съобщения между членовете са забранени в тази група. Различни имена, аватари и транспортна изолация. Оправяне на криптирането след възстановяване от резервни копия. Потвърждениe за доставка! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml index b107ea1df7..a6ea5b1208 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml @@ -897,7 +897,7 @@ Členové skupiny mohou posílat mizící zprávy. Mizící zprávy jsou v této skupině zakázány. Členové skupiny mohou posílat přímé zprávy. - Přímé zprávy mezi členy jsou v této skupině zakázány. + Přímé zprávy mezi členy jsou v této skupině zakázány. Členové skupin mohou nevratně mazat odeslané zprávy. (24 hodin) Nevratné mazání zpráv je v této skupině zakázáno. Členové skupiny mohou posílat hlasové zprávy. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index 29812d0a3e..3c3711be25 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -875,7 +875,7 @@ Das Senden von Sprachnachrichten erlauben. Das Senden von Sprachnachrichten nicht erlauben. Gruppenmitglieder können Direktnachrichten versenden. - In dieser Gruppe sind Direktnachrichten zwischen Mitgliedern nicht erlaubt. + In dieser Gruppe sind Direktnachrichten zwischen Mitgliedern nicht erlaubt. Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen (bis zu 24 Stunden). In dieser Gruppe ist das unwiederbringliche Löschen von Nachrichten nicht erlaubt. Gruppenmitglieder können Sprachnachrichten versenden. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index 3d22d1fcc5..98f34e4c81 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -82,7 +82,7 @@ Crea grupo secreto La contraseña de cifrado de la base de datos será actualizada. ID base de datos - Los mensajes directos entre miembros del grupo no están permitidos. + Los mensajes directos entre miembros del grupo no están permitidos. La contraseña de la base de datos es diferente a la almacenada en Keystore. La base de datos será cifrada y la contraseña se guardará en Keystore. ¿Eliminar contacto\? diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml index 8850e33a3e..7e59b69082 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml @@ -1415,7 +1415,7 @@ عدم ارسال تاریخچه به اعضای جدید. اعضای گروه می‌توانند پیام‌های ناپدید شونده ارسال کنند. اعضای گروه می‌توانند پیام‌های مستقیم ارسال کنند. - پیام‌های مستقیم بین اعضا در این گروه ممنوع هستند. + پیام‌های مستقیم بین اعضا در این گروه ممنوع هستند. حذف غیرقابل برگشت در این گروه ممنوع است. پیام‌های صوتی در این گروه ممنوع هستند. واکنش‌های پیام در این گروه ممنوع هستند. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml index f933b2d6cc..62a02986b2 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml @@ -339,7 +339,7 @@ Sekä sinä että kontaktisi voivat käyttää viestireaktioita. Sekä sinä että kontaktisi voitte peruuttamattomasti poistaa lähetetyt viestit. Sekä sinä että kontaktisi voitte soittaa puheluita. - Yksityisviestit jäsenten välillä ovat kiellettyjä tässä ryhmässä. + Yksityisviestit jäsenten välillä ovat kiellettyjä tässä ryhmässä. Chat-profiilin (oletus) tai yhteyden (BETA) perusteella. peruttu %s %d päivä diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index 6caf5b61ef..480aa2e10c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -856,7 +856,7 @@ Interdire l’envoi de messages éphémères. Interdire la suppression irréversible des messages. Les membres du groupe peuvent envoyer des messages directs. - Les messages directs entre membres sont interdits dans ce groupe. + Les messages directs entre membres sont interdits dans ce groupe. Les destinataires voient les mises à jour au fur et à mesure que vous les tapez. Vérifier la sécurité de la connexion Comparez les codes de sécurité avec vos contacts. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index d8ce80884e..4f80e33166 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -402,7 +402,7 @@ %d ismerős kiválasztva Engedélyezés %dhónap - A közvetlen üzenetek küldése a tagok között le van tiltva ebben a csoportban. + A közvetlen üzenetek küldése a tagok között le van tiltva ebben a csoportban. %d perc Az adatbázis egy véletlenszerű jelmondattal van titkosítva. Exportálás előtt változtassa meg a jelmondatot. Kézbesítés jelentések letiltása a csoportok számára? diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml index a081eb37bf..1050f1d575 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml @@ -564,7 +564,7 @@ Anggota grup dapat hapus pesan terkirim secara permanen. (24 jam) Anggota grup dapat mengirim pesan suara. Hapus pesan yang tidak dapat dibatalkan dilarang di grup ini. - Pesan pribadi antar anggota dilarang di grup ini. + Pesan pribadi antar anggota dilarang di grup ini. Anggota grup dapat kirim tautan SimpleX. %d jam %d jam diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index 0b827df4d7..2f41824bd1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -289,7 +289,7 @@ Il database è crittografato con una password casuale, puoi cambiarla. La password del database è necessaria per aprire la chat. Elimina - I messaggi diretti tra i membri sono vietati in questo gruppo. + I messaggi diretti tra i membri sono vietati in questo gruppo. Inserisci il tuo nome: File Svuota chat @@ -2156,7 +2156,7 @@ Condizioni accettate il: %s. Operatore %s.]]> - %s.]]> + %s.]]> %s.]]> %s.]]> Accetta le condizioni @@ -2168,7 +2168,7 @@ Usa per i messaggi Vedi le condizioni %s.]]> - %s, accetta le condizioni d'uso.]]> + %s, accetta le condizioni d\'uso.]]> Condizioni d\'uso Apri le modifiche Apri le condizioni @@ -2188,7 +2188,7 @@ Server di multimediali e file aggiunti Indirizzo o link una tantum? Impostazioni dell\'indirizzo - con un solo contatto - condividilo di persona o tramite un messenger.]]> + con un solo contatto - condividilo di persona o tramite un messenger.]]> Le condizioni verranno accettate per gli operatori attivati dopo 30 giorni. Le condizioni verranno accettate il: %s. Errore di accettazione delle condizioni diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml index 01c19a20f0..d9ddd08a57 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml @@ -382,7 +382,7 @@ %d שבועות שמות שונים, אווטארים ובידוד תעבורה. ישיר - הודעות ישירות בין חברי קבוצה אסורות בקבוצה זו. + הודעות ישירות בין חברי קבוצה אסורות בקבוצה זו. הזן את שמך: שם תצוגה אינו יכול להכיל רווחים. %d חודשים diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml index 83b29a0b4c..c6775f6639 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -250,7 +250,7 @@ 招待が期限切れました! サーバを削除 端末認証がオフです。SimpleXロックを解除します。 - このグループではメンバー間のダイレクトメッセージが無効です。 + このグループではメンバー間のダイレクトメッセージが無効です。 このグループでは消えるメッセージが無効です。 %d 分 %d 週 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml index 8395f5ea48..c03b4e648b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml @@ -290,7 +290,7 @@ 다운그레이드하고 채팅 열기 다이렉트 메시지 사라지는 메시지 - 이 그룹에서는 멤버들의 다이렉트 메시지가 금지되어 있어요. + 이 그룹에서는 멤버들의 다이렉트 메시지가 금지되어 있어요. %d초 %d 초 %d시 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml index da7738f49e..5db1442fc6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml @@ -507,7 +507,7 @@ Išeiti iš grupės\? Nežinoma duomenų bazės klaida: %s Profilis ir ryšiai su serveriu - Tiesioginės žinutės tarp narių šioje grupėje yra uždraustos. + Tiesioginės žinutės tarp narių šioje grupėje yra uždraustos. Garso/vaizdo skambučiai " \nPrieinama versijoje v5.1" diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index 3d3aac1957..26ec40da60 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -254,7 +254,7 @@ Apparaatverificatie is uitgeschakeld. SimpleX Vergrendelen uitschakelen. Vul uw naam in: Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Vergrendelen inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld. - Directe berichten tussen leden zijn verboden in deze groep. + Directe berichten tussen leden zijn verboden in deze groep. %d bestand(en) met een totale grootte van %s %d uur Uitzetten diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml index 10f4f79d47..7b46d10921 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -807,7 +807,7 @@ Zarówno Ty, jak i Twój kontakt możecie wysyłać znikające wiadomości. Kontakty mogą oznaczać wiadomości do usunięcia; będziesz mógł je zobaczyć. Usuń po - Bezpośrednie wiadomości między członkami są zabronione w tej grupie. + Bezpośrednie wiadomości między członkami są zabronione w tej grupie. Znikające wiadomości są zabronione na tym czacie. %dm %d min diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml index 8b16e01b4e..034e5d19db 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -333,7 +333,7 @@ Funcionalidades experimentais Erro ao criar o link de grupo Erro ao excluir o link de grupo - Mensagens diretas entre membros são proibidas neste grupo. + Mensagens diretas entre membros são proibidas neste grupo. %dh %d horas anônimo via link de endereço de contato diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml index 02e5547e04..5cdc67e9e5 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml @@ -486,7 +486,7 @@ Atualização da base de dados %d semana %d semanas - Mensagens diretas entre membros são proibidas neste grupo. + Mensagens diretas entre membros são proibidas neste grupo. Eliminar fila Transferir ficheiro Ficheiro diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index 59b355fd2b..bcd0848e8d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -879,7 +879,7 @@ Разрешить отправлять голосовые сообщения. Запретить отправлять голосовые сообщений. Члены группы могут посылать прямые сообщения. - Прямые сообщения между членами группы запрещены. + Прямые сообщения между членами группы запрещены. Члены группы могут необратимо удалять отправленные сообщения. (24 часа) Необратимое удаление сообщений запрещено в этой группе. Члены группы могут отправлять голосовые сообщения. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml index 2487c7d5cd..a0027df1d8 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml @@ -480,7 +480,7 @@ สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้ สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้ สมาชิกกลุ่มสามารถส่งข้อความเสียง - ข้อความโดยตรงระหว่างสมาชิกเป็นสิ่งต้องห้ามในกลุ่มนี้ + ข้อความโดยตรงระหว่างสมาชิกเป็นสิ่งต้องห้ามในกลุ่มนี้ ข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) เป็นสิ่งต้องห้ามในกลุ่มนี้ สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้ ลบหลังจาก diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml index 8df7457e0f..67b6226b0e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml @@ -524,7 +524,7 @@ %s üyesi için şifreleme kabul edildi doğrudan Yeniden gösterme - Bu grupta üyeler arası doğrudan mesajlaşma yasaklıdır. + Bu grupta üyeler arası doğrudan mesajlaşma yasaklıdır. konuşulan kişi için etkinleşti senin için etkinleştirildi %d sn diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml index fcae74db1b..73daa373c1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -748,7 +748,7 @@ Заборонити реакції на повідомлення. Самознищувальні повідомлення заборонені в цій групі. Учасники групи можуть надсилати приватні повідомлення. - Приватні повідомлення між учасниками заборонені в цій групі. + Приватні повідомлення між учасниками заборонені в цій групі. Учасники групи можуть назавжди видаляти відправлені повідомлення. (24 години) Назавжди видалення повідомлень заборонене в цій групі. Голосові повідомлення заборонені в цій групі. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml index f02f7abc15..c9b30c652a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml @@ -503,7 +503,7 @@ Đã xóa Lỗi xóa %d sự kiện nhóm - Tin nhắn trực tiếp giữa các thành viên bị cấm trong nhóm này. + Tin nhắn trực tiếp giữa các thành viên bị cấm trong nhóm này. %d tệp với tổng kích thước là %s phần di dời khác nhau trong ứng dụng/cơ sở dữ liệu: %s / %s Tin nhắn trực tiếp diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index 4c0b66d216..9df7b74c33 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -423,7 +423,7 @@ 翻转相机 启用自动删除消息? 用于控制台 - 此群中禁止成员之间私信。 + 此群中禁止成员之间私信。 该组禁止限时消息。 群组成员可以不可逆地删除已发送的消息。(24小时) 群组成员可以私信。 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml index 22d226829e..11a086f795 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -752,7 +752,7 @@ 自動銷毀訊息於這個聊天室內是禁用的。 不可逆地刪除訊息於這個聊天室內是禁用的。 只有你可以傳送語音訊息。 - 私訊群組內的成員於這個群組內是禁用的。 + 私訊群組內的成員於這個群組內是禁用的。 群組內的成員可以不可逆地刪除訊息。(24小時) 語音訊息 改善伺服器配置 From a182cf5730e1d11575a9229dd2213bf0156645b8 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 3 Dec 2024 18:23:24 +0000 Subject: [PATCH 20/22] ui, site: v6.2 whats new, business (#5309) * ui, site: v6.2 whats new, business * icon Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> * business Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> * typo Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> * typo Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- .../Views/Onboarding/WhatsNewView.swift | 9 ++- .../common/views/onboarding/WhatsNewView.kt | 9 ++- .../commonMain/resources/MR/base/strings.xml | 2 + ...ork-v6-2-servers-by-flux-business-chats.md | 60 +++++++++++++++++++ docs/BUSINESS.md | 60 +++++++++++++++++++ website/langs/en.json | 1 + website/src/_data/docs_dropdown.json | 12 ++-- website/src/_data/docs_sidebar.json | 1 + website/src/_includes/navbar.html | 8 +++ 9 files changed, 150 insertions(+), 12 deletions(-) create mode 100644 blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md create mode 100755 docs/BUSINESS.md diff --git a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift index 92b2820681..182c5652d7 100644 --- a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift +++ b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift @@ -520,14 +520,19 @@ private let versionDescriptions: [VersionDescription] = [ ] ), VersionDescription( - version: "v6.2 (beta.1)", - post: URL(string: "https://simplex.chat/blog/20241125-servers-operated-by-flux-true-privacy-and-decentralization-for-all-users.html"), + version: "v6.2", + post: URL(string: "https://simplex.chat/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.html"), features: [ .view(FeatureView( icon: nil, title: "Network decentralization", view: { NewOperatorsView() } )), + .feature(Description( + icon: "briefcase", + title: "Business chats", + description: "Privacy for your customers." + )), .feature(Description( icon: "bolt", title: "More reliable notifications", diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt index 8eb89931b3..a5cb944f0a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt @@ -724,8 +724,8 @@ private val versionDescriptions: List = listOf( ), ), VersionDescription( - version = "v6.2-beta.1", - post = "https://simplex.chat/blog/20241125-servers-operated-by-flux-true-privacy-and-decentralization-for-all-users.html", + version = "v6.2", + post = "https://simplex.chat/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.html", features = listOf( VersionFeature.FeatureView( icon = null, @@ -749,6 +749,11 @@ private val versionDescriptions: List = listOf( } } ), + VersionFeature.FeatureDescription( + icon = MR.images.ic_work, + titleId = MR.strings.v6_2_business_chats, + descrId = MR.strings.v6_2_business_chats_descr + ), VersionFeature.FeatureDescription( icon = MR.images.ic_chat, titleId = MR.strings.v6_2_improved_chat_navigation, diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 7291c8cbb1..ddf8805e8a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -2175,6 +2175,8 @@ for better metadata privacy. Improved chat navigation - Open chat on the first unread message.\n- Jump to quoted messages. + Business chats + Privacy for your customers. View updated conditions diff --git a/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md b/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md new file mode 100644 index 0000000000..d59d8e6003 --- /dev/null +++ b/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md @@ -0,0 +1,60 @@ +--- +layout: layouts/article.html +title: "Servers operated by Flux - true privacy and decentralization for all users" +date: 2024-12-10 +# previewBody: blog_previews/20241210.html +# image: images/simplexonflux.png +# imageWide: true +draft: true +permalink: "/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.html" +--- + +# SimpleX network: preset servers operated by Flux, business chats and more with v6.2 of the apps + +**Will be published:** Dec 10, 2024 + +This is a placeholder page for the upcoming v6.2 release announcement! + +- Preset servers are now operated by two companies - SimpleX Chat and Flux. Read [this post](./20241125-servers-operated-by-flux-true-privacy-and-decentralization-for-all-users.md). +- Business chats to provide support from your business to users of SimpleX network. Read [this page](../docs/BUSINESS.md). +- and more! + +## SimpleX network + +Some links to answer the most common questions: + +[How can SimpleX deliver messages without user identifiers](./20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers). + +[What are the risks to have identifiers assigned to the users](./20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements.md#why-having-users-identifiers-is-bad-for-the-users). + +[Technical details and limitations](https://github.com/simplex-chat/simplex-chat#privacy-and-security-technical-details-and-limitations). + +[Frequently asked questions](../docs/FAQ.md). + +Please also see our [website](https://simplex.chat). + +## Please support us with your donations + +Huge *thank you* to everybody who donated to SimpleX Chat! + +Prioritizing users privacy and security, and also raising the investment, would have been impossible without your support and donations. + +Also, funding the work to transition the protocols to non-profit governance model would not have been possible without the donations we received from the users. + +Our pledge to our users is that SimpleX protocols are and will remain open, and in public domain, so anybody can build the future implementations of the clients and the servers. We are building SimpleX platform based on the same principles as email and web, but much more private and secure. + +Your donations help us raise more funds — any amount, even the price of the cup of coffee, makes a big difference for us. + +See [this section](https://github.com/simplex-chat/simplex-chat/#please-support-us-with-your-donations) for the ways to donate. + +Thank you, + +Evgeny + +SimpleX Chat founder + +[1] You can also to self-host your own SimpleX servers on [Flux decentralized cloud](https://home.runonflux.io/apps/marketplace?q=simplex). + +[2] The probability of connection being de-anonymized and the number of random server choices follow this equation: `(1 - s ^ 2) ^ n = 1 - p`, where `s` is the share of attacker-controlled servers in the network, `n` is the number of random choices of entry and exit nodes for the circuit, and `p` is the probability of both entry and exit nodes, and the connection privacy being compromised. Substituting `0.02` (2%) for `s`, `0.5` (50%) for `p`, and solving this equation for `n` we obtain that `1733` random circuits have 50% probability of privacy being compromised. + +Also see [this presentation about Tor](https://ritter.vg/p/tor-v1.6.pdf), specifically the approximate calculations on page 76, and also [Tor project post](https://blog.torproject.org/announcing-vanguards-add-onion-services/) about the changes that made attack on hidden service anonymity harder, but still viable in case the it is used for a long time. diff --git a/docs/BUSINESS.md b/docs/BUSINESS.md new file mode 100755 index 0000000000..aed5fd877c --- /dev/null +++ b/docs/BUSINESS.md @@ -0,0 +1,60 @@ +--- +title: SimpleX for business +revision: 03.12.2024 +--- + +# Using SimpleX Chat in business + +SimpleX Chat (aka SimpleX) is a decentralized communication network that provides private and secure messaging. Its users are rapidly growing, and providing customer services via SimpleX can offer you a unique opportunity to engage people who are the most enthusiastic about trying out early stage technology products and services. + +This document aims to help you make the best use of SimpleX Chat if you choose to engage with its users. + +## Communcate with customers via business address + +In the same way you can connect to our "SimpleX Chat team" profile via the app, you can provide the address for your existing and prospective customers: +- to buy your product and services via chat, +- to ask any questions, make suggestions and provide feedback, +- to discover more information about your business. + +Customers who value privacy and security, and want to engage with you without sharing any personal data and minimizing any metadata that is shared with you, will be really happy to use this communication channel. + +From v6.2 SimpleX Chat supports business addresses. Their design allows you to accept requests from multiple customers, with the app creating a new business chat with each of them. + +Business chats operate in a way similar to dedicated customer support systems by combining features of direct conversations and groups, and the only widely used messenger that provides such functionality is WeChat with Chinese business accounts. + +When a customer connects to your business via the business contact address, a new conversation is created. Similarly to how direct chats work, the customer will see the name and logo of your business, and you will see the name and avatar of your customer. + +But the business conversation works as a group - once the customer is connected, other people from the business can be added to the conversation, and the customers will see who are they talking with. This can be used to transfer business conversation to another person, or for escalation - in the same way as with the dedicated support systems. + +SimpleX Chat profile with the business address can be used in one of these ways: +- for small teams it can be managed by one person running the app on their desktop computer, who would respond to customer questions and manually add to the conversation other people in the business, as required. +- if you have multiple support agents, you can run business profile in CLI client running in cloud VM or on any machine with high speed Internet (see Technical advice below), and they can connect to this client from desktop client, in turns. This is how we use our business profile ourselves, even though it requires some configuration. You can manage 100s of thousands of connected customers in this way. +- For larger teams, it would be appropriate to have this profile managed by chat bot that can reply to some simple questions, and to add support agents, based on their availability and the questions asked. These scenarios would require programming a chat bot, and we are currently working to simplify it. + +In any case, it is important that the client application remains running and connected to the Internet for you to receive support requests. + +## Customer broadcasts + +While currently supported only via CLI clients (or via chat console in desktop and mobile clients), it can be used to broadcast important announcements to all connected customers. We will be adding this feature to desktop clients soon. We use it to broadcast release updates to a very large number of users who are connected to our own support profile. + +## Community groups and promotion in group directory + +In addition to providing support to clients individually, you can create a community group, and promote it via our experimental and growing [directory of public groups](./DIRECTORY.md). Community groups require ongoing moderation. + +## Limitations + +With all advantages in privacy and security of e2e encryption in SimpleX Chat, there are some important limitations: +- **protecting your data from loss is your responsibility**. This is the price of privacy - if you lose your device, or database passphrase, there is absolutely no way we would be able to support you to recover access. There are ways to work around these limitations. +- **you cannot access the same profile from multiple devices**. For all communication products it's a basic expectation, and yet there is not a single one that delivered it without some very serious privacy and security compromises. Better solutions are possible, and we will be implementing it, but reasonably secure approach is much more complex to implement than what is affordable at the current stage. You can access mobile or CLI profile from desktop, and the latter allows to use one profile by multiple people in turns, as we explain below. +- **your owner role in the groups cannot be restored if you lose the device**. The solution is to create owner profiles on multiple devices for all your important groups. This way if you lose device or data for one of profiles, you won't lose control of the group, and you can add a new one. Think about it as about keys to your cryptowallet. +- **current groups are highly experimental**. Message delivery can be delayed or fail in some cases, lists of members can be out of sync. There are approaches to make them more stable we use for our groups. + +## Technical advice + +### Running SimpleX Chat in the cloud + +### Using remote profiles via Desktop app + +## Organizations using SimpleX Chat for customer service, support and sales + +Please let us know if you use SimpleX Chat to communicate with your customers and want to be included in this list. diff --git a/website/langs/en.json b/website/langs/en.json index a9b31f2a6e..e57b3375de 100644 --- a/website/langs/en.json +++ b/website/langs/en.json @@ -238,6 +238,7 @@ "docs-dropdown-10": "Transparency", "docs-dropdown-11": "FAQ", "docs-dropdown-12": "Security", + "docs-dropdown-14": "SimpleX for business", "newer-version-of-eng-msg": "There is a newer version of this page in English.", "click-to-see": "Click to see", "menu": "Menu", diff --git a/website/src/_data/docs_dropdown.json b/website/src/_data/docs_dropdown.json index 88fd5826dd..f97c2aeff2 100644 --- a/website/src/_data/docs_dropdown.json +++ b/website/src/_data/docs_dropdown.json @@ -5,12 +5,12 @@ "url": "/docs/simplex.html" }, { - "title": "docs-dropdown-8", - "url": "/docs/directory.html" + "title": "docs-dropdown-14", + "url": "/docs/business.html" }, { - "title": "docs-dropdown-2", - "url": "/docs/android.html" + "title": "docs-dropdown-8", + "url": "/docs/directory.html" }, { "title": "docs-dropdown-3", @@ -28,10 +28,6 @@ "title": "docs-dropdown-6", "url": "/docs/webrtc.html" }, - { - "title": "docs-dropdown-7", - "url": "/docs/translations.html" - }, { "title": "docs-dropdown-9", "url": "/downloads/" diff --git a/website/src/_data/docs_sidebar.json b/website/src/_data/docs_sidebar.json index e9ccb7ce02..e370ccc078 100644 --- a/website/src/_data/docs_sidebar.json +++ b/website/src/_data/docs_sidebar.json @@ -18,6 +18,7 @@ "menu": "Reference", "data": [ "SIMPLEX.md", + "BUSINESS.md", "DIRECTORY.md", "ANDROID.md", "CLI.md", diff --git a/website/src/_includes/navbar.html b/website/src/_includes/navbar.html index 5f9d4be3f3..6e69c559b0 100644 --- a/website/src/_includes/navbar.html +++ b/website/src/_includes/navbar.html @@ -80,6 +80,14 @@
+
  • {{ "docs-dropdown-7" | i18n({}, lang ) | safe }} +
  • +
  • {{ "docs-dropdown-2" | i18n({}, lang ) | safe }} +
  • {{ "chat-bot-example" | i18n({}, lang ) | safe }} From f3be723cde619ff4ce93402dc0e15cdeea42a85f Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 3 Dec 2024 18:40:58 +0000 Subject: [PATCH 21/22] ios: export localizations --- .../bg.xcloc/Localized Contents/bg.xliff | 130 +++++++++++----- .../cs.xcloc/Localized Contents/cs.xliff | 128 ++++++++++++---- .../de.xcloc/Localized Contents/de.xliff | 130 +++++++++++----- .../en.xcloc/Localized Contents/en.xliff | 145 +++++++++++++----- .../es.xcloc/Localized Contents/es.xliff | 130 +++++++++++----- .../fi.xcloc/Localized Contents/fi.xliff | 128 ++++++++++++---- .../fr.xcloc/Localized Contents/fr.xliff | 130 +++++++++++----- .../hu.xcloc/Localized Contents/hu.xliff | 130 +++++++++++----- .../it.xcloc/Localized Contents/it.xliff | 130 +++++++++++----- .../ja.xcloc/Localized Contents/ja.xliff | 128 ++++++++++++---- .../nl.xcloc/Localized Contents/nl.xliff | 130 +++++++++++----- .../pl.xcloc/Localized Contents/pl.xliff | 130 +++++++++++----- .../ru.xcloc/Localized Contents/ru.xliff | 130 +++++++++++----- .../th.xcloc/Localized Contents/th.xliff | 128 ++++++++++++---- .../tr.xcloc/Localized Contents/tr.xliff | 130 +++++++++++----- .../uk.xcloc/Localized Contents/uk.xliff | 130 +++++++++++----- .../Localized Contents/zh-Hans.xliff | 130 +++++++++++----- 17 files changed, 1626 insertions(+), 591 deletions(-) diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index e483406fe5..0e8e30d8aa 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -1199,6 +1199,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Чрез чат профил (по подразбиране) или [чрез връзка](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА). @@ -1334,6 +1338,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1412,6 +1420,14 @@ Chat theme No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Чатове @@ -2122,6 +2138,10 @@ This is your own one-time link! Изтрий и уведоми контакт No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Изтрий чат профила @@ -2132,6 +2152,10 @@ This is your own one-time link! Изтриване на чат профила? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Изтрий връзката @@ -2384,6 +2408,10 @@ This is your own one-time link! Лични съобщения chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Личните съобщения между членовете са забранени в тази група. @@ -3502,41 +3530,6 @@ Error: %2$@ Групови линкове No comment provided by engineer. - - Members can add message reactions. - Членовете на групата могат да добавят реакции към съобщенията. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа) - No comment provided by engineer. - - - Members can send SimpleX links. - Членовете на групата могат да изпращат SimpleX линкове. - No comment provided by engineer. - - - Members can send direct messages. - Членовете на групата могат да изпращат лични съобщения. - No comment provided by engineer. - - - Members can send disappearing messages. - Членовете на групата могат да изпращат изчезващи съобщения. - No comment provided by engineer. - - - Members can send files and media. - Членовете на групата могат да изпращат файлове и медия. - No comment provided by engineer. - - - Members can send voice messages. - Членовете на групата могат да изпращат гласови съобщения. - No comment provided by engineer. - Group message: Групово съобщение: @@ -3929,6 +3922,10 @@ More improvements are coming soon! Покани членове No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Покани в групата @@ -4085,6 +4082,14 @@ This is your link for group %@! Напусни swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Напусни групата @@ -4212,6 +4217,10 @@ This is your link for group %@! Member inactive item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Ролята на члена ще бъде променена на "%@". Всички членове на групата ще бъдат уведомени. @@ -4222,11 +4231,50 @@ This is your link for group %@! Ролята на члена ще бъде променена на "%@". Членът ще получи нова покана. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Членът ще бъде премахнат от групата - това не може да бъде отменено! No comment provided by engineer. + + Members can add message reactions. + Членовете на групата могат да добавят реакции към съобщенията. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа) + No comment provided by engineer. + + + Members can send SimpleX links. + Членовете на групата могат да изпращат SimpleX линкове. + No comment provided by engineer. + + + Members can send direct messages. + Членовете на групата могат да изпращат лични съобщения. + No comment provided by engineer. + + + Members can send disappearing messages. + Членовете на групата могат да изпращат изчезващи съобщения. + No comment provided by engineer. + + + Members can send files and media. + Членовете на групата могат да изпращат файлове и медия. + No comment provided by engineer. + + + Members can send voice messages. + Членовете на групата могат да изпращат гласови съобщения. + No comment provided by engineer. + Menus No comment provided by engineer. @@ -4764,6 +4812,10 @@ Requires compatible VPN. Няма се използват Onion хостове. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Само потребителските устройства съхраняват потребителски профили, контакти, групи и съобщения, изпратени с **двуслойно криптиране от край до край**. @@ -5142,6 +5194,10 @@ Error: %@ Поверителност и сигурност No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Поверителността преосмислена @@ -7882,6 +7938,10 @@ Repeat connection request? Все още ще получавате обаждания и известия от заглушени профили, когато са активни. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Ще спрете да получавате съобщения от тази група. Историята на чата ще бъде запазена. 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 7efd941d11..10f6355692 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -1161,6 +1161,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Podle chat profilu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1293,6 +1297,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1369,6 +1377,14 @@ Chat theme No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Chaty @@ -2051,6 +2067,10 @@ This is your own one-time link! Delete and notify contact No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Smazat chat profil @@ -2061,6 +2081,10 @@ This is your own one-time link! Smazat chat profil? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Smazat připojení @@ -2309,6 +2333,10 @@ This is your own one-time link! Přímé zprávy chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Přímé zprávy mezi členy jsou v této skupině zakázány. @@ -3389,40 +3417,6 @@ Error: %2$@ Odkazy na skupiny No comment provided by engineer. - - Members can add message reactions. - Členové skupin mohou přidávat reakce na zprávy. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin) - No comment provided by engineer. - - - Members can send SimpleX links. - No comment provided by engineer. - - - Members can send direct messages. - Členové skupiny mohou posílat přímé zprávy. - No comment provided by engineer. - - - Members can send disappearing messages. - Členové skupiny mohou posílat mizící zprávy. - No comment provided by engineer. - - - Members can send files and media. - Členové skupiny mohou posílat soubory a média. - No comment provided by engineer. - - - Members can send voice messages. - Členové skupiny mohou posílat hlasové zprávy. - No comment provided by engineer. - Group message: Skupinová zpráva: @@ -3800,6 +3794,10 @@ More improvements are coming soon! Pozvat členy No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Pozvat do skupiny @@ -3948,6 +3946,14 @@ This is your link for group %@! Opustit swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Opustit skupinu @@ -4072,6 +4078,10 @@ This is your link for group %@! Member inactive item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Role člena se změní na "%@". Všichni členové skupiny budou upozorněni. @@ -4082,11 +4092,49 @@ This is your link for group %@! Role člena se změní na "%@". Člen obdrží novou pozvánku. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Člen bude odstraněn ze skupiny - toto nelze vzít zpět! No comment provided by engineer. + + Members can add message reactions. + Členové skupin mohou přidávat reakce na zprávy. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin) + No comment provided by engineer. + + + Members can send SimpleX links. + No comment provided by engineer. + + + Members can send direct messages. + Členové skupiny mohou posílat přímé zprávy. + No comment provided by engineer. + + + Members can send disappearing messages. + Členové skupiny mohou posílat mizící zprávy. + No comment provided by engineer. + + + Members can send files and media. + Členové skupiny mohou posílat soubory a média. + No comment provided by engineer. + + + Members can send voice messages. + Členové skupiny mohou posílat hlasové zprávy. + No comment provided by engineer. + Menus No comment provided by engineer. @@ -4605,6 +4653,10 @@ Vyžaduje povolení sítě VPN. Onion hostitelé nebudou použiti. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odeslané s **2vrstvým šifrováním typu end-to-end**. @@ -4967,6 +5019,10 @@ Error: %@ Ochrana osobních údajů a zabezpečení No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Nové vymezení soukromí @@ -7614,6 +7670,10 @@ Repeat connection request? Stále budete přijímat volání a upozornění od umlčených profilů pokud budou aktivní. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Přestanete dostávat zprávy z této skupiny. Historie chatu bude zachována. 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 afce946eea..35e11b4861 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -1246,6 +1246,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1388,6 +1392,10 @@ Chat-Profile wechseln authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1471,6 +1479,14 @@ Chat-Design No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Chats @@ -2225,6 +2241,10 @@ Das ist Ihr eigener Einmal-Link! Kontakt löschen und benachrichtigen No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Chat-Profil löschen @@ -2235,6 +2255,10 @@ Das ist Ihr eigener Einmal-Link! Chat-Profil löschen? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Verbindung löschen @@ -2500,6 +2524,10 @@ Das ist Ihr eigener Einmal-Link! Direkte Nachrichten chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. In dieser Gruppe sind Direktnachrichten zwischen Mitgliedern nicht erlaubt. @@ -3672,41 +3700,6 @@ Fehler: %2$@ Gruppen-Links No comment provided by engineer. - - Members can add message reactions. - Gruppenmitglieder können eine Reaktion auf Nachrichten geben. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden) - No comment provided by engineer. - - - Members can send SimpleX links. - Gruppenmitglieder können SimpleX-Links senden. - No comment provided by engineer. - - - Members can send direct messages. - Gruppenmitglieder können Direktnachrichten versenden. - No comment provided by engineer. - - - Members can send disappearing messages. - Gruppenmitglieder können verschwindende Nachrichten senden. - No comment provided by engineer. - - - Members can send files and media. - Gruppenmitglieder können Dateien und Medien senden. - No comment provided by engineer. - - - Members can send voice messages. - Gruppenmitglieder können Sprachnachrichten versenden. - No comment provided by engineer. - Group message: Grppennachricht: @@ -4106,6 +4099,10 @@ Weitere Verbesserungen sind bald verfügbar! Mitglieder einladen No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group In Gruppe einladen @@ -4264,6 +4261,14 @@ Das ist Ihr Link für die Gruppe %@! Verlassen swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Gruppe verlassen @@ -4394,6 +4399,10 @@ Das ist Ihr Link für die Gruppe %@! Mitglied inaktiv item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Die Mitgliederrolle wird auf "%@" geändert. Alle Mitglieder der Gruppe werden benachrichtigt. @@ -4404,11 +4413,50 @@ Das ist Ihr Link für die Gruppe %@! Die Mitgliederrolle wird auf "%@" geändert. Das Mitglied wird eine neue Einladung erhalten. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Das Mitglied wird aus der Gruppe entfernt. Dies kann nicht rückgängig gemacht werden! No comment provided by engineer. + + Members can add message reactions. + Gruppenmitglieder können eine Reaktion auf Nachrichten geben. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden) + No comment provided by engineer. + + + Members can send SimpleX links. + Gruppenmitglieder können SimpleX-Links senden. + No comment provided by engineer. + + + Members can send direct messages. + Gruppenmitglieder können Direktnachrichten versenden. + No comment provided by engineer. + + + Members can send disappearing messages. + Gruppenmitglieder können verschwindende Nachrichten senden. + No comment provided by engineer. + + + Members can send files and media. + Gruppenmitglieder können Dateien und Medien senden. + No comment provided by engineer. + + + Members can send voice messages. + Gruppenmitglieder können Sprachnachrichten versenden. + No comment provided by engineer. + Menus Menüs @@ -4982,6 +5030,10 @@ Dies erfordert die Aktivierung eines VPNs. Onion-Hosts werden nicht verwendet. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Nur die Endgeräte speichern die Benutzerprofile, Kontakte, Gruppen und Nachrichten, welche über eine **2-Schichten Ende-zu-Ende-Verschlüsselung** gesendet werden. @@ -5377,6 +5429,10 @@ Fehler: %@ Datenschutz & Sicherheit No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Datenschutz neu definiert @@ -8277,6 +8333,10 @@ Verbindungsanfrage wiederholen? Sie können Anrufe und Benachrichtigungen auch von stummgeschalteten Profilen empfangen, solange diese aktiv sind. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Nachrichtenverlauf wird beibehalten. 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 2301f671a4..1d7f3f16be 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -1250,6 +1250,11 @@ Business address No comment provided by engineer. + + Business chats + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1392,6 +1397,11 @@ Change user profiles authentication reason + + Chat + Chat + No comment provided by engineer. + Chat already exists Chat already exists @@ -1477,6 +1487,16 @@ Chat theme No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Chats @@ -2231,6 +2251,11 @@ This is your own one-time link! Delete and notify contact No comment provided by engineer. + + Delete chat + Delete chat + No comment provided by engineer. + Delete chat profile Delete chat profile @@ -2241,6 +2266,11 @@ This is your own one-time link! Delete chat profile? No comment provided by engineer. + + Delete chat? + Delete chat? + No comment provided by engineer. + Delete connection Delete connection @@ -2506,6 +2536,11 @@ This is your own one-time link! Direct messages chat feature + + Direct messages between members are prohibited in this chat. + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Direct messages between members are prohibited. @@ -3678,41 +3713,6 @@ Error: %2$@ Group links No comment provided by engineer. - - Members can add message reactions. - Members can add message reactions. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Members can irreversibly delete sent messages. (24 hours) - No comment provided by engineer. - - - Members can send SimpleX links. - Members can send SimpleX links. - No comment provided by engineer. - - - Members can send direct messages. - Members can send direct messages. - No comment provided by engineer. - - - Members can send disappearing messages. - Members can send disappearing messages. - No comment provided by engineer. - - - Members can send files and media. - Members can send files and media. - No comment provided by engineer. - - - Members can send voice messages. - Members can send voice messages. - No comment provided by engineer. - Group message: Group message: @@ -4112,6 +4112,11 @@ More improvements are coming soon! Invite members No comment provided by engineer. + + Invite to chat + Invite to chat + No comment provided by engineer. + Invite to group Invite to group @@ -4270,6 +4275,16 @@ This is your link for group %@! Leave swipe action + + Leave chat + Leave chat + No comment provided by engineer. + + + Leave chat? + Leave chat? + No comment provided by engineer. + Leave group Leave group @@ -4400,6 +4415,11 @@ This is your link for group %@! Member inactive item status text + + Member role will be changed to "%@". All chat members will be notified. + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Member role will be changed to "%@". All group members will be notified. @@ -4410,11 +4430,51 @@ This is your link for group %@! Member role will be changed to "%@". The member will receive a new invitation. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Member will be removed from group - this cannot be undone! No comment provided by engineer. + + Members can add message reactions. + Members can add message reactions. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Members can irreversibly delete sent messages. (24 hours) + No comment provided by engineer. + + + Members can send SimpleX links. + Members can send SimpleX links. + No comment provided by engineer. + + + Members can send direct messages. + Members can send direct messages. + No comment provided by engineer. + + + Members can send disappearing messages. + Members can send disappearing messages. + No comment provided by engineer. + + + Members can send files and media. + Members can send files and media. + No comment provided by engineer. + + + Members can send voice messages. + Members can send voice messages. + No comment provided by engineer. + Menus Menus @@ -4988,6 +5048,11 @@ Requires compatible VPN. Onion hosts will not be used. No comment provided by engineer. + + Only chat owners can change preferences. + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Only client devices store user profiles, contacts, groups, and messages. @@ -5384,6 +5449,11 @@ Error: %@ Privacy & security No comment provided by engineer. + + Privacy for your customers. + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Privacy redefined @@ -8286,6 +8356,11 @@ Repeat connection request? You will still receive calls and notifications from muted profiles when they are active. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. You will stop receiving messages from this group. Chat history will be preserved. 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 647d650698..147ad6128f 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -1246,6 +1246,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Mediante perfil (predeterminado) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1388,6 +1392,10 @@ Cambiar perfil de usuario authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1471,6 +1479,14 @@ Tema de chat No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Chats @@ -2225,6 +2241,10 @@ This is your own one-time link! Eliminar y notificar contacto No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Eliminar perfil @@ -2235,6 +2255,10 @@ This is your own one-time link! ¿Eliminar perfil? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Eliminar conexión @@ -2500,6 +2524,10 @@ This is your own one-time link! Mensajes directos chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Los mensajes directos entre miembros del grupo no están permitidos. @@ -3672,41 +3700,6 @@ Error: %2$@ Enlaces de grupo No comment provided by engineer. - - Members can add message reactions. - Los miembros pueden añadir reacciones a los mensajes. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas) - No comment provided by engineer. - - - Members can send SimpleX links. - Los miembros del grupo pueden enviar enlaces SimpleX. - No comment provided by engineer. - - - Members can send direct messages. - Los miembros del grupo pueden enviar mensajes directos. - No comment provided by engineer. - - - Members can send disappearing messages. - Los miembros del grupo pueden enviar mensajes temporales. - No comment provided by engineer. - - - Members can send files and media. - Los miembros del grupo pueden enviar archivos y multimedia. - No comment provided by engineer. - - - Members can send voice messages. - Los miembros del grupo pueden enviar mensajes de voz. - No comment provided by engineer. - Group message: Mensaje de grupo: @@ -4106,6 +4099,10 @@ More improvements are coming soon! Invitar miembros No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Invitar al grupo @@ -4264,6 +4261,14 @@ This is your link for group %@! Salir swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Salir del grupo @@ -4394,6 +4399,10 @@ This is your link for group %@! Miembro inactivo item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. El rol del miembro cambiará a "%@" y se notificará al grupo. @@ -4404,11 +4413,50 @@ This is your link for group %@! El rol del miembro cambiará a "%@" y recibirá una invitación nueva. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! El miembro será expulsado del grupo. ¡No podrá deshacerse! No comment provided by engineer. + + Members can add message reactions. + Los miembros pueden añadir reacciones a los mensajes. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas) + No comment provided by engineer. + + + Members can send SimpleX links. + Los miembros del grupo pueden enviar enlaces SimpleX. + No comment provided by engineer. + + + Members can send direct messages. + Los miembros del grupo pueden enviar mensajes directos. + No comment provided by engineer. + + + Members can send disappearing messages. + Los miembros del grupo pueden enviar mensajes temporales. + No comment provided by engineer. + + + Members can send files and media. + Los miembros del grupo pueden enviar archivos y multimedia. + No comment provided by engineer. + + + Members can send voice messages. + Los miembros del grupo pueden enviar mensajes de voz. + No comment provided by engineer. + Menus Menus @@ -4982,6 +5030,10 @@ Requiere activación de la VPN. No se usarán hosts .onion. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes enviados con **cifrado de extremo a extremo de 2 capas**. @@ -5377,6 +5429,10 @@ Error: %@ Seguridad y Privacidad No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Privacidad redefinida @@ -8277,6 +8333,10 @@ Repeat connection request? Seguirás recibiendo llamadas y notificaciones de los perfiles silenciados cuando estén activos. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Dejarás de recibir mensajes de este grupo. El historial del chat se conservará. diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index 00996b4a4f..39277bbcce 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -1154,6 +1154,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Chat-profiilin mukaan (oletus) tai [yhteyden mukaan](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1286,6 +1290,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1362,6 +1370,14 @@ Chat theme No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Keskustelut @@ -2044,6 +2060,10 @@ This is your own one-time link! Delete and notify contact No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Poista keskusteluprofiili @@ -2054,6 +2074,10 @@ This is your own one-time link! Poista keskusteluprofiili? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Poista yhteys @@ -2302,6 +2326,10 @@ This is your own one-time link! Yksityisviestit chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Yksityisviestit jäsenten välillä ovat kiellettyjä tässä ryhmässä. @@ -3379,40 +3407,6 @@ Error: %2$@ Ryhmälinkit No comment provided by engineer. - - Members can add message reactions. - Ryhmän jäsenet voivat lisätä viestireaktioita. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia) - No comment provided by engineer. - - - Members can send SimpleX links. - No comment provided by engineer. - - - Members can send direct messages. - Ryhmän jäsenet voivat lähettää suoraviestejä. - No comment provided by engineer. - - - Members can send disappearing messages. - Ryhmän jäsenet voivat lähettää katoavia viestejä. - No comment provided by engineer. - - - Members can send files and media. - Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa. - No comment provided by engineer. - - - Members can send voice messages. - Ryhmän jäsenet voivat lähettää ääniviestejä. - No comment provided by engineer. - Group message: Ryhmäviesti: @@ -3790,6 +3784,10 @@ More improvements are coming soon! Kutsu jäseniä No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Kutsu ryhmään @@ -3938,6 +3936,14 @@ This is your link for group %@! Poistu swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Poistu ryhmästä @@ -4062,6 +4068,10 @@ This is your link for group %@! Member inactive item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Jäsenen rooli muuttuu muotoon "%@". Kaikille ryhmän jäsenille ilmoitetaan asiasta. @@ -4072,11 +4082,49 @@ This is your link for group %@! Jäsenen rooli muutetaan muotoon "%@". Jäsen saa uuden kutsun. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Jäsen poistetaan ryhmästä - tätä ei voi perua! No comment provided by engineer. + + Members can add message reactions. + Ryhmän jäsenet voivat lisätä viestireaktioita. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia) + No comment provided by engineer. + + + Members can send SimpleX links. + No comment provided by engineer. + + + Members can send direct messages. + Ryhmän jäsenet voivat lähettää suoraviestejä. + No comment provided by engineer. + + + Members can send disappearing messages. + Ryhmän jäsenet voivat lähettää katoavia viestejä. + No comment provided by engineer. + + + Members can send files and media. + Ryhmän jäsenet voivat lähettää tiedostoja ja mediaa. + No comment provided by engineer. + + + Members can send voice messages. + Ryhmän jäsenet voivat lähettää ääniviestejä. + No comment provided by engineer. + Menus No comment provided by engineer. @@ -4594,6 +4642,10 @@ Edellyttää VPN:n sallimista. Onion-isäntiä ei käytetä. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Vain asiakaslaitteet tallentavat käyttäjäprofiileja, yhteystietoja, ryhmiä ja viestejä, jotka on lähetetty **kaksinkertaisella päästä päähän -salauksella**. @@ -4955,6 +5007,10 @@ Error: %@ Yksityisyys ja turvallisuus No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Yksityisyys uudelleen määritettynä @@ -7599,6 +7655,10 @@ Repeat connection request? Saat edelleen puheluita ja ilmoituksia mykistetyiltä profiileilta, kun ne ovat aktiivisia. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Et enää saa viestejä tästä ryhmästä. Keskusteluhistoria säilytetään. 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 9498c255c8..c2030ab657 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -1234,6 +1234,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Par profil de chat (par défaut) ou [par connexion](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1375,6 +1379,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1458,6 +1466,14 @@ Thème de chat No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Discussions @@ -2198,6 +2214,10 @@ Il s'agit de votre propre lien unique ! Supprimer et en informer le contact No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Supprimer le profil de chat @@ -2208,6 +2228,10 @@ Il s'agit de votre propre lien unique ! Supprimer le profil du chat ? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Supprimer la connexion @@ -2472,6 +2496,10 @@ Il s'agit de votre propre lien unique ! Messages directs chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Les messages directs entre membres sont interdits dans ce groupe. @@ -3632,41 +3660,6 @@ Erreur : %2$@ Liens de groupe No comment provided by engineer. - - Members can add message reactions. - Les membres du groupe peuvent ajouter des réactions aux messages. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures) - No comment provided by engineer. - - - Members can send SimpleX links. - Les membres du groupe peuvent envoyer des liens SimpleX. - No comment provided by engineer. - - - Members can send direct messages. - Les membres du groupe peuvent envoyer des messages directs. - No comment provided by engineer. - - - Members can send disappearing messages. - Les membres du groupes peuvent envoyer des messages éphémères. - No comment provided by engineer. - - - Members can send files and media. - Les membres du groupe peuvent envoyer des fichiers et des médias. - No comment provided by engineer. - - - Members can send voice messages. - Les membres du groupe peuvent envoyer des messages vocaux. - No comment provided by engineer. - Group message: Message du groupe : @@ -4064,6 +4057,10 @@ D'autres améliorations sont à venir ! Inviter des membres No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Inviter au groupe @@ -4222,6 +4219,14 @@ Voici votre lien pour le groupe %@ ! Quitter swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Quitter le groupe @@ -4352,6 +4357,10 @@ Voici votre lien pour le groupe %@ ! Membre inactif item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Le rôle du membre sera changé pour "%@". Tous les membres du groupe en seront informés. @@ -4362,11 +4371,50 @@ Voici votre lien pour le groupe %@ ! Le rôle du membre sera changé pour "%@". Ce membre recevra une nouvelle invitation. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Ce membre sera retiré du groupe - impossible de revenir en arrière ! No comment provided by engineer. + + Members can add message reactions. + Les membres du groupe peuvent ajouter des réactions aux messages. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures) + No comment provided by engineer. + + + Members can send SimpleX links. + Les membres du groupe peuvent envoyer des liens SimpleX. + No comment provided by engineer. + + + Members can send direct messages. + Les membres du groupe peuvent envoyer des messages directs. + No comment provided by engineer. + + + Members can send disappearing messages. + Les membres du groupes peuvent envoyer des messages éphémères. + No comment provided by engineer. + + + Members can send files and media. + Les membres du groupe peuvent envoyer des fichiers et des médias. + No comment provided by engineer. + + + Members can send voice messages. + Les membres du groupe peuvent envoyer des messages vocaux. + No comment provided by engineer. + Menus Menus @@ -4928,6 +4976,10 @@ Nécessite l'activation d'un VPN. Les hôtes .onion ne seront pas utilisés. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. 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**. @@ -5317,6 +5369,10 @@ Erreur : %@ Vie privée et sécurité No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined La vie privée redéfinie @@ -8181,6 +8237,10 @@ Répéter la demande de connexion ? Vous continuerez à recevoir des appels et des notifications des profils mis en sourdine lorsqu'ils sont actifs. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Vous ne recevrez plus de messages de ce groupe. L'historique du chat sera conservé. diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff index a17a6430d1..437d97274d 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -1246,6 +1246,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). A csevegési profillal (alapértelmezett), vagy a [kapcsolattal] (https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BÉTA). @@ -1388,6 +1392,10 @@ Felhasználói profilok megváltoztatása authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1471,6 +1479,14 @@ Csevegés témája No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Csevegések @@ -2225,6 +2241,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Törlés, és az ismerős értesítése No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Csevegési profil törlése @@ -2235,6 +2255,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Csevegési profil törlése? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Kapcsolat törlése @@ -2500,6 +2524,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Közvetlen üzenetek chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. A közvetlen üzenetek küldése a tagok között le van tiltva ebben a csoportban. @@ -3672,41 +3700,6 @@ Hiba: %2$@ Csoporthivatkozások No comment provided by engineer. - - Members can add message reactions. - Csoporttagok üzenetreakciókat adhatnak hozzá. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra) - No comment provided by engineer. - - - Members can send SimpleX links. - A csoport tagjai küldhetnek SimpleX-hivatkozásokat. - No comment provided by engineer. - - - Members can send direct messages. - A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket. - No comment provided by engineer. - - - Members can send disappearing messages. - A csoport tagjai küldhetnek eltűnő üzeneteket. - No comment provided by engineer. - - - Members can send files and media. - A csoport tagjai küldhetnek fájlokat és médiatartalmakat. - No comment provided by engineer. - - - Members can send voice messages. - A csoport tagjai küldhetnek hangüzeneteket. - No comment provided by engineer. - Group message: Csoport üzenet: @@ -4106,6 +4099,10 @@ További fejlesztések hamarosan! Tagok meghívása No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Meghívás a csoportba @@ -4264,6 +4261,14 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Elhagyás swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Csoport elhagyása @@ -4394,6 +4399,10 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Inaktív tag item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. A tag szerepköre meg fog változni erre: „%@”. A csoportban az összes tag értesítve lesz. @@ -4404,11 +4413,50 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! A tag szerepköre meg fog változni erre: „%@”. A tag új meghívást fog kapni. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! A tag eltávolítása a csoportból - ez a művelet nem vonható vissza! No comment provided by engineer. + + Members can add message reactions. + Csoporttagok üzenetreakciókat adhatnak hozzá. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra) + No comment provided by engineer. + + + Members can send SimpleX links. + A csoport tagjai küldhetnek SimpleX-hivatkozásokat. + No comment provided by engineer. + + + Members can send direct messages. + A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket. + No comment provided by engineer. + + + Members can send disappearing messages. + A csoport tagjai küldhetnek eltűnő üzeneteket. + No comment provided by engineer. + + + Members can send files and media. + A csoport tagjai küldhetnek fájlokat és médiatartalmakat. + No comment provided by engineer. + + + Members can send voice messages. + A csoport tagjai küldhetnek hangüzeneteket. + No comment provided by engineer. + Menus Menük @@ -4982,6 +5030,10 @@ VPN engedélyezése szükséges. Onion-kiszolgálók nem lesznek használva. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Csak az eszközök alkalmazásai tárolják a felhasználó-profilokat, névjegyeket, csoportokat és a **2 rétegű végpontok közötti titkosítással** küldött üzeneteket. @@ -5377,6 +5429,10 @@ Hiba: %@ Adatvédelem és biztonság No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Adatvédelem újraértelmezve @@ -8277,6 +8333,10 @@ Kapcsolatkérés megismétlése? Továbbra is kap hívásokat és értesítéseket a némított profiloktól, ha azok aktívak. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Ettől a csoporttól nem fog értesítéseket kapni. A csevegési előzmények megmaradnak. diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index 0992a1f6bc..f20b0515db 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -1246,6 +1246,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1388,6 +1392,10 @@ Modifica profili utente authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1471,6 +1479,14 @@ Tema della chat No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Chat @@ -2225,6 +2241,10 @@ Questo è il tuo link una tantum! Elimina e avvisa il contatto No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Elimina il profilo di chat @@ -2235,6 +2255,10 @@ Questo è il tuo link una tantum! Eliminare il profilo di chat? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Elimina connessione @@ -2500,6 +2524,10 @@ Questo è il tuo link una tantum! Messaggi diretti chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. I messaggi diretti tra i membri sono vietati in questo gruppo. @@ -3672,41 +3700,6 @@ Errore: %2$@ Link del gruppo No comment provided by engineer. - - Members can add message reactions. - I membri del gruppo possono aggiungere reazioni ai messaggi. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore) - No comment provided by engineer. - - - Members can send SimpleX links. - I membri del gruppo possono inviare link di Simplex. - No comment provided by engineer. - - - Members can send direct messages. - I membri del gruppo possono inviare messaggi diretti. - No comment provided by engineer. - - - Members can send disappearing messages. - I membri del gruppo possono inviare messaggi a tempo. - No comment provided by engineer. - - - Members can send files and media. - I membri del gruppo possono inviare file e contenuti multimediali. - No comment provided by engineer. - - - Members can send voice messages. - I membri del gruppo possono inviare messaggi vocali. - No comment provided by engineer. - Group message: Messaggio del gruppo: @@ -4106,6 +4099,10 @@ Altri miglioramenti sono in arrivo! Invita membri No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Invita al gruppo @@ -4264,6 +4261,14 @@ Questo è il tuo link per il gruppo %@! Esci swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Esci dal gruppo @@ -4394,6 +4399,10 @@ Questo è il tuo link per il gruppo %@! Membro inattivo item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Il ruolo del membro verrà cambiato in "%@". Tutti i membri del gruppo verranno avvisati. @@ -4404,11 +4413,50 @@ Questo è il tuo link per il gruppo %@! Il ruolo del membro verrà cambiato in "%@". Il membro riceverà un invito nuovo. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Il membro verrà rimosso dal gruppo, non è reversibile! No comment provided by engineer. + + Members can add message reactions. + I membri del gruppo possono aggiungere reazioni ai messaggi. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore) + No comment provided by engineer. + + + Members can send SimpleX links. + I membri del gruppo possono inviare link di Simplex. + No comment provided by engineer. + + + Members can send direct messages. + I membri del gruppo possono inviare messaggi diretti. + No comment provided by engineer. + + + Members can send disappearing messages. + I membri del gruppo possono inviare messaggi a tempo. + No comment provided by engineer. + + + Members can send files and media. + I membri del gruppo possono inviare file e contenuti multimediali. + No comment provided by engineer. + + + Members can send voice messages. + I membri del gruppo possono inviare messaggi vocali. + No comment provided by engineer. + Menus Menu @@ -4982,6 +5030,10 @@ Richiede l'attivazione della VPN. Gli host Onion non verranno usati. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Solo i dispositivi client archiviano profili utente, i contatti, i gruppi e i messaggi inviati con la **crittografia end-to-end a 2 livelli**. @@ -5377,6 +5429,10 @@ Errore: %@ Privacy e sicurezza No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Privacy ridefinita @@ -8277,6 +8333,10 @@ Ripetere la richiesta di connessione? Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Non riceverai più messaggi da questo gruppo. La cronologia della chat verrà conservata. diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff index 32d2db371b..288276124c 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -1178,6 +1178,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). チャット プロファイル経由 (デフォルト) または [接続経由](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1310,6 +1314,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1387,6 +1395,14 @@ チャットテーマ No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats チャット @@ -2088,6 +2104,10 @@ This is your own one-time link! Delete and notify contact No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile チャットのプロフィールを削除する @@ -2098,6 +2118,10 @@ This is your own one-time link! チャットのプロフィールを削除しますか? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection 接続を削除する @@ -2348,6 +2372,10 @@ This is your own one-time link! ダイレクトメッセージ chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. このグループではメンバー間のダイレクトメッセージが使用禁止です。 @@ -3426,40 +3454,6 @@ Error: %2$@ グループのリンク No comment provided by engineer. - - Members can add message reactions. - グループメンバーはメッセージへのリアクションを追加できます。 - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - グループのメンバーがメッセージを完全削除することができます。(24時間) - No comment provided by engineer. - - - Members can send SimpleX links. - No comment provided by engineer. - - - Members can send direct messages. - グループのメンバーがダイレクトメッセージを送信できます。 - No comment provided by engineer. - - - Members can send disappearing messages. - グループのメンバーが消えるメッセージを送信できます。 - No comment provided by engineer. - - - Members can send files and media. - グループメンバーはファイルやメディアを送信できます。 - No comment provided by engineer. - - - Members can send voice messages. - グループのメンバーが音声メッセージを送信できます。 - No comment provided by engineer. - Group message: グループメッセージ: @@ -3837,6 +3831,10 @@ More improvements are coming soon! メンバーを招待する No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group グループに招待する @@ -3985,6 +3983,14 @@ This is your link for group %@! 脱退 swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group グループを脱退 @@ -4109,6 +4115,10 @@ This is your link for group %@! Member inactive item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. メンバーの役割が "%@" に変更されます。 グループメンバー全員に通知されます。 @@ -4119,11 +4129,49 @@ This is your link for group %@! メンバーの役割が "%@" に変更されます。 メンバーは新たな招待を受け取ります。 No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! メンバーをグループから除名する (※元に戻せません※)! No comment provided by engineer. + + Members can add message reactions. + グループメンバーはメッセージへのリアクションを追加できます。 + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + グループのメンバーがメッセージを完全削除することができます。(24時間) + No comment provided by engineer. + + + Members can send SimpleX links. + No comment provided by engineer. + + + Members can send direct messages. + グループのメンバーがダイレクトメッセージを送信できます。 + No comment provided by engineer. + + + Members can send disappearing messages. + グループのメンバーが消えるメッセージを送信できます。 + No comment provided by engineer. + + + Members can send files and media. + グループメンバーはファイルやメディアを送信できます。 + No comment provided by engineer. + + + Members can send voice messages. + グループのメンバーが音声メッセージを送信できます。 + No comment provided by engineer. + Menus No comment provided by engineer. @@ -4643,6 +4691,10 @@ VPN を有効にする必要があります。 オニオンのホストが使われません。 No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. **2 レイヤーのエンドツーエンド暗号化**を使用して送信されたユーザー プロファイル、連絡先、グループ、メッセージを保存できるのはクライアント デバイスのみです。 @@ -5005,6 +5057,10 @@ Error: %@ プライバシーとセキュリティ No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined プライバシーの基準を新境地に @@ -7641,6 +7697,10 @@ Repeat connection request? ミュートされたプロフィールがアクティブな場合でも、そのプロフィールからの通話や通知は引き続き受信します。 No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. このグループからのメッセージが届かなくなります。チャットの履歴が残ります。 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 b9cba70c3a..6bf4808025 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -1246,6 +1246,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Via chatprofiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1388,6 +1392,10 @@ Gebruikersprofielen wijzigen authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1471,6 +1479,14 @@ Chat thema No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Chats @@ -2225,6 +2241,10 @@ Dit is uw eigen eenmalige link! Verwijderen en contact op de hoogte stellen No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Chatprofiel verwijderen @@ -2235,6 +2255,10 @@ Dit is uw eigen eenmalige link! Chatprofiel verwijderen? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Verbinding verwijderen @@ -2500,6 +2524,10 @@ Dit is uw eigen eenmalige link! Directe berichten chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Directe berichten tussen leden zijn verboden in deze groep. @@ -3672,41 +3700,6 @@ Fout: %2$@ Groep links No comment provided by engineer. - - Members can add message reactions. - Groepsleden kunnen bericht reacties toevoegen. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur) - No comment provided by engineer. - - - Members can send SimpleX links. - Groepsleden kunnen SimpleX-links verzenden. - No comment provided by engineer. - - - Members can send direct messages. - Groepsleden kunnen directe berichten sturen. - No comment provided by engineer. - - - Members can send disappearing messages. - Groepsleden kunnen verdwijnende berichten sturen. - No comment provided by engineer. - - - Members can send files and media. - Groepsleden kunnen bestanden en media verzenden. - No comment provided by engineer. - - - Members can send voice messages. - Groepsleden kunnen spraak berichten verzenden. - No comment provided by engineer. - Group message: Groep bericht: @@ -4106,6 +4099,10 @@ Binnenkort meer verbeteringen! Nodig leden uit No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Uitnodigen voor groep @@ -4264,6 +4261,14 @@ Dit is jouw link voor groep %@! Verlaten swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Groep verlaten @@ -4394,6 +4399,10 @@ Dit is jouw link voor groep %@! Lid inactief item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. De rol van lid wordt gewijzigd in "%@". Alle groepsleden worden op de hoogte gebracht. @@ -4404,11 +4413,50 @@ Dit is jouw link voor groep %@! De rol van lid wordt gewijzigd in "%@". Het lid ontvangt een nieuwe uitnodiging. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Lid wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt! No comment provided by engineer. + + Members can add message reactions. + Groepsleden kunnen bericht reacties toevoegen. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur) + No comment provided by engineer. + + + Members can send SimpleX links. + Groepsleden kunnen SimpleX-links verzenden. + No comment provided by engineer. + + + Members can send direct messages. + Groepsleden kunnen directe berichten sturen. + No comment provided by engineer. + + + Members can send disappearing messages. + Groepsleden kunnen verdwijnende berichten sturen. + No comment provided by engineer. + + + Members can send files and media. + Groepsleden kunnen bestanden en media verzenden. + No comment provided by engineer. + + + Members can send voice messages. + Groepsleden kunnen spraak berichten verzenden. + No comment provided by engineer. + Menus Menu's @@ -4982,6 +5030,10 @@ Vereist het inschakelen van VPN. Onion hosts worden niet gebruikt. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Alleen client apparaten slaan gebruikers profielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**. @@ -5377,6 +5429,10 @@ Fout: %@ Privacy en beveiliging No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Privacy opnieuw gedefinieerd @@ -8277,6 +8333,10 @@ Verbindingsverzoek herhalen? U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Je ontvangt geen berichten meer van deze groep. Je gesprek geschiedenis blijft behouden. diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index bdfe502952..ea40b78582 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -1229,6 +1229,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1370,6 +1374,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1453,6 +1461,14 @@ Motyw czatu No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Czaty @@ -2192,6 +2208,10 @@ To jest twój jednorazowy link! Usuń i powiadom kontakt No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Usuń profil czatu @@ -2202,6 +2222,10 @@ To jest twój jednorazowy link! Usunąć profil czatu? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Usuń połączenie @@ -2465,6 +2489,10 @@ To jest twój jednorazowy link! Bezpośrednie wiadomości chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Bezpośrednie wiadomości między członkami są zabronione w tej grupie. @@ -3624,41 +3652,6 @@ Błąd: %2$@ Linki grupowe No comment provided by engineer. - - Members can add message reactions. - Członkowie grupy mogą dodawać reakcje wiadomości. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny) - No comment provided by engineer. - - - Members can send SimpleX links. - Członkowie grupy mogą wysyłać linki SimpleX. - No comment provided by engineer. - - - Members can send direct messages. - Członkowie grupy mogą wysyłać bezpośrednie wiadomości. - No comment provided by engineer. - - - Members can send disappearing messages. - Członkowie grupy mogą wysyłać znikające wiadomości. - No comment provided by engineer. - - - Members can send files and media. - Członkowie grupy mogą wysyłać pliki i media. - No comment provided by engineer. - - - Members can send voice messages. - Członkowie grupy mogą wysyłać wiadomości głosowe. - No comment provided by engineer. - Group message: Wiadomość grupowa: @@ -4054,6 +4047,10 @@ More improvements are coming soon! Zaproś członków No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Zaproś do grupy @@ -4212,6 +4209,14 @@ To jest twój link do grupy %@! Opuść swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Opuść grupę @@ -4342,6 +4347,10 @@ To jest twój link do grupy %@! Członek nieaktywny item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Rola członka grupy zostanie zmieniona na "%@". Wszyscy członkowie grupy zostaną powiadomieni. @@ -4352,11 +4361,50 @@ To jest twój link do grupy %@! Rola członka zostanie zmieniona na "%@". Członek otrzyma nowe zaproszenie. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Członek zostanie usunięty z grupy - nie można tego cofnąć! No comment provided by engineer. + + Members can add message reactions. + Członkowie grupy mogą dodawać reakcje wiadomości. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny) + No comment provided by engineer. + + + Members can send SimpleX links. + Członkowie grupy mogą wysyłać linki SimpleX. + No comment provided by engineer. + + + Members can send direct messages. + Członkowie grupy mogą wysyłać bezpośrednie wiadomości. + No comment provided by engineer. + + + Members can send disappearing messages. + Członkowie grupy mogą wysyłać znikające wiadomości. + No comment provided by engineer. + + + Members can send files and media. + Członkowie grupy mogą wysyłać pliki i media. + No comment provided by engineer. + + + Members can send voice messages. + Członkowie grupy mogą wysyłać wiadomości głosowe. + No comment provided by engineer. + Menus Menu @@ -4918,6 +4966,10 @@ Wymaga włączenia VPN. Hosty onion nie będą używane. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Tylko urządzenia klienckie przechowują profile użytkowników, kontakty, grupy i wiadomości wysyłane za pomocą **2-warstwowego szyfrowania end-to-end**. @@ -5307,6 +5359,10 @@ Błąd: %@ Prywatność i bezpieczeństwo No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Redefinicja prywatności @@ -8168,6 +8224,10 @@ Powtórzyć prośbę połączenia? Nadal będziesz otrzymywać połączenia i powiadomienia z wyciszonych profili, gdy są one aktywne. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Przestaniesz otrzymywać wiadomości od tej grupy. Historia czatu zostanie zachowana. 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 6d57734259..3fd5d194de 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -1235,6 +1235,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). По профилю чата или [по соединению](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА). @@ -1376,6 +1380,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1459,6 +1467,14 @@ Тема чата No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Чаты @@ -2199,6 +2215,10 @@ This is your own one-time link! Удалить и уведомить контакт No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Удалить профиль чата @@ -2209,6 +2229,10 @@ This is your own one-time link! Удалить профиль? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Удалить соединение @@ -2473,6 +2497,10 @@ This is your own one-time link! Прямые сообщения chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Прямые сообщения между членами группы запрещены. @@ -3633,41 +3661,6 @@ Error: %2$@ Ссылки групп No comment provided by engineer. - - Members can add message reactions. - Члены группы могут добавлять реакции на сообщения. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Члены группы могут необратимо удалять отправленные сообщения. (24 часа) - No comment provided by engineer. - - - Members can send SimpleX links. - Члены группы могут отправлять ссылки SimpleX. - No comment provided by engineer. - - - Members can send direct messages. - Члены группы могут посылать прямые сообщения. - No comment provided by engineer. - - - Members can send disappearing messages. - Члены группы могут посылать исчезающие сообщения. - No comment provided by engineer. - - - Members can send files and media. - Члены группы могут слать файлы и медиа. - No comment provided by engineer. - - - Members can send voice messages. - Члены группы могут отправлять голосовые сообщения. - No comment provided by engineer. - Group message: Групповое сообщение: @@ -4064,6 +4057,10 @@ More improvements are coming soon! Пригласить членов группы No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Пригласить в группу @@ -4222,6 +4219,14 @@ This is your link for group %@! Выйти swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Выйти из группы @@ -4352,6 +4357,10 @@ This is your link for group %@! Член неактивен item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Роль члена группы будет изменена на "%@". Все члены группы получат сообщение. @@ -4362,11 +4371,50 @@ This is your link for group %@! Роль члена группы будет изменена на "%@". Будет отправлено новое приглашение. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Член группы будет удален - это действие нельзя отменить! No comment provided by engineer. + + Members can add message reactions. + Члены группы могут добавлять реакции на сообщения. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Члены группы могут необратимо удалять отправленные сообщения. (24 часа) + No comment provided by engineer. + + + Members can send SimpleX links. + Члены группы могут отправлять ссылки SimpleX. + No comment provided by engineer. + + + Members can send direct messages. + Члены группы могут посылать прямые сообщения. + No comment provided by engineer. + + + Members can send disappearing messages. + Члены группы могут посылать исчезающие сообщения. + No comment provided by engineer. + + + Members can send files and media. + Члены группы могут слать файлы и медиа. + No comment provided by engineer. + + + Members can send voice messages. + Члены группы могут отправлять голосовые сообщения. + No comment provided by engineer. + Menus Меню @@ -4928,6 +4976,10 @@ Requires compatible VPN. Onion хосты не используются. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Только пользовательские устройства хранят контакты, группы и сообщения. @@ -5317,6 +5369,10 @@ Error: %@ Конфиденциальность No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Более конфиденциальный @@ -8181,6 +8237,10 @@ Repeat connection request? Вы все равно получите звонки и уведомления в профилях без звука, когда они активные. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Вы перестанете получать сообщения от этой группы. История чата будет сохранена. diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index cec1637438..edf32b06f2 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -1146,6 +1146,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). ตามโปรไฟล์แชท (ค่าเริ่มต้น) หรือ [โดยการเชื่อมต่อ](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (เบต้า) @@ -1278,6 +1282,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1354,6 +1362,14 @@ Chat theme No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats แชท @@ -2033,6 +2049,10 @@ This is your own one-time link! Delete and notify contact No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile ลบโปรไฟล์แชท @@ -2043,6 +2063,10 @@ This is your own one-time link! ลบโปรไฟล์แชทไหม? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection ลบการเชื่อมต่อ @@ -2290,6 +2314,10 @@ This is your own one-time link! ข้อความโดยตรง chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. ข้อความโดยตรงระหว่างสมาชิกเป็นสิ่งต้องห้ามในกลุ่มนี้ @@ -3364,40 +3392,6 @@ Error: %2$@ ลิงค์กลุ่ม No comment provided by engineer. - - Members can add message reactions. - สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้ - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร - No comment provided by engineer. - - - Members can send SimpleX links. - No comment provided by engineer. - - - Members can send direct messages. - สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้ - No comment provided by engineer. - - - Members can send disappearing messages. - สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้ - No comment provided by engineer. - - - Members can send files and media. - สมาชิกกลุ่มสามารถส่งไฟล์และสื่อ - No comment provided by engineer. - - - Members can send voice messages. - สมาชิกกลุ่มสามารถส่งข้อความเสียง - No comment provided by engineer. - Group message: ข้อความกลุ่ม: @@ -3773,6 +3767,10 @@ More improvements are coming soon! เชิญสมาชิก No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group เชิญเข้าร่วมกลุ่ม @@ -3921,6 +3919,14 @@ This is your link for group %@! ออกจาก swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group ออกจากกลุ่ม @@ -4045,6 +4051,10 @@ This is your link for group %@! Member inactive item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. บทบาทของสมาชิกจะถูกเปลี่ยนเป็น "%@" สมาชิกกลุ่มทั้งหมดจะได้รับแจ้ง @@ -4055,11 +4065,49 @@ This is your link for group %@! บทบาทของสมาชิกจะถูกเปลี่ยนเป็น "%@" สมาชิกจะได้รับคำเชิญใหม่ No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! สมาชิกจะถูกลบออกจากกลุ่ม - ไม่สามารถยกเลิกได้! No comment provided by engineer. + + Members can add message reactions. + สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้ + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร + No comment provided by engineer. + + + Members can send SimpleX links. + No comment provided by engineer. + + + Members can send direct messages. + สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้ + No comment provided by engineer. + + + Members can send disappearing messages. + สมาชิกกลุ่มสามารถส่งข้อความที่จะหายไปหลังจากเวลาที่กำหนดหลังการอ่าน (disappearing messages) ได้ + No comment provided by engineer. + + + Members can send files and media. + สมาชิกกลุ่มสามารถส่งไฟล์และสื่อ + No comment provided by engineer. + + + Members can send voice messages. + สมาชิกกลุ่มสามารถส่งข้อความเสียง + No comment provided by engineer. + Menus No comment provided by engineer. @@ -4573,6 +4621,10 @@ Requires compatible VPN. โฮสต์หัวหอมจะไม่ถูกใช้ No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. เฉพาะอุปกรณ์ไคลเอนต์เท่านั้นที่จัดเก็บโปรไฟล์ผู้ใช้ ผู้ติดต่อ กลุ่ม และข้อความที่ส่งด้วย **การเข้ารหัส encrypt แบบ 2 ชั้น** @@ -4934,6 +4986,10 @@ Error: %@ ความเป็นส่วนตัวและความปลอดภัย No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined นิยามความเป็นส่วนตัวใหม่ @@ -7568,6 +7624,10 @@ Repeat connection request? คุณจะยังได้รับสายเรียกเข้าและการแจ้งเตือนจากโปรไฟล์ที่ปิดเสียงเมื่อโปรไฟล์ของเขามีการใช้งาน No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. คุณจะหยุดได้รับข้อความจากกลุ่มนี้ ประวัติการแชทจะถูกรักษาไว้ diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index 8ab4b2419d..6d69920454 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -1234,6 +1234,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Sohbet profiline göre (varsayılan) veya [bağlantıya göre](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1375,6 +1379,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1458,6 +1466,14 @@ Sohbet teması No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Sohbetler @@ -2198,6 +2214,10 @@ Bu senin kendi tek kullanımlık bağlantın! Sil ve kişiye bildir No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Sohbet profilini sil @@ -2208,6 +2228,10 @@ Bu senin kendi tek kullanımlık bağlantın! Sohbet profili silinsin mi? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Bağlantıyı sil @@ -2472,6 +2496,10 @@ Bu senin kendi tek kullanımlık bağlantın! Doğrudan mesajlar chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. Bu grupta üyeler arasında direkt mesajlaşma yasaktır. @@ -3632,41 +3660,6 @@ Hata: %2$@ Grup bağlantıları No comment provided by engineer. - - Members can add message reactions. - Grup üyeleri mesaj tepkileri ekleyebilir. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde) - No comment provided by engineer. - - - Members can send SimpleX links. - Grup üyeleri SimpleX bağlantıları gönderebilir. - No comment provided by engineer. - - - Members can send direct messages. - Grup üyeleri doğrudan mesajlar gönderebilir. - No comment provided by engineer. - - - Members can send disappearing messages. - Grup üyeleri kaybolan mesajlar gönderebilir. - No comment provided by engineer. - - - Members can send files and media. - Grup üyeleri dosyalar ve medya gönderebilir. - No comment provided by engineer. - - - Members can send voice messages. - Grup üyeleri sesli mesajlar gönderebilir. - No comment provided by engineer. - Group message: Grup mesajı: @@ -4064,6 +4057,10 @@ Daha fazla iyileştirme yakında geliyor! Üyeleri davet et No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Gruba davet et @@ -4222,6 +4219,14 @@ Bu senin grup için bağlantın %@! Ayrıl swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Gruptan ayrıl @@ -4352,6 +4357,10 @@ Bu senin grup için bağlantın %@! Üye inaktif item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Üye rolü "%@" olarak değiştirilecektir. Ve tüm grup üyeleri bilgilendirilecektir. @@ -4362,11 +4371,50 @@ Bu senin grup için bağlantın %@! Üye rolü "%@" olarak değiştirilecektir. Ve üye yeni bir davetiye alacaktır. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Üye gruptan çıkarılacaktır - bu geri alınamaz! No comment provided by engineer. + + Members can add message reactions. + Grup üyeleri mesaj tepkileri ekleyebilir. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde) + No comment provided by engineer. + + + Members can send SimpleX links. + Grup üyeleri SimpleX bağlantıları gönderebilir. + No comment provided by engineer. + + + Members can send direct messages. + Grup üyeleri doğrudan mesajlar gönderebilir. + No comment provided by engineer. + + + Members can send disappearing messages. + Grup üyeleri kaybolan mesajlar gönderebilir. + No comment provided by engineer. + + + Members can send files and media. + Grup üyeleri dosyalar ve medya gönderebilir. + No comment provided by engineer. + + + Members can send voice messages. + Grup üyeleri sesli mesajlar gönderebilir. + No comment provided by engineer. + Menus Menüler @@ -4928,6 +4976,10 @@ VPN'nin etkinleştirilmesi gerekir. Onion ana bilgisayarları kullanılmayacaktır. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Yalnızca istemci cihazlar kullanıcı profillerini, kişileri, grupları ve **2 katmanlı uçtan uca şifreleme** ile gönderilen mesajları depolar. @@ -5317,6 +5369,10 @@ Hata: %@ Gizlilik & güvenlik No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Gizlilik yeniden tanımlandı @@ -8181,6 +8237,10 @@ Bağlantı isteği tekrarlansın mı? Aktif olduklarında sessize alınmış profillerden arama ve bildirim almaya devam edersiniz. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Bu gruptan artık mesaj almayacaksınız. Sohbet geçmişi korunacaktır. diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 801b3d0c79..2f1e5d96a6 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -1246,6 +1246,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). Через профіль чату (за замовчуванням) або [за з'єднанням](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). @@ -1388,6 +1392,10 @@ Зміна профілів користувачів authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1471,6 +1479,14 @@ Тема чату No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats Чати @@ -2225,6 +2241,10 @@ This is your own one-time link! Видалити та повідомити контакт No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile Видалити профіль чату @@ -2235,6 +2255,10 @@ This is your own one-time link! Видалити профіль чату? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection Видалити підключення @@ -2500,6 +2524,10 @@ This is your own one-time link! Прямі повідомлення chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. У цій групі заборонені прямі повідомлення між учасниками. @@ -3672,41 +3700,6 @@ Error: %2$@ Групові посилання No comment provided by engineer. - - Members can add message reactions. - Учасники групи можуть додавати реакції на повідомлення. - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години) - No comment provided by engineer. - - - Members can send SimpleX links. - Учасники групи можуть надсилати посилання SimpleX. - No comment provided by engineer. - - - Members can send direct messages. - Учасники групи можуть надсилати прямі повідомлення. - No comment provided by engineer. - - - Members can send disappearing messages. - Учасники групи можуть надсилати зникаючі повідомлення. - No comment provided by engineer. - - - Members can send files and media. - Учасники групи можуть надсилати файли та медіа. - No comment provided by engineer. - - - Members can send voice messages. - Учасники групи можуть надсилати голосові повідомлення. - No comment provided by engineer. - Group message: Групове повідомлення: @@ -4106,6 +4099,10 @@ More improvements are coming soon! Запросити учасників No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group Запросити до групи @@ -4264,6 +4261,14 @@ This is your link for group %@! Залишити swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group Покинути групу @@ -4394,6 +4399,10 @@ This is your link for group %@! Користувач неактивний item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. Роль учасника буде змінено на "%@". Всі учасники групи будуть повідомлені про це. @@ -4404,11 +4413,50 @@ This is your link for group %@! Роль учасника буде змінено на "%@". Учасник отримає нове запрошення. No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! Учасник буде видалений з групи - це неможливо скасувати! No comment provided by engineer. + + Members can add message reactions. + Учасники групи можуть додавати реакції на повідомлення. + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години) + No comment provided by engineer. + + + Members can send SimpleX links. + Учасники групи можуть надсилати посилання SimpleX. + No comment provided by engineer. + + + Members can send direct messages. + Учасники групи можуть надсилати прямі повідомлення. + No comment provided by engineer. + + + Members can send disappearing messages. + Учасники групи можуть надсилати зникаючі повідомлення. + No comment provided by engineer. + + + Members can send files and media. + Учасники групи можуть надсилати файли та медіа. + No comment provided by engineer. + + + Members can send voice messages. + Учасники групи можуть надсилати голосові повідомлення. + No comment provided by engineer. + Menus Меню @@ -4982,6 +5030,10 @@ Requires compatible VPN. Onion хости не будуть використовуватися. No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. Тільки клієнтські пристрої зберігають профілі користувачів, контакти, групи та повідомлення, надіслані за допомогою **2-шарового наскрізного шифрування**. @@ -5377,6 +5429,10 @@ Error: %@ Конфіденційність і безпека No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined Конфіденційність переглянута @@ -8277,6 +8333,10 @@ Repeat connection request? Ви все одно отримуватимете дзвінки та сповіщення від вимкнених профілів, якщо вони активні. No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. Ви перестанете отримувати повідомлення від цієї групи. Історія чату буде збережена. 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 d9cb36f971..a113c75603 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 @@ -1221,6 +1221,10 @@ Business address No comment provided by engineer. + + Business chats + No comment provided by engineer. + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). 通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。 @@ -1362,6 +1366,10 @@ Change user profiles authentication reason + + Chat + No comment provided by engineer. + Chat already exists No comment provided by engineer. @@ -1444,6 +1452,14 @@ 聊天主题 No comment provided by engineer. + + Chat will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Chat will be deleted for you - this cannot be undone! + No comment provided by engineer. + Chats 聊天 @@ -2182,6 +2198,10 @@ This is your own one-time link! 删除并通知联系人 No comment provided by engineer. + + Delete chat + No comment provided by engineer. + Delete chat profile 删除聊天资料 @@ -2192,6 +2212,10 @@ This is your own one-time link! 删除聊天资料? No comment provided by engineer. + + Delete chat? + No comment provided by engineer. + Delete connection 删除连接 @@ -2455,6 +2479,10 @@ This is your own one-time link! 私信 chat feature + + Direct messages between members are prohibited in this chat. + No comment provided by engineer. + Direct messages between members are prohibited. 此群中禁止成员之间私信。 @@ -3602,41 +3630,6 @@ Error: %2$@ 群组链接 No comment provided by engineer. - - Members can add message reactions. - 群组成员可以添加信息回应。 - No comment provided by engineer. - - - Members can irreversibly delete sent messages. (24 hours) - 群组成员可以不可撤回地删除已发送的消息 - No comment provided by engineer. - - - Members can send SimpleX links. - 群成员可发送 SimpleX 链接。 - No comment provided by engineer. - - - Members can send direct messages. - 群组成员可以私信。 - No comment provided by engineer. - - - Members can send disappearing messages. - 群组成员可以发送限时消息。 - No comment provided by engineer. - - - Members can send files and media. - 群组成员可以发送文件和媒体。 - No comment provided by engineer. - - - Members can send voice messages. - 群组成员可以发送语音消息。 - No comment provided by engineer. - Group message: 群组消息: @@ -4031,6 +4024,10 @@ More improvements are coming soon! 邀请成员 No comment provided by engineer. + + Invite to chat + No comment provided by engineer. + Invite to group 邀请加入群组 @@ -4189,6 +4186,14 @@ This is your link for group %@! 离开 swipe action + + Leave chat + No comment provided by engineer. + + + Leave chat? + No comment provided by engineer. + Leave group 离开群组 @@ -4319,6 +4324,10 @@ This is your link for group %@! 成员不活跃 item status text + + Member role will be changed to "%@". All chat members will be notified. + No comment provided by engineer. + Member role will be changed to "%@". All group members will be notified. 成员角色将更改为 "%@"。所有群成员将收到通知。 @@ -4329,11 +4338,50 @@ This is your link for group %@! 成员角色将更改为 "%@"。该成员将收到一份新的邀请。 No comment provided by engineer. + + Member will be removed from chat - this cannot be undone! + No comment provided by engineer. + Member will be removed from group - this cannot be undone! 成员将被移出群组——此操作无法撤消! No comment provided by engineer. + + Members can add message reactions. + 群组成员可以添加信息回应。 + No comment provided by engineer. + + + Members can irreversibly delete sent messages. (24 hours) + 群组成员可以不可撤回地删除已发送的消息 + No comment provided by engineer. + + + Members can send SimpleX links. + 群成员可发送 SimpleX 链接。 + No comment provided by engineer. + + + Members can send direct messages. + 群组成员可以私信。 + No comment provided by engineer. + + + Members can send disappearing messages. + 群组成员可以发送限时消息。 + No comment provided by engineer. + + + Members can send files and media. + 群组成员可以发送文件和媒体。 + No comment provided by engineer. + + + Members can send voice messages. + 群组成员可以发送语音消息。 + No comment provided by engineer. + Menus 菜单 @@ -4888,6 +4936,10 @@ Requires compatible VPN. 将不会使用 Onion 主机。 No comment provided by engineer. + + Only chat owners can change preferences. + No comment provided by engineer. + Only client devices store user profiles, contacts, groups, and messages. 只有客户端设备存储用户资料、联系人、群组和**双层端到端加密**发送的消息。 @@ -5273,6 +5325,10 @@ Error: %@ 隐私和安全 No comment provided by engineer. + + Privacy for your customers. + No comment provided by engineer. + Privacy redefined 重新定义隐私 @@ -8118,6 +8174,10 @@ Repeat connection request? 当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。 No comment provided by engineer. + + You will stop receiving messages from this chat. Chat history will be preserved. + No comment provided by engineer. + You will stop receiving messages from this group. Chat history will be preserved. 您将停止接收来自该群组的消息。聊天记录将被保留。 From b9777c92a519c4e18aae8274bda989ce14577bc3 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 3 Dec 2024 18:52:06 +0000 Subject: [PATCH 22/22] core: 6.2.0.4 (simplexmq: 6.2.0.5) --- ...0-simplex-network-v6-2-servers-by-flux-business-chats.md | 6 ------ cabal.project | 2 +- package.yaml | 2 +- scripts/nix/sha256map.nix | 2 +- simplex-chat.cabal | 2 +- src/Simplex/Chat/Remote.hs | 4 ++-- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md b/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md index d59d8e6003..55de82df47 100644 --- a/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md +++ b/blog/20241210-simplex-network-v6-2-servers-by-flux-business-chats.md @@ -52,9 +52,3 @@ Thank you, Evgeny SimpleX Chat founder - -[1] You can also to self-host your own SimpleX servers on [Flux decentralized cloud](https://home.runonflux.io/apps/marketplace?q=simplex). - -[2] The probability of connection being de-anonymized and the number of random server choices follow this equation: `(1 - s ^ 2) ^ n = 1 - p`, where `s` is the share of attacker-controlled servers in the network, `n` is the number of random choices of entry and exit nodes for the circuit, and `p` is the probability of both entry and exit nodes, and the connection privacy being compromised. Substituting `0.02` (2%) for `s`, `0.5` (50%) for `p`, and solving this equation for `n` we obtain that `1733` random circuits have 50% probability of privacy being compromised. - -Also see [this presentation about Tor](https://ritter.vg/p/tor-v1.6.pdf), specifically the approximate calculations on page 76, and also [Tor project post](https://blog.torproject.org/announcing-vanguards-add-onion-services/) about the changes that made attack on hidden service anonymity harder, but still viable in case the it is used for a long time. diff --git a/cabal.project b/cabal.project index b89dc764cb..414bae94dd 100644 --- a/cabal.project +++ b/cabal.project @@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: 38ad3c046e1bd5eb1ffe696dd24b10dd69001ba2 + tag: 4b43cb805437dc0822eb81c57b2c85e77ad333ca source-repository-package type: git diff --git a/package.yaml b/package.yaml index 98571e1342..ca29dc549b 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 6.2.0.3 +version: 6.2.0.4 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 7a812dbc6e..963ff27092 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."38ad3c046e1bd5eb1ffe696dd24b10dd69001ba2" = "0nq2a2lklbxpc049zjxa5w8c63l9l9nf08jb7pny42nmah0mlc20"; + "https://github.com/simplex-chat/simplexmq.git"."4b43cb805437dc0822eb81c57b2c85e77ad333ca" = "143cskyh3z6yxn6fnaw8biskbspa2cndc65rzziajlw13yd0wggg"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 4e339fc5da..7d8920e3e7 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: simplex-chat -version: 6.2.0.3 +version: 6.2.0.4 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat diff --git a/src/Simplex/Chat/Remote.hs b/src/Simplex/Chat/Remote.hs index 3a7d450691..ba713420fc 100644 --- a/src/Simplex/Chat/Remote.hs +++ b/src/Simplex/Chat/Remote.hs @@ -73,11 +73,11 @@ import UnliftIO.Directory (copyFile, createDirectoryIfMissing, doesDirectoryExis -- when acting as host minRemoteCtrlVersion :: AppVersion -minRemoteCtrlVersion = AppVersion [6, 2, 0, 3] +minRemoteCtrlVersion = AppVersion [6, 2, 0, 4] -- when acting as controller minRemoteHostVersion :: AppVersion -minRemoteHostVersion = AppVersion [6, 2, 0, 3] +minRemoteHostVersion = AppVersion [6, 2, 0, 4] currentAppVersion :: AppVersion currentAppVersion = AppVersion SC.version