[](https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/)||
diff --git a/apps/ios/Shared/ContentView.swift b/apps/ios/Shared/ContentView.swift
index d7b9fef218..c3a8ec2809 100644
--- a/apps/ios/Shared/ContentView.swift
+++ b/apps/ios/Shared/ContentView.swift
@@ -31,6 +31,7 @@ struct ContentView: View {
@State private var showWhatsNew = false
@State private var showChooseLAMode = false
@State private var showSetPasscode = false
+ @State private var waitingForOrPassedAuth = true
@State private var chatListActionSheet: ChatListActionSheet? = nil
private enum ChatListActionSheet: Identifiable {
@@ -61,6 +62,10 @@ struct ContentView: View {
}
if !showSettings, let la = chatModel.laRequest {
LocalAuthView(authRequest: la)
+ .onDisappear {
+ // this flag is separate from accessAuthenticated to show initializationView while we wait for authentication
+ waitingForOrPassedAuth = accessAuthenticated
+ }
} else if showSetPasscode {
SetAppPasscodeView {
chatModel.contentViewAccessAuthenticated = true
@@ -73,8 +78,7 @@ struct ContentView: View {
showSetPasscode = false
alertManager.showAlert(laPasscodeNotSetAlert())
}
- }
- if chatModel.chatDbStatus == nil {
+ } else if chatModel.chatDbStatus == nil && AppChatState.shared.value != .stopped && waitingForOrPassedAuth {
initializationView()
}
}
diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift
index db0f138690..21ef80cf6e 100644
--- a/apps/ios/Shared/Model/ChatModel.swift
+++ b/apps/ios/Shared/Model/ChatModel.swift
@@ -54,11 +54,13 @@ final class ChatModel: ObservableObject {
@Published var chatDbChanged = false
@Published var chatDbEncrypted: Bool?
@Published var chatDbStatus: DBMigrationResult?
+ @Published var ctrlInitInProgress: Bool = false
// local authentication
@Published var contentViewAccessAuthenticated: Bool = false
@Published var laRequest: LocalAuthRequest?
// list of chat "previews"
@Published var chats: [Chat] = []
+ @Published var deletedChats: Set = []
// map of connections network statuses, key is agent connection id
@Published var networkStatuses: Dictionary = [:]
// current chat
diff --git a/apps/ios/Shared/Model/NSESubscriber.swift b/apps/ios/Shared/Model/NSESubscriber.swift
index f52e72beab..a4a5dc8152 100644
--- a/apps/ios/Shared/Model/NSESubscriber.swift
+++ b/apps/ios/Shared/Model/NSESubscriber.swift
@@ -16,13 +16,13 @@ private var nseSubscribers: [UUID:NSESubscriber] = [:]
private let SUSPENDING_TIMEOUT: TimeInterval = 2
// timeout should be larger than SUSPENDING_TIMEOUT
-func waitNSESuspended(timeout: TimeInterval, dispatchQueue: DispatchQueue = DispatchQueue.main, suspended: @escaping (Bool) -> Void) {
+func waitNSESuspended(timeout: TimeInterval, suspended: @escaping (Bool) -> Void) {
if timeout <= SUSPENDING_TIMEOUT {
logger.warning("waitNSESuspended: small timeout \(timeout), using \(SUSPENDING_TIMEOUT + 1)")
}
var state = nseStateGroupDefault.get()
if case .suspended = state {
- dispatchQueue.async { suspended(true) }
+ DispatchQueue.main.async { suspended(true) }
return
}
let id = UUID()
@@ -45,7 +45,7 @@ func waitNSESuspended(timeout: TimeInterval, dispatchQueue: DispatchQueue = Disp
logger.debug("waitNSESuspended notifySuspended: calling suspended(\(ok))")
suspendedCalled = true
nseSubscribers.removeValue(forKey: id)
- dispatchQueue.async { suspended(ok) }
+ DispatchQueue.main.async { suspended(ok) }
}
}
diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift
index 2dbb43eecc..f2aa6cbd91 100644
--- a/apps/ios/Shared/Model/SimpleXAPI.swift
+++ b/apps/ios/Shared/Model/SimpleXAPI.swift
@@ -211,7 +211,7 @@ func apiDeleteUser(_ userId: Int64, _ delSMPQueues: Bool, viewPwd: String?) asyn
}
func apiStartChat() throws -> Bool {
- let r = chatSendCmdSync(.startChat(subscribe: true, expire: true, xftp: true))
+ let r = chatSendCmdSync(.startChat(mainApp: true))
switch r {
case .chatStarted: return true
case .chatRunning: return false
@@ -403,7 +403,7 @@ func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode) {
case let .ntfToken(token, status, ntfMode): return (token, status, ntfMode)
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED))): return (nil, nil, .off)
default:
- logger.debug("apiGetNtfToken response: \(String(describing: r), privacy: .public)")
+ logger.debug("apiGetNtfToken response: \(String(describing: r))")
return (nil, nil, .off)
}
}
@@ -691,6 +691,9 @@ func apiConnectContactViaAddress(incognito: Bool, contactId: Int64) async -> (Co
}
func apiDeleteChat(type: ChatType, id: Int64, notify: Bool? = nil) async throws {
+ let chatId = type.rawValue + id.description
+ DispatchQueue.main.async { ChatModel.shared.deletedChats.insert(chatId) }
+ defer { DispatchQueue.main.async { ChatModel.shared.deletedChats.remove(chatId) } }
let r = await chatSendCmd(.apiDeleteChat(type: type, id: id, notify: notify), bgTask: false)
if case .direct = type, case .contactDeleted = r { return }
if case .contactConnection = type, case .contactConnectionDeleted = r { return }
@@ -1215,6 +1218,8 @@ private func currentUserId(_ funcName: String) throws -> Int64 {
func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = nil, refreshInvitations: Bool = true, confirmMigrations: MigrationConfirmation? = nil) throws {
logger.debug("initializeChat")
let m = ChatModel.shared
+ m.ctrlInitInProgress = true
+ defer { m.ctrlInitInProgress = false }
(m.chatDbEncrypted, m.chatDbStatus) = chatMigrateInit(dbKey, confirmMigrations: confirmMigrations)
if m.chatDbStatus != .ok { return }
// If we migrated successfully means previous re-encryption process on database level finished successfully too
diff --git a/apps/ios/Shared/Model/SuspendChat.swift b/apps/ios/Shared/Model/SuspendChat.swift
index 965e567aa5..4494adc0e8 100644
--- a/apps/ios/Shared/Model/SuspendChat.swift
+++ b/apps/ios/Shared/Model/SuspendChat.swift
@@ -19,11 +19,13 @@ let terminationTimeout: Int = 3 // seconds
let activationDelay: TimeInterval = 1.5
+let nseSuspendTimeout: TimeInterval = 5
+
private func _suspendChat(timeout: Int) {
// this is a redundant check to prevent logical errors, like the one fixed in this PR
let state = AppChatState.shared.value
if !state.canSuspend {
- logger.error("_suspendChat called, current state: \(state.rawValue, privacy: .public)")
+ logger.error("_suspendChat called, current state: \(state.rawValue)")
} else if ChatModel.ok {
AppChatState.shared.set(.suspending)
apiSuspendChat(timeoutMicroseconds: timeout * 1000000)
@@ -124,20 +126,33 @@ func initChatAndMigrate(refreshInvitations: Bool = true) {
}
}
-func startChatAndActivate(dispatchQueue: DispatchQueue = DispatchQueue.main, _ completion: @escaping () -> Void) {
+func startChatForCall() {
+ logger.debug("DEBUGGING: startChatForCall")
+ if ChatModel.shared.chatRunning == true {
+ ChatReceiver.shared.start()
+ logger.debug("DEBUGGING: startChatForCall: after ChatReceiver.shared.start")
+ }
+ if .active != AppChatState.shared.value {
+ logger.debug("DEBUGGING: startChatForCall: before activateChat")
+ activateChat()
+ logger.debug("DEBUGGING: startChatForCall: after activateChat")
+ }
+}
+
+func startChatAndActivate(_ completion: @escaping () -> Void) {
logger.debug("DEBUGGING: startChatAndActivate")
if ChatModel.shared.chatRunning == true {
ChatReceiver.shared.start()
logger.debug("DEBUGGING: startChatAndActivate: after ChatReceiver.shared.start")
}
- if .active == AppChatState.shared.value {
+ if case .active = AppChatState.shared.value {
completion()
} else if nseStateGroupDefault.get().inactive {
activate()
} else {
// setting app state to "activating" to notify NSE that it should suspend
setAppState(.activating)
- waitNSESuspended(timeout: 10, dispatchQueue: dispatchQueue) { ok in
+ waitNSESuspended(timeout: nseSuspendTimeout) { ok in
if !ok {
// if for some reason NSE failed to suspend,
// e.g., it crashed previously without setting its state to "suspended",
diff --git a/apps/ios/Shared/SimpleXApp.swift b/apps/ios/Shared/SimpleXApp.swift
index f72ffcaaaf..e5b98589a0 100644
--- a/apps/ios/Shared/SimpleXApp.swift
+++ b/apps/ios/Shared/SimpleXApp.swift
@@ -44,8 +44,10 @@ struct SimpleXApp: App {
chatModel.appOpenUrl = url
}
.onAppear() {
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
- initChatAndMigrate()
+ if kcAppPassword.get() == nil || kcSelfDestructPassword.get() == nil {
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
+ initChatAndMigrate()
+ }
}
}
.onChange(of: scenePhase) { phase in
@@ -98,12 +100,12 @@ struct SimpleXApp: App {
if legacyDatabase, case .documents = dbContainerGroupDefault.get() {
dbContainerGroupDefault.set(.documents)
setMigrationState(.offer)
- logger.debug("SimpleXApp init: using legacy DB in documents folder: \(getAppDatabasePath(), privacy: .public)*.db")
+ logger.debug("SimpleXApp init: using legacy DB in documents folder: \(getAppDatabasePath())*.db")
} else {
dbContainerGroupDefault.set(.group)
setMigrationState(.ready)
- logger.debug("SimpleXApp init: using DB in app group container: \(getAppDatabasePath(), privacy: .public)*.db")
- logger.debug("SimpleXApp init: legacy DB\(legacyDatabase ? "" : " not", privacy: .public) present")
+ logger.debug("SimpleXApp init: using DB in app group container: \(getAppDatabasePath())*.db")
+ logger.debug("SimpleXApp init: legacy DB\(legacyDatabase ? "" : " not") present")
}
}
diff --git a/apps/ios/Shared/Views/Call/ActiveCallView.swift b/apps/ios/Shared/Views/Call/ActiveCallView.swift
index e613476a1d..a3be2e900a 100644
--- a/apps/ios/Shared/Views/Call/ActiveCallView.swift
+++ b/apps/ios/Shared/Views/Call/ActiveCallView.swift
@@ -38,13 +38,13 @@ struct ActiveCallView: View {
}
}
.onAppear {
- logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase), privacy: .public), canConnectCall \(canConnectCall)")
+ logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase)), canConnectCall \(canConnectCall)")
AppDelegate.keepScreenOn(true)
createWebRTCClient()
dismissAllSheets()
}
.onChange(of: canConnectCall) { _ in
- logger.debug("ActiveCallView: canConnectCall changed to \(canConnectCall, privacy: .public)")
+ logger.debug("ActiveCallView: canConnectCall changed to \(canConnectCall)")
createWebRTCClient()
}
.onDisappear {
diff --git a/apps/ios/Shared/Views/Call/CallController.swift b/apps/ios/Shared/Views/Call/CallController.swift
index fcd3a85584..6da8294ef8 100644
--- a/apps/ios/Shared/Views/Call/CallController.swift
+++ b/apps/ios/Shared/Views/Call/CallController.swift
@@ -130,7 +130,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
// The delay allows to accept the second call before suspending a chat
// see `.onChange(of: scenePhase)` in SimpleXApp
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { [weak self] in
- logger.debug("CallController: shouldSuspendChat \(String(describing: self?.shouldSuspendChat), privacy: .public)")
+ logger.debug("CallController: shouldSuspendChat \(String(describing: self?.shouldSuspendChat))")
if ChatModel.shared.activeCall == nil && self?.shouldSuspendChat == true {
self?.shouldSuspendChat = false
suspendChat()
@@ -142,45 +142,57 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
@objc(pushRegistry:didUpdatePushCredentials:forType:)
func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
- logger.debug("CallController: didUpdate push credentials for type \(type.rawValue, privacy: .public)")
+ logger.debug("CallController: didUpdate push credentials for type \(type.rawValue)")
}
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
- logger.debug("CallController: did receive push with type \(type.rawValue, privacy: .public)")
+ logger.debug("CallController: did receive push with type \(type.rawValue)")
if type != .voIP {
completion()
return
}
- logger.debug("CallController: initializing chat")
- if (!ChatModel.shared.chatInitialized) {
- initChatAndMigrate(refreshInvitations: false)
+ if AppChatState.shared.value == .stopped {
+ self.reportExpiredCall(payload: payload, completion)
+ return
}
- startChatAndActivate(dispatchQueue: DispatchQueue.global()) {
- self.shouldSuspendChat = true
- // There are no invitations in the model, as it was processed by NSE
- _ = try? justRefreshCallInvitations()
- // logger.debug("CallController justRefreshCallInvitations: \(String(describing: m.callInvitations))")
- // Extract the call information from the push notification payload
- let m = ChatModel.shared
- if let contactId = payload.dictionaryPayload["contactId"] as? String,
- let invitation = m.callInvitations[contactId] {
+ if (!ChatModel.shared.chatInitialized) {
+ logger.debug("CallController: initializing chat")
+ do {
+ try initializeChat(start: true, refreshInvitations: false)
+ } catch let error {
+ logger.error("CallController: initializing chat error: \(error)")
+ self.reportExpiredCall(payload: payload, completion)
+ return
+ }
+ }
+ logger.debug("CallController: initialized chat")
+ startChatForCall()
+ logger.debug("CallController: started chat")
+ self.shouldSuspendChat = true
+ // There are no invitations in the model, as it was processed by NSE
+ _ = try? justRefreshCallInvitations()
+ logger.debug("CallController: updated call invitations chat")
+ // logger.debug("CallController justRefreshCallInvitations: \(String(describing: m.callInvitations))")
+ // Extract the call information from the push notification payload
+ let m = ChatModel.shared
+ if let contactId = payload.dictionaryPayload["contactId"] as? String,
+ let invitation = m.callInvitations[contactId] {
+ let update = self.cxCallUpdate(invitation: invitation)
+ if let uuid = invitation.callkitUUID {
+ logger.debug("CallController: report pushkit call via CallKit")
let update = self.cxCallUpdate(invitation: invitation)
- if let uuid = invitation.callkitUUID {
- logger.debug("CallController: report pushkit call via CallKit")
- let update = self.cxCallUpdate(invitation: invitation)
- self.provider.reportNewIncomingCall(with: uuid, update: update) { error in
- if error != nil {
- m.callInvitations.removeValue(forKey: contactId)
- }
- // Tell PushKit that the notification is handled.
- completion()
+ self.provider.reportNewIncomingCall(with: uuid, update: update) { error in
+ if error != nil {
+ m.callInvitations.removeValue(forKey: contactId)
}
- } else {
- self.reportExpiredCall(update: update, completion)
+ // Tell PushKit that the notification is handled.
+ completion()
}
} else {
- self.reportExpiredCall(payload: payload, completion)
+ self.reportExpiredCall(update: update, completion)
}
+ } else {
+ self.reportExpiredCall(payload: payload, completion)
}
}
@@ -211,7 +223,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
}
func reportNewIncomingCall(invitation: RcvCallInvitation, completion: @escaping (Error?) -> Void) {
- logger.debug("CallController.reportNewIncomingCall, UUID=\(String(describing: invitation.callkitUUID), privacy: .public)")
+ logger.debug("CallController.reportNewIncomingCall, UUID=\(String(describing: invitation.callkitUUID))")
if CallController.useCallKit(), let uuid = invitation.callkitUUID {
if invitation.callTs.timeIntervalSinceNow >= -180 {
let update = cxCallUpdate(invitation: invitation)
@@ -351,7 +363,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
private func requestTransaction(with action: CXAction, onSuccess: @escaping () -> Void = {}) {
controller.request(CXTransaction(action: action)) { error in
if let error = error {
- logger.error("CallController.requestTransaction error requesting transaction: \(error.localizedDescription, privacy: .public)")
+ logger.error("CallController.requestTransaction error requesting transaction: \(error.localizedDescription)")
} else {
logger.debug("CallController.requestTransaction requested transaction successfully")
onSuccess()
diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift
index 62955a1040..1b4531b08c 100644
--- a/apps/ios/Shared/Views/ChatList/ChatListView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift
@@ -160,7 +160,7 @@ struct ChatListView: View {
ForEach(cs, id: \.viewId) { chat in
ChatListNavLink(chat: chat)
.padding(.trailing, -16)
- .disabled(chatModel.chatRunning != true)
+ .disabled(chatModel.chatRunning != true || chatModel.deletedChats.contains(chat.chatInfo.id))
}
.offset(x: -8)
}
diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
index 13d91881e6..0a53e0511a 100644
--- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
@@ -13,6 +13,7 @@ struct ChatPreviewView: View {
@EnvironmentObject var chatModel: ChatModel
@ObservedObject var chat: Chat
@Binding var progressByTimeout: Bool
+ @State var deleting: Bool = false
@Environment(\.colorScheme) var colorScheme
var darkGreen = Color(red: 0, green: 0.5, blue: 0)
@@ -55,6 +56,9 @@ struct ChatPreviewView: View {
.frame(maxHeight: .infinity)
}
.padding(.bottom, -8)
+ .onChange(of: chatModel.deletedChats.contains(chat.chatInfo.id)) { contains in
+ deleting = contains
+ }
}
@ViewBuilder private func chatPreviewImageOverlayIcon() -> some View {
@@ -87,13 +91,13 @@ struct ChatPreviewView: View {
let t = Text(chat.chatInfo.chatViewName).font(.title3).fontWeight(.bold)
switch chat.chatInfo {
case let .direct(contact):
- previewTitle(contact.verified == true ? verifiedIcon + t : t)
+ previewTitle(contact.verified == true ? verifiedIcon + t : t).foregroundColor(deleting ? Color.secondary : nil)
case let .group(groupInfo):
- let v = previewTitle(t)
+ let v = previewTitle(t).foregroundColor(deleting ? Color.secondary : nil)
switch (groupInfo.membership.memberStatus) {
- case .memInvited: v.foregroundColor(chat.chatInfo.incognito ? .indigo : .accentColor)
+ case .memInvited: v.foregroundColor(deleting ? .secondary : chat.chatInfo.incognito ? .indigo : .accentColor)
case .memAccepted: v.foregroundColor(.secondary)
- default: v
+ default: v.foregroundColor(deleting ? Color.secondary : nil)
}
default: previewTitle(t)
}
diff --git a/apps/ios/Shared/Views/Database/DatabaseView.swift b/apps/ios/Shared/Views/Database/DatabaseView.swift
index 72515a1fac..31b1f618e3 100644
--- a/apps/ios/Shared/Views/Database/DatabaseView.swift
+++ b/apps/ios/Shared/Views/Database/DatabaseView.swift
@@ -484,6 +484,7 @@ func deleteChatAsync() async throws {
try await apiDeleteStorage()
_ = kcDatabasePassword.remove()
storeDBPassphraseGroupDefault.set(true)
+ deleteAppDatabaseAndFiles()
}
struct DatabaseView_Previews: PreviewProvider {
diff --git a/apps/ios/Shared/Views/LocalAuth/LocalAuthView.swift b/apps/ios/Shared/Views/LocalAuth/LocalAuthView.swift
index bdb5b03e8c..9691a9efd3 100644
--- a/apps/ios/Shared/Views/LocalAuth/LocalAuthView.swift
+++ b/apps/ios/Shared/Views/LocalAuth/LocalAuthView.swift
@@ -13,19 +13,28 @@ struct LocalAuthView: View {
@EnvironmentObject var m: ChatModel
var authRequest: LocalAuthRequest
@State private var password = ""
+ @State private var allowToReact = true
var body: some View {
- PasscodeView(passcode: $password, title: authRequest.title ?? "Enter Passcode", reason: authRequest.reason, submitLabel: "Submit") {
+ PasscodeView(passcode: $password, title: authRequest.title ?? "Enter Passcode", reason: authRequest.reason, submitLabel: "Submit",
+ buttonsEnabled: $allowToReact) {
if let sdPassword = kcSelfDestructPassword.get(), authRequest.selfDestruct && password == sdPassword {
+ allowToReact = false
deleteStorageAndRestart(sdPassword) { r in
m.laRequest = nil
authRequest.completed(r)
}
return
}
- let r: LAResult = password == authRequest.password
- ? .success
- : .failed(authError: NSLocalizedString("Incorrect passcode", comment: "PIN entry"))
+ let r: LAResult
+ if password == authRequest.password {
+ if authRequest.selfDestruct && kcSelfDestructPassword.get() != nil && !m.chatInitialized {
+ initChatAndMigrate()
+ }
+ r = .success
+ } else {
+ r = .failed(authError: NSLocalizedString("Incorrect passcode", comment: "PIN entry"))
+ }
m.laRequest = nil
authRequest.completed(r)
} cancel: {
@@ -37,8 +46,27 @@ struct LocalAuthView: View {
private func deleteStorageAndRestart(_ password: String, completed: @escaping (LAResult) -> Void) {
Task {
do {
- try await stopChatAsync()
- try await deleteChatAsync()
+ /** Waiting until [initializeChat] finishes */
+ while (m.ctrlInitInProgress) {
+ try await Task.sleep(nanoseconds: 50_000000)
+ }
+ if m.chatRunning == true {
+ try await stopChatAsync()
+ }
+ if m.chatInitialized {
+ /**
+ * The following sequence can bring a user here:
+ * the user opened the app, entered app passcode, went to background, returned back, entered self-destruct code.
+ * In this case database should be closed to prevent possible situation when OS can deny database removal command
+ * */
+ chatCloseStore()
+ }
+ deleteAppDatabaseAndFiles()
+ // Clear sensitive data on screen just in case app fails to hide its views while new database is created
+ m.chatId = nil
+ m.reversedChatItems = []
+ m.chats = []
+ m.users = []
_ = kcAppPassword.set(password)
_ = kcSelfDestructPassword.remove()
await NtfManager.shared.removeAllNotifications()
@@ -53,7 +81,7 @@ struct LocalAuthView: View {
try initializeChat(start: true)
m.chatDbChanged = false
AppChatState.shared.set(.active)
- if m.currentUser != nil { return }
+ if m.currentUser != nil || !m.chatInitialized { return }
var profile: Profile? = nil
if let displayName = displayName, displayName != "" {
profile = Profile(displayName: displayName, fullName: "")
diff --git a/apps/ios/Shared/Views/LocalAuth/PasscodeView.swift b/apps/ios/Shared/Views/LocalAuth/PasscodeView.swift
index c73ded2d28..9e0d7f38b5 100644
--- a/apps/ios/Shared/Views/LocalAuth/PasscodeView.swift
+++ b/apps/ios/Shared/Views/LocalAuth/PasscodeView.swift
@@ -14,6 +14,8 @@ struct PasscodeView: View {
var reason: String? = nil
var submitLabel: LocalizedStringKey
var submitEnabled: ((String) -> Bool)?
+ @Binding var buttonsEnabled: Bool
+
var submit: () -> Void
var cancel: () -> Void
@@ -70,11 +72,11 @@ struct PasscodeView: View {
@ViewBuilder private func buttonsView() -> some View {
Button(action: cancel) {
Label("Cancel", systemImage: "multiply")
- }
+ }.disabled(!buttonsEnabled)
Button(action: submit) {
Label(submitLabel, systemImage: "checkmark")
}
- .disabled(submitEnabled?(passcode) == false || passcode.count < 4)
+ .disabled(submitEnabled?(passcode) == false || passcode.count < 4 || !buttonsEnabled)
}
}
@@ -85,6 +87,7 @@ struct PasscodeViewView_Previews: PreviewProvider {
title: "Enter Passcode",
reason: "Unlock app",
submitLabel: "Submit",
+ buttonsEnabled: Binding.constant(true),
submit: {},
cancel: {}
)
diff --git a/apps/ios/Shared/Views/LocalAuth/SetAppPasscodeView.swift b/apps/ios/Shared/Views/LocalAuth/SetAppPasscodeView.swift
index 76cd3e279a..7ec3ee1a42 100644
--- a/apps/ios/Shared/Views/LocalAuth/SetAppPasscodeView.swift
+++ b/apps/ios/Shared/Views/LocalAuth/SetAppPasscodeView.swift
@@ -11,6 +11,7 @@ import SimpleXChat
struct SetAppPasscodeView: View {
var passcodeKeychain: KeyChainItem = kcAppPassword
+ var prohibitedPasscodeKeychain: KeyChainItem = kcSelfDestructPassword
var title: LocalizedStringKey = "New Passcode"
var reason: String?
var submit: () -> Void
@@ -41,7 +42,10 @@ struct SetAppPasscodeView: View {
}
}
} else {
- setPasswordView(title: title, submitLabel: "Save") {
+ setPasswordView(title: title,
+ submitLabel: "Save",
+ // Do not allow to set app passcode == selfDestruct passcode
+ submitEnabled: { pwd in pwd != prohibitedPasscodeKeychain.get() }) {
enteredPassword = passcode
passcode = ""
confirming = true
@@ -54,7 +58,7 @@ struct SetAppPasscodeView: View {
}
private func setPasswordView(title: LocalizedStringKey, submitLabel: LocalizedStringKey, submitEnabled: (((String) -> Bool))? = nil, submit: @escaping () -> Void) -> some View {
- PasscodeView(passcode: $passcode, title: title, reason: reason, submitLabel: submitLabel, submitEnabled: submitEnabled, submit: submit) {
+ PasscodeView(passcode: $passcode, title: title, reason: reason, submitLabel: submitLabel, submitEnabled: submitEnabled, buttonsEnabled: Binding.constant(true), submit: submit) {
dismiss()
cancel()
}
diff --git a/apps/ios/Shared/Views/Onboarding/CreateProfile.swift b/apps/ios/Shared/Views/Onboarding/CreateProfile.swift
index f5db37dacf..3f835e25d4 100644
--- a/apps/ios/Shared/Views/Onboarding/CreateProfile.swift
+++ b/apps/ios/Shared/Views/Onboarding/CreateProfile.swift
@@ -11,12 +11,14 @@ import SimpleXChat
enum UserProfileAlert: Identifiable {
case duplicateUserError
+ case invalidDisplayNameError
case createUserError(error: LocalizedStringKey)
case invalidNameError(validName: String)
var id: String {
switch self {
case .duplicateUserError: return "duplicateUserError"
+ case .invalidDisplayNameError: return "invalidDisplayNameError"
case .createUserError: return "createUserError"
case let .invalidNameError(validName): return "invalidNameError \(validName)"
}
@@ -187,6 +189,12 @@ private func createProfile(_ displayName: String, showAlert: (UserProfileAlert)
} else {
showAlert(.duplicateUserError)
}
+ case .chatCmdError(_, .error(.invalidDisplayName)):
+ if m.currentUser == nil {
+ AlertManager.shared.showAlert(invalidDisplayNameAlert)
+ } else {
+ showAlert(.invalidDisplayNameError)
+ }
default:
let err: LocalizedStringKey = "Error: \(responseError(error))"
if m.currentUser == nil {
@@ -207,6 +215,7 @@ private func canCreateProfile(_ displayName: String) -> Bool {
func userProfileAlert(_ alert: UserProfileAlert, _ displayName: Binding) -> Alert {
switch alert {
case .duplicateUserError: return duplicateUserAlert
+ case .invalidDisplayNameError: return invalidDisplayNameAlert
case let .createUserError(err): return creatUserErrorAlert(err)
case let .invalidNameError(name): return createInvalidNameAlert(name, displayName)
}
@@ -219,6 +228,13 @@ private var duplicateUserAlert: Alert {
)
}
+private var invalidDisplayNameAlert: Alert {
+ Alert(
+ title: Text("Invalid display name!"),
+ message: Text("This display name is invalid. Please choose another name.")
+ )
+}
+
private func creatUserErrorAlert(_ err: LocalizedStringKey) -> Alert {
Alert(
title: Text("Error creating profile!"),
diff --git a/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift b/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift
index d8ff2c2f89..8d13c6fb39 100644
--- a/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift
+++ b/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift
@@ -491,14 +491,23 @@ struct SimplexLockView: View {
showLAAlert(.laPasscodeNotChangedAlert)
}
case .enableSelfDestruct:
- SetAppPasscodeView(passcodeKeychain: kcSelfDestructPassword, title: "Set passcode", reason: NSLocalizedString("Enable self-destruct passcode", comment: "set passcode view")) {
+ SetAppPasscodeView(
+ passcodeKeychain: kcSelfDestructPassword,
+ prohibitedPasscodeKeychain: kcAppPassword,
+ title: "Set passcode",
+ reason: NSLocalizedString("Enable self-destruct passcode", comment: "set passcode view")
+ ) {
updateSelfDestruct()
showLAAlert(.laSelfDestructPasscodeSetAlert)
} cancel: {
revertSelfDestruct()
}
case .changeSelfDestructPasscode:
- SetAppPasscodeView(passcodeKeychain: kcSelfDestructPassword, reason: NSLocalizedString("Change self-destruct passcode", comment: "set passcode view")) {
+ SetAppPasscodeView(
+ passcodeKeychain: kcSelfDestructPassword,
+ prohibitedPasscodeKeychain: kcAppPassword,
+ reason: NSLocalizedString("Change self-destruct passcode", comment: "set passcode view")
+ ) {
showLAAlert(.laSelfDestructPasscodeChangedAlert)
} cancel: {
showLAAlert(.laPasscodeNotChangedAlert)
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 506df8cf17..5758ddc30a 100644
--- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
+++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
@@ -89,6 +89,7 @@
%@ and %@
+ %@ и %@No comment provided by engineer.
@@ -103,6 +104,7 @@
%@ connected
+ %@ свързанNo comment provided by engineer.
@@ -132,6 +134,7 @@
%@, %@ and %lld members
+ %@, %@ и %lld членовеNo comment provided by engineer.
@@ -201,6 +204,7 @@
%lld group events
+ %lld групови събитияNo comment provided by engineer.
@@ -210,14 +214,17 @@
%lld messages blocked
+ %lld блокирани съобщенияNo comment provided by engineer.%lld messages marked deleted
+ %lld съобщения, маркирани като изтритиNo comment provided by engineer.%lld messages moderated by %@
+ %lld съобщения, модерирани от %@No comment provided by engineer.
@@ -292,10 +299,12 @@
(new)
+ (ново)No comment provided by engineer.(this device v%@)
+ (това устройство v%@)No comment provided by engineer.
@@ -305,6 +314,7 @@
**Add contact**: to create a new invitation link, or connect via a link you received.
+ **Добави контакт**: за създаване на нов линк или свързване чрез получен линк за връзка.No comment provided by engineer.
@@ -314,6 +324,7 @@
**Create group**: to create a new group.
+ **Създай група**: за създаване на нова група.No comment provided by engineer.
@@ -383,6 +394,9 @@
- optionally notify deleted contacts.
- profile names with spaces.
- and more!
+ - по желание уведомете изтритите контакти.
+- имена на профили с интервали.
+- и още!No comment provided by engineer.
@@ -401,6 +415,7 @@
0 sec
+ 0 секtime to disappear
@@ -550,6 +565,7 @@
Add contact
+ Добави контактNo comment provided by engineer.
@@ -629,6 +645,7 @@
All new messages from %@ will be hidden!
+ Всички нови съобщения от %@ ще бъдат скрити!No comment provided by engineer.
@@ -656,9 +673,9 @@
Позволи изчезващи съобщения само ако вашият контакт ги разрешава.No comment provided by engineer.
-
- Allow irreversible message deletion only if your contact allows it to you.
- Позволи необратимо изтриване на съобщение само ако вашият контакт го рарешава.
+
+ Allow irreversible message deletion only if your contact allows it to you. (24 hours)
+ Позволи необратимо изтриване на съобщение само ако вашият контакт го рарешава. (24 часа)No comment provided by engineer.
@@ -681,9 +698,9 @@
Разреши изпращането на изчезващи съобщения.No comment provided by engineer.
-
- Allow to irreversibly delete sent messages.
- Позволи необратимо изтриване на изпратените съобщения.
+
+ Allow to irreversibly delete sent messages. (24 hours)
+ Позволи необратимо изтриване на изпратените съобщения. (24 часа)No comment provided by engineer.
@@ -716,9 +733,9 @@
Позволи на вашите контакти да ви се обаждат.No comment provided by engineer.
-
- Allow your contacts to irreversibly delete sent messages.
- Позволи на вашите контакти да изтриват необратимо изпратените съобщения.
+
+ Allow your contacts to irreversibly delete sent messages. (24 hours)
+ Позволи на вашите контакти да изтриват необратимо изпратените съобщения. (24 часа)No comment provided by engineer.
@@ -738,10 +755,12 @@
Already connecting!
+ В процес на свързване!No comment provided by engineer.Already joining the group!
+ Вече се присъединихте към групата!No comment provided by engineer.
@@ -866,6 +885,7 @@
Bad desktop address
+ Грешен адрес на настолното устройствоNo comment provided by engineer.
@@ -880,6 +900,7 @@
Better groups
+ По-добри групиNo comment provided by engineer.
@@ -889,18 +910,22 @@
Block
+ БлокирайNo comment provided by engineer.Block group members
+ Блокиране на членове на групатаNo comment provided by engineer.Block member
+ Блокирай членNo comment provided by engineer.Block member?
+ Блокирай члена?No comment provided by engineer.
@@ -908,9 +933,9 @@
И вие, и вашият контакт можете да добавяте реакции към съобщението.No comment provided by engineer.
-
- Both you and your contact can irreversibly delete sent messages.
- И вие, и вашият контакт можете да изтриете необратимо изпратените съобщения.
+
+ Both you and your contact can irreversibly delete sent messages. (24 hours)
+ И вие, и вашият контакт можете да изтриете необратимо изпратените съобщения. (24 часа)No comment provided by engineer.
@@ -950,6 +975,7 @@
Camera not available
+ Камерата е неодстъпнаNo comment provided by engineer.
@@ -1070,6 +1096,7 @@
Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.
+ Чатът е спрян. Ако вече сте използвали тази база данни на друго устройство, трябва да я прехвърлите обратно, преди да стартирате чата отново.No comment provided by engineer.
@@ -1174,6 +1201,7 @@
Connect automatically
+ Автоматично свъзрванеNo comment provided by engineer.
@@ -1183,24 +1211,31 @@
Connect to desktop
+ Свързване с настолно устройствоNo comment provided by engineer.Connect to yourself?
+ Свърване със себе си?No comment provided by engineer.Connect to yourself?
This is your own SimpleX address!
+ Свърване със себе си?
+Това е вашият личен SimpleX адрес!No comment provided by engineer.Connect to yourself?
This is your own one-time link!
+ Свърване със себе си?
+Това е вашят еднократен линк за връзка!No comment provided by engineer.Connect via contact address
+ Свързване чрез адрес за контактNo comment provided by engineer.
@@ -1215,14 +1250,17 @@ This is your own one-time link!
Connect with %@
+ Свързване с %@No comment provided by engineer.Connected desktop
+ Свързано настолно устройствоNo comment provided by engineer.Connected to desktop
+ Свързан с настолно устройствоNo comment provided by engineer.
@@ -1237,6 +1275,7 @@ This is your own one-time link!
Connecting to desktop
+ Свързване с настолно устройствоNo comment provided by engineer.
@@ -1261,6 +1300,7 @@ This is your own one-time link!
Connection terminated
+ Връзката е прекратенаNo comment provided by engineer.
@@ -1330,6 +1370,7 @@ This is your own one-time link!
Correct name to %@?
+ Поправи име на %@?No comment provided by engineer.
@@ -1344,6 +1385,7 @@ This is your own one-time link!
Create a group using a random profile.
+ Създай група с автоматично генериран профилл.No comment provided by engineer.
@@ -1358,6 +1400,7 @@ This is your own one-time link!
Create group
+ Създай групаNo comment provided by engineer.
@@ -1377,6 +1420,7 @@ This is your own one-time link!
Create profile
+ Създай профилNo comment provided by engineer.
@@ -1401,6 +1445,7 @@ This is your own one-time link!
Creating link…
+ Линкът се създава…No comment provided by engineer.
@@ -1543,6 +1588,7 @@ This is your own one-time link!
Delete %lld messages?
+ Изтриване на %lld съобщения?No comment provided by engineer.
@@ -1572,6 +1618,7 @@ This is your own one-time link!
Delete and notify contact
+ Изтрий и уведоми контактNo comment provided by engineer.
@@ -1607,6 +1654,8 @@ This is your own one-time link!
Delete contact?
This cannot be undone!
+ Изтрий контакт?
+Това не може да бъде отменено!No comment provided by engineer.
@@ -1751,14 +1800,17 @@ This cannot be undone!
Desktop address
+ Адрес на настолно устройствоNo comment provided by engineer.Desktop app version %@ is not compatible with this app.
+ Версията на настолното приложение %@ не е съвместима с това приложение.No comment provided by engineer.Desktop devices
+ Настолни устройстваNo comment provided by engineer.
@@ -1853,6 +1905,7 @@ This cannot be undone!
Disconnect desktop?
+ Прекъсни връзката с настолното устройство?No comment provided by engineer.
@@ -1862,6 +1915,7 @@ This cannot be undone!
Discover via local network
+ Открий през локалната мрежаNo comment provided by engineer.
@@ -1874,6 +1928,10 @@ This cannot be undone!
ОтложиNo comment provided by engineer.
+
+ Do not send history to new members.
+ No comment provided by engineer.
+ Don't create addressНе създавай адрес
@@ -1946,6 +2004,7 @@ This cannot be undone!
Enable camera access
+ Разреши достъпа до камератаNo comment provided by engineer.
@@ -2015,6 +2074,7 @@ This cannot be undone!
Encrypted message: app is stopped
+ Криптирано съобщение: приложението е спряноnotification
@@ -2044,10 +2104,12 @@ This cannot be undone!
Encryption re-negotiation error
+ Грешка при повторно договаряне на криптиранеmessage decrypt error itemEncryption re-negotiation failed.
+ Неуспешно повторно договаряне на криптирането.No comment provided by engineer.
@@ -2062,6 +2124,7 @@ This cannot be undone!
Enter group name…
+ Въведи име на групата…No comment provided by engineer.
@@ -2081,6 +2144,7 @@ This cannot be undone!
Enter this device name…
+ Въведи името на това устройство…No comment provided by engineer.
@@ -2095,6 +2159,7 @@ This cannot be undone!
Enter your name…
+ Въведи своето име…No comment provided by engineer.
@@ -2244,6 +2309,7 @@ This cannot be undone!
Error opening chat
+ Грешка при отваряне на чатаNo comment provided by engineer.
@@ -2288,6 +2354,7 @@ This cannot be undone!
Error scanning code: %@
+ Грешка при сканиране на кода: %@No comment provided by engineer.
@@ -2382,6 +2449,7 @@ This cannot be undone!
Expand
+ Разшириchat item action
@@ -2416,6 +2484,7 @@ This cannot be undone!
Faster joining and more reliable messages.
+ По-бързо присъединяване и по-надеждни съобщения.No comment provided by engineer.
@@ -2515,6 +2584,7 @@ This cannot be undone!
Found desktop
+ Намерено настолно устройствоNo comment provided by engineer.
@@ -2539,6 +2609,7 @@ This cannot be undone!
Fully decentralized – visible only to members.
+ Напълно децентрализирана – видима е само за членовете.No comment provided by engineer.
@@ -2563,10 +2634,12 @@ This cannot be undone!
Group already exists
+ Групата вече съществуваNo comment provided by engineer.Group already exists!
+ Групата вече съществува!No comment provided by engineer.
@@ -2614,9 +2687,9 @@ This cannot be undone!
Членовете на групата могат да добавят реакции към съобщенията.No comment provided by engineer.
-
- Group members can irreversibly delete sent messages.
- Членовете на групата могат необратимо да изтриват изпратените съобщения.
+
+ Group members can irreversibly delete sent messages. (24 hours)
+ Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа)No comment provided by engineer.
@@ -2724,6 +2797,10 @@ This cannot be undone!
ИсторияNo comment provided by engineer.
+
+ History is not sent to new members.
+ No comment provided by engineer.
+ How SimpleX worksКак работи SimpleX
@@ -2836,6 +2913,7 @@ This cannot be undone!
Incognito groups
+ Инкогнито групиNo comment provided by engineer.
@@ -2870,6 +2948,7 @@ This cannot be undone!
Incompatible version
+ Несъвместима версияNo comment provided by engineer.
@@ -2916,6 +2995,7 @@ This cannot be undone!
Invalid QR code
+ Невалиден QR кодNo comment provided by engineer.
@@ -2923,16 +3003,23 @@ This cannot be undone!
Невалиден линк за връзкаNo comment provided by engineer.
+
+ Invalid display name!
+ No comment provided by engineer.
+ Invalid link
+ Невалиден линкNo comment provided by engineer.Invalid name!
+ Невалидно име!No comment provided by engineer.Invalid response
+ Невалиден отговорNo comment provided by engineer.
@@ -3028,6 +3115,7 @@ This cannot be undone!
Join group?
+ Влез в групата?No comment provided by engineer.
@@ -3037,11 +3125,14 @@ This cannot be undone!
Join with current profile
+ Присъединяване с текущия профилNo comment provided by engineer.Join your group?
This is your link for group %@!
+ Влез в твоята група?
+Това е вашят линк за група %@!No comment provided by engineer.
@@ -3051,14 +3142,17 @@ This is your link for group %@!
Keep
+ ЗапазиNo comment provided by engineer.Keep the app open to use it from desktop
+ Дръжте приложението отворено, за да го използвате от настолното устройствоNo comment provided by engineer.Keep unused invitation?
+ Запази неизползваната покана за връзка?No comment provided by engineer.
@@ -3123,14 +3217,17 @@ This is your link for group %@!
Link mobile and desktop apps! 🔗
+ Свържете мобилни и настолни приложения! 🔗No comment provided by engineer.Linked desktop options
+ Настройки на запомнени настолни устройстваNo comment provided by engineer.Linked desktops
+ Запомнени настолни устройстваNo comment provided by engineer.
@@ -3290,6 +3387,7 @@ This is your link for group %@!
Messages from %@ will be shown!
+ Съобщенията от %@ ще бъдат показани!No comment provided by engineer.
@@ -3389,6 +3487,7 @@ This is your link for group %@!
New chat
+ Нов чатNo comment provided by engineer.
@@ -3493,6 +3592,7 @@ This is your link for group %@!
Not compatible!
+ Несъвместим!No comment provided by engineer.
@@ -3516,6 +3616,7 @@ This is your link for group %@!
OK
+ ОКNo comment provided by engineer.
@@ -3583,9 +3684,9 @@ This is your link for group %@!
Само вие можете да добавяте реакции на съобщенията.No comment provided by engineer.
-
- Only you can irreversibly delete messages (your contact can mark them for deletion).
- Само вие можете необратимо да изтриете съобщения (вашият контакт може да ги маркира за изтриване).
+
+ Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)
+ Само вие можете необратимо да изтриете съобщения (вашият контакт може да ги маркира за изтриване). (24 часа)No comment provided by engineer.
@@ -3608,9 +3709,9 @@ This is your link for group %@!
Само вашият контакт може да добавя реакции на съобщенията.No comment provided by engineer.
-
- Only your contact can irreversibly delete messages (you can mark them for deletion).
- Само вашият контакт може необратимо да изтрие съобщения (можете да ги маркирате за изтриване).
+
+ Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)
+ Само вашият контакт може необратимо да изтрие съобщения (можете да ги маркирате за изтриване). (24 часа)No comment provided by engineer.
@@ -3650,6 +3751,7 @@ This is your link for group %@!
Open group
+ Отвори групаNo comment provided by engineer.
@@ -3664,14 +3766,17 @@ This is your link for group %@!
Opening app…
+ Приложението се отваря…No comment provided by engineer.Or scan QR code
+ Или сканирай QR кодNo comment provided by engineer.Or show this code
+ Или покажи този кодNo comment provided by engineer.
@@ -3716,6 +3821,7 @@ This is your link for group %@!
Paste desktop address
+ Постави адрес на настолно устройствоNo comment provided by engineer.
@@ -3725,6 +3831,7 @@ This is your link for group %@!
Paste the link you received
+ Постави получения линкNo comment provided by engineer.
@@ -3765,6 +3872,8 @@ This is your link for group %@!
Please contact developers.
Error: %@
+ Моля, свържете се с разработчиците.
+Грешка: %@No comment provided by engineer.
@@ -3864,10 +3973,12 @@ Error: %@
Profile name
+ Име на профилаNo comment provided by engineer.Profile name:
+ Име на профила:No comment provided by engineer.
@@ -3972,6 +4083,7 @@ Error: %@
Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).
+ Прочетете повече в [Ръководство за потребителя](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).No comment provided by engineer.
@@ -4121,10 +4233,12 @@ Error: %@
Repeat connection request?
+ Изпрати отново заявката за свързване?No comment provided by engineer.Repeat join request?
+ Изпрати отново заявката за присъединяване?No comment provided by engineer.
@@ -4184,6 +4298,7 @@ Error: %@
Retry
+ Опитай отновоNo comment provided by engineer.
@@ -4318,6 +4433,7 @@ Error: %@
Scan QR code from desktop
+ Сканирай QR код от настолното устройствоNo comment provided by engineer.
@@ -4342,6 +4458,7 @@ Error: %@
Search or paste SimpleX link
+ Търсене или поставяне на SimpleX линкNo comment provided by engineer.
@@ -4449,6 +4566,10 @@ Error: %@
Изпрати от галерия или персонализирани клавиатури.No comment provided by engineer.
+
+ Send up to 100 last messages to new members.
+ No comment provided by engineer.
+ Sender cancelled file transfer.Подателят отмени прехвърлянето на файла.
@@ -4546,6 +4667,7 @@ Error: %@
Session code
+ Код на сесиятаNo comment provided by engineer.
@@ -4620,6 +4742,7 @@ Error: %@
Share this 1-time invite link
+ Сподели този еднократен линк за връзкаNo comment provided by engineer.
@@ -4749,6 +4872,7 @@ Error: %@
Start chat?
+ Стартирай чата?No comment provided by engineer.
@@ -4858,6 +4982,7 @@ Error: %@
Tap to Connect
+ Докосни за свързванеNo comment provided by engineer.
@@ -4877,10 +5002,12 @@ Error: %@
Tap to paste link
+ Докосни за поставяне на линк за връзкаNo comment provided by engineer.Tap to scan
+ Докосни за сканиранеNo comment provided by engineer.
@@ -4947,6 +5074,7 @@ It can happen because of some bug or when the connection is compromised.
The code you scanned is not a SimpleX link QR code.
+ QR кодът, който сканирахте, не е SimpleX линк за връзка.No comment provided by engineer.
@@ -5016,6 +5144,7 @@ It can happen because of some bug or when the connection is compromised.
The text you pasted is not a SimpleX link.
+ Текстът, който поставихте, не е SimpleX линк за връзка.No comment provided by engineer.
@@ -5060,6 +5189,11 @@ It can happen because of some bug or when the connection is compromised.
This device name
+ Името на това устройство
+ No comment provided by engineer.
+
+
+ This display name is invalid. Please choose another name.No comment provided by engineer.
@@ -5074,10 +5208,12 @@ It can happen because of some bug or when the connection is compromised.
This is your own SimpleX address!
+ Това е вашият личен SimpleX адрес!No comment provided by engineer.This is your own one-time link!
+ Това е вашят еднократен линк за връзка!No comment provided by engineer.
@@ -5097,6 +5233,7 @@ It can happen because of some bug or when the connection is compromised.
To hide unwanted messages.
+ Скриване на нежелани съобщения.No comment provided by engineer.
@@ -5178,14 +5315,17 @@ You will be prompted to complete authentication before this feature is enabled.<
Unblock
+ ОтблокирайNo comment provided by engineer.Unblock member
+ Отблокирай членNo comment provided by engineer.Unblock member?
+ Отблокирай член?No comment provided by engineer.
@@ -5252,10 +5392,12 @@ To connect, please ask your contact to create another connection link and check
Unlink
+ ЗабравиNo comment provided by engineer.Unlink desktop?
+ Забрави настолно устройство?No comment provided by engineer.
@@ -5278,6 +5420,10 @@ To connect, please ask your contact to create another connection link and check
НепрочетеноNo comment provided by engineer.
+
+ Up to 100 last messages are sent to new members.
+ No comment provided by engineer.
+ UpdateАктуализация
@@ -5350,6 +5496,7 @@ To connect, please ask your contact to create another connection link and check
Use from desktop
+ Използвай от настолно устройствоNo comment provided by engineer.
@@ -5364,6 +5511,7 @@ To connect, please ask your contact to create another connection link and check
Use only local notifications?
+ Използвай само локални известия?No comment provided by engineer.
@@ -5388,10 +5536,12 @@ To connect, please ask your contact to create another connection link and check
Verify code with desktop
+ Потвръди кода с настолното устройствоNo comment provided by engineer.Verify connection
+ Потвръди връзкитеNo comment provided by engineer.
@@ -5401,6 +5551,7 @@ To connect, please ask your contact to create another connection link and check
Verify connections
+ Потвръди връзкитеNo comment provided by engineer.
@@ -5415,6 +5566,7 @@ To connect, please ask your contact to create another connection link and check
Via secure quantum resistant protocol.
+ Чрез сигурен квантово устойчив протокол.No comment provided by engineer.
@@ -5442,6 +5594,10 @@ To connect, please ask your contact to create another connection link and check
Виж кода за сигурностNo comment provided by engineer.
+
+ Visible history
+ chat feature
+ Voice messagesГласови съобщения
@@ -5469,6 +5625,7 @@ To connect, please ask your contact to create another connection link and check
Waiting for desktop...
+ Изчакване на настолно устройство…No comment provided by engineer.
@@ -5573,31 +5730,39 @@ To connect, please ask your contact to create another connection link and check
You are already connecting to %@.
+ Вече се свързвате с %@.No comment provided by engineer.You are already connecting via this one-time link!
+ Вече се свързвате чрез този еднократен линк за връзка!No comment provided by engineer.You are already in group %@.
+ Вече сте в група %@.No comment provided by engineer.You are already joining the group %@.
+ Вече се присъединявате към групата %@.No comment provided by engineer.You are already joining the group via this link!
+ Вие вече се присъединявате към групата чрез този линк!No comment provided by engineer.You are already joining the group via this link.
+ Вие вече се присъединявате към групата чрез този линк.No comment provided by engineer.You are already joining the group!
Repeat join request?
+ Вече се присъединихте към групата!
+Изпрати отново заявката за присъединяване?No comment provided by engineer.
@@ -5637,6 +5802,7 @@ Repeat join request?
You can make it visible to your SimpleX contacts via Settings.
+ Можете да го направите видим за вашите контакти в SimpleX чрез Настройки.No comment provided by engineer.
@@ -5681,6 +5847,7 @@ Repeat join request?
You can view invitation link again in connection details.
+ Можете да видите отново линкът за покана в подробностите за връзката.No comment provided by engineer.
@@ -5700,11 +5867,14 @@ Repeat join request?
You have already requested connection via this address!
+ Вече сте заявили връзка през този адрес!No comment provided by engineer.You have already requested connection!
Repeat connection request?
+ Вече сте направили заявката за връзка!
+Изпрати отново заявката за свързване?No comment provided by engineer.
@@ -5759,6 +5929,7 @@ Repeat connection request?
You will be connected when group link host's device is online, please wait or check later!
+ Ще бъдете свързани, когато устройството на хоста на груповата връзка е онлайн, моля, изчакайте или проверете по-късно!No comment provided by engineer.
@@ -5778,6 +5949,7 @@ Repeat connection request?
You will connect to all group members.
+ Ще се свържете с всички членове на групата.No comment provided by engineer.
@@ -5894,6 +6066,7 @@ You can cancel this connection and remove the contact (and try later with a new
Your profile
+ Вашият профилNo comment provided by engineer.
@@ -5990,6 +6163,7 @@ SimpleX сървърите не могат да видят вашия профи
and %lld other events
+ и %lld други събитияNo comment provided by engineer.
@@ -5999,6 +6173,7 @@ SimpleX сървърите не могат да видят вашия профи
author
+ авторmember role
@@ -6013,6 +6188,7 @@ SimpleX сървърите не могат да видят вашия профи
blocked
+ блокиранNo comment provided by engineer.
@@ -6187,6 +6363,7 @@ SimpleX сървърите не могат да видят вашия профи
deleted contact
+ изтрит контактrcv direct event chat item
@@ -6583,6 +6760,7 @@ SimpleX сървърите не могат да видят вашия профи
v%@
+ v%@No comment provided by engineer.
@@ -6724,6 +6902,7 @@ SimpleX сървърите не могат да видят вашия профи
SimpleX uses local network access to allow using user chat profile via desktop app on the same network.
+ SimpleX използва достъп до локална мрежа, за да позволи използването на потребителския чат профил чрез настолно приложение в същата мрежа.Privacy - Local Network Usage Description
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 076c2c97fb..cd2b59fb03 100644
--- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
+++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
@@ -89,6 +89,7 @@
%@ and %@
+ %@ a %@No comment provided by engineer.
@@ -103,6 +104,7 @@
%@ connected
+ %@ připojenNo comment provided by engineer.
@@ -656,9 +658,9 @@
Povolte mizící zprávy, pouze pokud vám to váš kontakt dovolí.No comment provided by engineer.
-
- Allow irreversible message deletion only if your contact allows it to you.
- Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí.
+
+ Allow irreversible message deletion only if your contact allows it to you. (24 hours)
+ Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí. (24 hodin)No comment provided by engineer.
@@ -681,9 +683,9 @@
Povolit odesílání mizících zpráv.No comment provided by engineer.
-
- Allow to irreversibly delete sent messages.
- Povolit nevratné smazání odeslaných zpráv.
+
+ Allow to irreversibly delete sent messages. (24 hours)
+ Povolit nevratné smazání odeslaných zpráv. (24 hodin)No comment provided by engineer.
@@ -716,9 +718,9 @@
Povolte svým kontaktům vám volat.No comment provided by engineer.
-
- Allow your contacts to irreversibly delete sent messages.
- Umožněte svým kontaktům nevratně odstranit odeslané zprávy.
+
+ Allow your contacts to irreversibly delete sent messages. (24 hours)
+ Umožněte svým kontaktům nevratně odstranit odeslané zprávy. (24 hodin)No comment provided by engineer.
@@ -908,9 +910,9 @@
Vy i váš kontakt můžete přidávat reakce na zprávy.No comment provided by engineer.
-
- Both you and your contact can irreversibly delete sent messages.
- Vy i váš kontakt můžete nevratně mazat odeslané zprávy.
+
+ Both you and your contact can irreversibly delete sent messages. (24 hours)
+ Vy i váš kontakt můžete nevratně mazat odeslané zprávy. (24 hodin)No comment provided by engineer.
@@ -1874,6 +1876,10 @@ This cannot be undone!
Udělat pozdějiNo comment provided by engineer.
+
+ Do not send history to new members.
+ No comment provided by engineer.
+ Don't create addressNevytvářet adresu
@@ -2614,9 +2620,9 @@ This cannot be undone!
Členové skupin mohou přidávat reakce na zprávy.No comment provided by engineer.
-
- Group members can irreversibly delete sent messages.
- Členové skupiny mohou nevratně mazat odeslané zprávy.
+
+ Group members can irreversibly delete sent messages. (24 hours)
+ Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)No comment provided by engineer.
@@ -2724,6 +2730,10 @@ This cannot be undone!
HistorieNo comment provided by engineer.
+
+ History is not sent to new members.
+ No comment provided by engineer.
+ How SimpleX worksJak SimpleX funguje
@@ -2923,6 +2933,10 @@ This cannot be undone!
Neplatný odkaz na spojeníNo comment provided by engineer.
+
+ Invalid display name!
+ No comment provided by engineer.
+ Invalid linkNo comment provided by engineer.
@@ -3583,9 +3597,9 @@ This is your link for group %@!
Reakce na zprávy můžete přidávat pouze vy.No comment provided by engineer.
-
- Only you can irreversibly delete messages (your contact can mark them for deletion).
- Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání).
+
+ Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)
+ Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání). (24 hodin)No comment provided by engineer.
@@ -3608,9 +3622,9 @@ This is your link for group %@!
Reakce na zprávy může přidávat pouze váš kontakt.No comment provided by engineer.
-
- Only your contact can irreversibly delete messages (you can mark them for deletion).
- Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání).
+
+ Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)
+ Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání). (24 hodin)No comment provided by engineer.
@@ -4449,6 +4463,10 @@ Error: %@
Odeslat je z galerie nebo vlastní klávesnice.No comment provided by engineer.
+
+ Send up to 100 last messages to new members.
+ No comment provided by engineer.
+ Sender cancelled file transfer.Odesílatel zrušil přenos souboru.
@@ -5062,6 +5080,10 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován
This device nameNo comment provided by engineer.
+
+ This display name is invalid. Please choose another name.
+ No comment provided by engineer.
+ This group has over %lld members, delivery receipts are not sent.Tato skupina má více než %lld členů, potvrzení o doručení nejsou odesílány.
@@ -5278,6 +5300,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
NepřečtenýNo comment provided by engineer.
+
+ Up to 100 last messages are sent to new members.
+ No comment provided by engineer.
+ UpdateAktualizovat
@@ -5442,6 +5468,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
Zobrazení bezpečnostního kóduNo comment provided by engineer.
+
+ Visible history
+ chat feature
+ Voice messagesHlasové zprávy
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 2b877c32d2..591bf02e42 100644
--- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
+++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
@@ -49,7 +49,7 @@
## History
- ## Vergangenheit
+ ## Verlaufcopied message info
@@ -314,15 +314,17 @@
**Add contact**: to create a new invitation link, or connect via a link you received.
+ **Kontakt hinzufügen**: Um einen neuen Einladungslink zu erstellen oder eine Verbindung über einen Link herzustellen, den Sie erhalten haben.No comment provided by engineer.**Add new contact**: to create your one-time QR Code or link for your contact.
- **Fügen Sie einen neuen Kontakt hinzu**: Erzeugen Sie einen Einmal-QR-Code oder -Link für Ihren Kontakt.
+ **Neuen Kontakt hinzufügen**: Um einen Einmal-QR-Code oder -Link für Ihren Kontakt zu erzeugen.No comment provided by engineer.**Create group**: to create a new group.
+ **Gruppe erstellen**: Um eine neue Gruppe zu erstellen.No comment provided by engineer.
@@ -403,7 +405,7 @@
- editing history.
- Bis zu 5 Minuten lange Sprachnachrichten.
- Zeitdauer für verschwindende Nachrichten anpassen.
-- Nachrichten-Historie bearbeiten.
+- Nachrichten-Verlauf bearbeiten.
No comment provided by engineer.
@@ -507,12 +509,12 @@
Abort changing address
- Wechsel der Adresse abbrechen
+ Wechsel der Empfängeradresse abbrechenNo comment provided by engineer.Abort changing address?
- Wechsel der Adresse abbrechen?
+ Wechsel der Empfängeradresse abbrechen?No comment provided by engineer.
@@ -558,11 +560,12 @@
Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts.
- Fügen Sie die Adresse zu Ihrem Profil hinzu, damit Ihre Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.
+ 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 contact
+ Kontakt hinzufügenNo comment provided by engineer.
@@ -602,7 +605,7 @@
Address change will be aborted. Old receiving address will be used.
- Der Wechsel der Adresse wird abgebrochen. Die bisherige Adresse wird weiter verwendet.
+ Der Wechsel der Empfängeradresse wird abgebrochen. Die bisherige Adresse wird weiter verwendet.No comment provided by engineer.
@@ -667,12 +670,12 @@
Allow disappearing messages only if your contact allows it to you.
- Erlauben Sie verschwindende Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt.
+ Erlauben Sie verschwindende Nachrichten nur dann, wenn es Ihr Kontakt ebenfalls erlaubt.No comment provided by engineer.
-
- Allow irreversible message deletion only if your contact allows it to you.
- Erlauben Sie das unwiederbringliche Löschen von Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt.
+
+ Allow irreversible message deletion only if your contact allows it to you. (24 hours)
+ Erlauben Sie das unwiederbringliche Löschen von Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt. (24 Stunden)No comment provided by engineer.
@@ -695,9 +698,9 @@
Das Senden von verschwindenden Nachrichten erlauben.No comment provided by engineer.
-
- Allow to irreversibly delete sent messages.
- Unwiederbringliches löschen von gesendeten Nachrichten erlauben.
+
+ Allow to irreversibly delete sent messages. (24 hours)
+ Unwiederbringliches löschen von gesendeten Nachrichten erlauben. (24 Stunden)No comment provided by engineer.
@@ -730,9 +733,9 @@
Erlaubt Ihren Kontakten Sie anzurufen.No comment provided by engineer.
-
- Allow your contacts to irreversibly delete sent messages.
- Erlauben Sie Ihren Kontakten gesendete Nachrichten unwiederbringlich zu löschen.
+
+ Allow your contacts to irreversibly delete sent messages. (24 hours)
+ Erlauben Sie Ihren Kontakten gesendete Nachrichten unwiederbringlich zu löschen. (24 Stunden)No comment provided by engineer.
@@ -930,9 +933,9 @@
Sowohl Sie, als auch Ihr Kontakt können Reaktionen auf Nachrichten geben.No comment provided by engineer.
-
- Both you and your contact can irreversibly delete sent messages.
- Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen.
+
+ Both you and your contact can irreversibly delete sent messages. (24 hours)
+ Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)No comment provided by engineer.
@@ -972,6 +975,7 @@
Camera not available
+ Kamera nicht verfügbarNo comment provided by engineer.
@@ -1092,6 +1096,7 @@
Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.
+ Der Chat ist angehalten. Wenn Sie diese Datenbank bereits auf einem anderen Gerät genutzt haben, sollten Sie diese vor dem Starten des Chats wieder zurückspielen.No comment provided by engineer.
@@ -1217,7 +1222,7 @@
Connect to yourself?
This is your own SimpleX address!
- Mit Ihnen selbst verbinden?
+ Sich mit Ihnen selbst verbinden?
Das ist Ihre eigene SimpleX-Adresse!No comment provided by engineer.
@@ -1440,6 +1445,7 @@ Das ist Ihr eigener Einmal-Link!
Creating link…
+ Link wird erstellt…No comment provided by engineer.
@@ -1869,7 +1875,7 @@ Das kann nicht rückgängig gemacht werden!
Disappearing messages
- verschwindende Nachrichten
+ Verschwindende Nachrichtenchat feature
@@ -1922,6 +1928,10 @@ Das kann nicht rückgängig gemacht werden!
Später wiederholenNo comment provided by engineer.
+
+ Do not send history to new members.
+ No comment provided by engineer.
+ Don't create addressKeine Adresse erstellt
@@ -1994,6 +2004,7 @@ Das kann nicht rückgängig gemacht werden!
Enable camera access
+ Kamera-Zugriff aktivierenNo comment provided by engineer.
@@ -2063,6 +2074,7 @@ Das kann nicht rückgängig gemacht werden!
Encrypted message: app is stopped
+ Verschlüsselte Nachricht: Die App ist angehaltennotification
@@ -2177,7 +2189,7 @@ Das kann nicht rückgängig gemacht werden!
Error changing address
- Fehler beim Wechseln der Adresse
+ Fehler beim Wechseln der EmpfängeradresseNo comment provided by engineer.
@@ -2297,6 +2309,7 @@ Das kann nicht rückgängig gemacht werden!
Error opening chat
+ Fehler beim Öffnen des ChatsNo comment provided by engineer.
@@ -2341,6 +2354,7 @@ Das kann nicht rückgängig gemacht werden!
Error scanning code: %@
+ Fehler beim Scannen des Codes: %@No comment provided by engineer.
@@ -2673,9 +2687,9 @@ Das kann nicht rückgängig gemacht werden!
Gruppenmitglieder können eine Reaktion auf Nachrichten geben.No comment provided by engineer.
-
- Group members can irreversibly delete sent messages.
- Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen.
+
+ Group members can irreversibly delete sent messages. (24 hours)
+ Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)No comment provided by engineer.
@@ -2780,7 +2794,11 @@ Das kann nicht rückgängig gemacht werden!
History
- Vergangenheit
+ Verlauf
+ No comment provided by engineer.
+
+
+ History is not sent to new members.No comment provided by engineer.
@@ -2977,6 +2995,7 @@ Das kann nicht rückgängig gemacht werden!
Invalid QR code
+ Ungültiger QR-CodeNo comment provided by engineer.
@@ -2984,8 +3003,13 @@ Das kann nicht rückgängig gemacht werden!
Ungültiger VerbindungslinkNo comment provided by engineer.
+
+ Invalid display name!
+ No comment provided by engineer.
+ Invalid link
+ Ungültiger LinkNo comment provided by engineer.
@@ -2995,6 +3019,7 @@ Das kann nicht rückgängig gemacht werden!
Invalid response
+ Ungültige ReaktionNo comment provided by engineer.
@@ -3117,6 +3142,7 @@ Das ist Ihr Link für die Gruppe %@!
Keep
+ BehaltenNo comment provided by engineer.
@@ -3126,6 +3152,7 @@ Das ist Ihr Link für die Gruppe %@!
Keep unused invitation?
+ Nicht genutzte Einladung behalten?No comment provided by engineer.
@@ -3260,7 +3287,7 @@ Das ist Ihr Link für die Gruppe %@!
Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated.
- Stellen Sie sicher, dass die WebRTC ICE-Server Adressen das richtige Format haben, zeilenweise angeordnet und nicht doppelt vorhanden sind.
+ Stellen Sie sicher, dass die WebRTC ICE-Server Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind.No comment provided by engineer.
@@ -3460,6 +3487,7 @@ Das ist Ihr Link für die Gruppe %@!
New chat
+ Neuer ChatNo comment provided by engineer.
@@ -3549,7 +3577,7 @@ Das ist Ihr Link für die Gruppe %@!
No history
- Keine Vergangenheit
+ Kein VerlaufNo comment provided by engineer.
@@ -3588,6 +3616,7 @@ Das ist Ihr Link für die Gruppe %@!
OK
+ OKNo comment provided by engineer.
@@ -3655,9 +3684,9 @@ Das ist Ihr Link für die Gruppe %@!
Nur Sie können Reaktionen auf Nachrichten geben.No comment provided by engineer.
-
- Only you can irreversibly delete messages (your contact can mark them for deletion).
- Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren).
+
+ Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)
+ Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren). (24 Stunden)No comment provided by engineer.
@@ -3680,9 +3709,9 @@ Das ist Ihr Link für die Gruppe %@!
Nur Ihr Kontakt kann Reaktionen auf Nachrichten geben.No comment provided by engineer.
-
- Only your contact can irreversibly delete messages (you can mark them for deletion).
- Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren).
+
+ Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)
+ Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren). (24 Stunden)No comment provided by engineer.
@@ -3737,14 +3766,17 @@ Das ist Ihr Link für die Gruppe %@!
Opening app…
+ App wird geöffnet…No comment provided by engineer.Or scan QR code
+ Oder den QR-Code scannenNo comment provided by engineer.Or show this code
+ Oder diesen QR-Code anzeigenNo comment provided by engineer.
@@ -3799,6 +3831,7 @@ Das ist Ihr Link für die Gruppe %@!
Paste the link you received
+ Fügen Sie den erhaltenen Link einNo comment provided by engineer.
@@ -3839,6 +3872,8 @@ Das ist Ihr Link für die Gruppe %@!
Please contact developers.
Error: %@
+ Bitte nehmen Sie Kontakt mit den Entwicklern auf.
+Fehler: %@No comment provided by engineer.
@@ -4048,6 +4083,7 @@ Error: %@
Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).
+ Lesen Sie mehr dazu im [Benutzerhandbuch](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).No comment provided by engineer.
@@ -4262,6 +4298,7 @@ Error: %@
Retry
+ WiederholenNo comment provided by engineer.
@@ -4421,6 +4458,7 @@ Error: %@
Search or paste SimpleX link
+ Suchen oder fügen Sie den SimpleX-Link einNo comment provided by engineer.
@@ -4528,6 +4566,10 @@ Error: %@
Senden Sie diese aus dem Fotoalbum oder von individuellen Tastaturen.No comment provided by engineer.
+
+ Send up to 100 last messages to new members.
+ No comment provided by engineer.
+ Sender cancelled file transfer.Der Absender hat die Dateiübertragung abgebrochen.
@@ -4700,6 +4742,7 @@ Error: %@
Share this 1-time invite link
+ Teilen Sie diesen Einmal-EinladungslinkNo comment provided by engineer.
@@ -4829,6 +4872,7 @@ Error: %@
Start chat?
+ Chat starten?No comment provided by engineer.
@@ -4938,12 +4982,12 @@ Error: %@
Tap to Connect
- Zum Verbinden antippen
+ Zum Verbinden tippenNo comment provided by engineer.Tap to activate profile.
- Tippen Sie auf das Profil um es zu aktivieren.
+ Zum Aktivieren des Profils tippen.No comment provided by engineer.
@@ -4953,20 +4997,22 @@ Error: %@
Tap to join incognito
- Tippen, um Inkognito beizutreten
+ Zum Inkognito beitreten tippenNo comment provided by engineer.Tap to paste link
+ Zum Link einfügen tippenNo comment provided by engineer.Tap to scan
+ Zum Scannen tippenNo comment provided by engineer.Tap to start a new chat
- Tippen, um einen neuen Chat zu starten
+ Zum Starten eines neuen Chats tippenNo comment provided by engineer.
@@ -5028,6 +5074,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
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.
@@ -5092,11 +5139,12 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
The servers for new connections of your current chat profile **%@**.
- Server der neuen Verbindungen von Ihrem aktuellen Chat-Profil **%@**.
+ Mögliche Server für neue Verbindungen von Ihrem aktuellen Chat-Profil **%@**.No comment provided by engineer.The text you pasted is not a SimpleX link.
+ Der von Ihnen eingefügte Text ist kein SimpleX-Link.No comment provided by engineer.
@@ -5144,6 +5192,10 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
Dieser GerätenameNo comment provided by engineer.
+
+ This display name is invalid. Please choose another name.
+ No comment provided by engineer.
+ This group has over %lld members, delivery receipts are not sent.Es werden keine Empfangsbestätigungen gesendet, da diese Gruppe über %lld Mitglieder hat.
@@ -5368,6 +5420,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
UngelesenNo comment provided by engineer.
+
+ Up to 100 last messages are sent to new members.
+ No comment provided by engineer.
+ UpdateAktualisieren
@@ -5455,6 +5511,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
Use only local notifications?
+ Nur lokale Benachrichtigungen nutzen?No comment provided by engineer.
@@ -5537,6 +5594,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
Schauen Sie sich den Sicherheitscode anNo comment provided by engineer.
+
+ Visible history
+ chat feature
+ Voice messagesSprachnachrichten
@@ -5644,7 +5705,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
You
- Ihre Daten
+ ProfilNo comment provided by engineer.
@@ -5741,6 +5802,7 @@ Verbindungsanfrage wiederholen?
You can make it visible to your SimpleX contacts via Settings.
+ Sie können sie über Einstellungen für Ihre SimpleX-Kontakte sichtbar machen.No comment provided by engineer.
@@ -5785,6 +5847,7 @@ Verbindungsanfrage wiederholen?
You can view invitation link again in connection details.
+ Den Einladungslink können Sie in den Details der Verbindung nochmals sehen.No comment provided by engineer.
@@ -5901,7 +5964,7 @@ Verbindungsanfrage wiederholen?
You won't lose your contacts if you later delete your address.
- Sie werden Ihre mit dieser Adresse verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen.
+ Sie werden Ihre damit verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen.No comment provided by engineer.
@@ -6040,7 +6103,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.
Your settings
- Ihre Einstellungen
+ EinstellungenNo comment provided by engineer.
@@ -6155,7 +6218,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.
changed address for you
- wechselte die Adresse für Sie
+ Wechselte die Empfängeradresse von Ihnenchat item text
@@ -6170,12 +6233,12 @@ SimpleX-Server können Ihr Profil nicht einsehen.
changing address for %@…
- Adresse von %@ wechseln…
+ Empfängeradresse für %@ wechseln wird gestartet…chat item textchanging address…
- Wechsel der Adresse…
+ Wechsel der Empfängeradresse wurde gestartet…chat item text
@@ -6767,12 +6830,12 @@ SimpleX-Server können Ihr Profil nicht einsehen.
you changed address
- Sie haben die Adresse gewechselt
+ Die Empfängeradresse wurde gewechseltchat item textyou changed address for %@
- Sie haben die Adresse für %@ gewechselt
+ Die Empfängeradresse für %@ wurde gewechseltchat item text
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 c6dcc84e99..18051ae350 100644
--- a/apps/ios/SimpleX Localizations/el.xcloc/Localized Contents/el.xliff
+++ b/apps/ios/SimpleX Localizations/el.xcloc/Localized Contents/el.xliff
@@ -66,20 +66,24 @@ Available in v5.1
%@ είναι συνδεδεμένο!notification title
-
+ %@ is not verified
+ %@ δεν είναι επαληθευμένοNo comment provided by engineer.
-
+ %@ is verified
+ %@ είναι επαληθευμένοNo comment provided by engineer.
-
+ %@ servers
+ %@ διακομιστέςNo comment provided by engineer.
-
+ %@ wants to connect!
+ %@ θέλει να συνδεθεί!notification title
@@ -4214,6 +4218,21 @@ SimpleX servers cannot see your profile.
%@ και %@ συνδεδεμένοNo comment provided by engineer.
+
+ %@:
+ %@:
+ copied message info
+
+
+ %@, %@ and %lld members
+ %@, %@ και %lld μέλη
+ No comment provided by engineer.
+
+
+ %@, %@ and %lld other members connected
+ %@, %@ και %lld άλλα μέλη συνδέθηκαν
+ No comment provided by engineer.
+