diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index a6d574e38d..764db8335e 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -561,6 +561,18 @@ func apiGroupMemberInfo(_ groupId: Int64, _ groupMemberId: Int64) throws -> (Gro throw r } +func apiContactQueueInfo(_ contactId: Int64) async throws -> (RcvMsgInfo?, QueueInfo) { + let r = await chatSendCmd(.apiContactQueueInfo(contactId: contactId)) + if case let .queueInfo(_, rcvMsgInfo, queueInfo) = r { return (rcvMsgInfo, queueInfo) } + throw r +} + +func apiGroupMemberQueueInfo(_ groupId: Int64, _ groupMemberId: Int64) async throws -> (RcvMsgInfo?, QueueInfo) { + let r = await chatSendCmd(.apiGroupMemberQueueInfo(groupId: groupId, groupMemberId: groupMemberId)) + if case let .queueInfo(_, rcvMsgInfo, queueInfo) = r { return (rcvMsgInfo, queueInfo) } + throw r +} + func apiSwitchContact(contactId: Int64) throws -> ConnectionStats { let r = chatSendCmdSync(.apiSwitchContact(contactId: contactId)) if case let .contactSwitchStarted(_, _, connectionStats) = r { return connectionStats } @@ -1265,7 +1277,7 @@ func filterMembersToAdd(_ ms: [GMember]) -> [Contact] { let memberContactIds = ms.compactMap{ m in m.wrapped.memberCurrent ? m.wrapped.memberContactId : nil } return ChatModel.shared.chats .compactMap{ $0.chatInfo.contact } - .filter{ c in c.ready && c.active && !memberContactIds.contains(c.apiId) } + .filter{ c in c.sendMsgEnabled && !c.nextSendGrpInv && !memberContactIds.contains(c.apiId) } .sorted{ $0.displayName.lowercased() < $1.displayName.lowercased() } } @@ -1835,7 +1847,7 @@ func processReceivedMsg(_ res: ChatResponse) async { } case let .sndFileCompleteXFTP(user, aChatItem, _): await chatItemSimpleUpdate(user, aChatItem) - case let .sndFileError(user, aChatItem, _): + case let .sndFileError(user, aChatItem, _, _): if let aChatItem = aChatItem { await chatItemSimpleUpdate(user, aChatItem) Task { cleanupFile(aChatItem) } diff --git a/apps/ios/Shared/Views/Chat/ChatInfoView.swift b/apps/ios/Shared/Views/Chat/ChatInfoView.swift index 2e5a4f2af6..f5abfe9c58 100644 --- a/apps/ios/Shared/Views/Chat/ChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatInfoView.swift @@ -110,6 +110,7 @@ struct ChatInfoView: View { case switchAddressAlert case abortSwitchAddressAlert case syncConnectionForceAlert + case queueInfo(info: String) case error(title: LocalizedStringKey, error: LocalizedStringKey = "") var id: String { @@ -119,6 +120,7 @@ struct ChatInfoView: View { case .switchAddressAlert: return "switchAddressAlert" case .abortSwitchAddressAlert: return "abortSwitchAddressAlert" case .syncConnectionForceAlert: return "syncConnectionForceAlert" + case let .queueInfo(info): return "queueInfo \(info)" case let .error(title, _): return "error \(title)" } } @@ -224,6 +226,18 @@ struct ChatInfoView: View { Section(header: Text("For console")) { infoRow("Local name", chat.chatInfo.localDisplayName) infoRow("Database ID", "\(chat.chatInfo.apiId)") + Button ("Debug delivery") { + Task { + do { + let info = queueInfoText(try await apiContactQueueInfo(chat.chatInfo.apiId)) + await MainActor.run { alert = .queueInfo(info: info) } + } catch let e { + logger.error("apiContactQueueInfo error: \(responseError(e))") + let a = getErrorAlert(e, "Error") + await MainActor.run { alert = .error(title: a.title, error: a.message) } + } + } + } } } } @@ -243,6 +257,7 @@ struct ChatInfoView: View { case .switchAddressAlert: return switchAddressAlert(switchContactAddress) case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchContactAddress) case .syncConnectionForceAlert: return syncConnectionForceAlert({ syncContactConnection(force: true) }) + case let .queueInfo(info): return queueInfoAlert(info) case let .error(title, error): return mkAlert(title: title, message: error) } } @@ -577,6 +592,22 @@ func syncConnectionForceAlert(_ syncConnectionForce: @escaping () -> Void) -> Al ) } +func queueInfoText(_ info: (RcvMsgInfo?, QueueInfo)) -> String { + let (rcvMsgInfo, qInfo) = info + var msgInfo: String + if let rcvMsgInfo { msgInfo = encodeJSON(rcvMsgInfo) } else { msgInfo = "none" } + return String.localizedStringWithFormat(NSLocalizedString("server queue info: %@\n\nlast received msg: %@", comment: "queue info"), encodeJSON(qInfo), msgInfo) +} + +func queueInfoAlert(_ info: String) -> Alert { + Alert( + title: Text("Message queue info"), + message: Text(info), + primaryButton: .default(Text("Ok")), + secondaryButton: .default(Text("Copy")) { UIPasteboard.general.string = info } + ) +} + struct ChatInfoView_Previews: PreviewProvider { static var previews: some View { ChatInfoView( diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift index 0af0469e42..53d840306e 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift @@ -54,7 +54,7 @@ struct CIFileView: View { switch (file.fileStatus) { case .sndStored: return file.fileProtocol == .local case .sndTransfer: return false - case .sndComplete: return false + case .sndComplete: return true case .sndCancelled: return false case .sndError: return false case .rcvInvitation: return true @@ -113,6 +113,11 @@ struct CIFileView: View { if file.fileProtocol == .local, let fileSource = getLoadedFileSource(file) { saveCryptoFile(fileSource) } + case .sndComplete: + logger.debug("CIFileView fileAction - in .sndComplete") + if let fileSource = getLoadedFileSource(file) { + saveCryptoFile(fileSource) + } default: break } } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIInvalidJSONView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIInvalidJSONView.swift index 0299a5e6f8..40ed8bc76c 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIInvalidJSONView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIInvalidJSONView.swift @@ -24,7 +24,7 @@ struct CIInvalidJSONView: View { .cornerRadius(18) .textSelection(.disabled) .onTapGesture { showJSON = true } - .sheet(isPresented: $showJSON) { + .appSheet(isPresented: $showJSON) { invalidJSONView(json) } } diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 4055ca2b28..27eb3bd653 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -131,7 +131,7 @@ struct ChatView: View { } label: { ChatInfoToolbar(chat: chat) } - .sheet(isPresented: $showChatInfoSheet, onDismiss: { + .appSheet(isPresented: $showChatInfoSheet, onDismiss: { connectionStats = nil customUserProfile = nil connectionCode = nil diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift index a24608b7e7..a851e3fc1d 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift @@ -35,6 +35,7 @@ struct GroupMemberInfoView: View { case abortSwitchAddressAlert case syncConnectionForceAlert case planAndConnectAlert(alert: PlanAndConnectAlert) + case queueInfo(info: String) case error(title: LocalizedStringKey, error: LocalizedStringKey) var id: String { @@ -49,6 +50,7 @@ struct GroupMemberInfoView: View { case .abortSwitchAddressAlert: return "abortSwitchAddressAlert" case .syncConnectionForceAlert: return "syncConnectionForceAlert" case let .planAndConnectAlert(alert): return "planAndConnectAlert \(alert.id)" + case let .queueInfo(info): return "queueInfo \(info)" case let .error(title, _): return "error \(title)" } } @@ -178,6 +180,18 @@ struct GroupMemberInfoView: View { Section("For console") { infoRow("Local name", member.localDisplayName) infoRow("Database ID", "\(member.groupMemberId)") + Button ("Debug delivery") { + Task { + do { + let info = queueInfoText(try await apiGroupMemberQueueInfo(groupInfo.apiId, member.groupMemberId)) + await MainActor.run { alert = .queueInfo(info: info) } + } catch let e { + logger.error("apiContactQueueInfo error: \(responseError(e))") + let a = getErrorAlert(e, "Error") + await MainActor.run { alert = .error(title: a.title, error: a.message) } + } + } + } } } } @@ -223,6 +237,7 @@ struct GroupMemberInfoView: View { case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchMemberAddress) case .syncConnectionForceAlert: return syncConnectionForceAlert({ syncMemberConnection(force: true) }) case let .planAndConnectAlert(alert): return planAndConnectAlert(alert, dismiss: true) + case let .queueInfo(info): return queueInfoAlert(info) case let .error(title, error): return Alert(title: Text(title), message: Text(error)) } } diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift index efe254323e..73c3c73556 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift @@ -349,10 +349,12 @@ struct ChatListNavLink: View { .tint(.accentColor) } .frame(height: rowHeights[dynamicTypeSize]) - .sheet(isPresented: $showContactConnectionInfo) { - if case let .contactConnection(contactConnection) = chat.chatInfo { - ContactConnectionInfo(contactConnection: contactConnection) - .environment(\EnvironmentValues.refresh as! WritableKeyPath, nil) + .appSheet(isPresented: $showContactConnectionInfo) { + Group { + if case let .contactConnection(contactConnection) = chat.chatInfo { + ContactConnectionInfo(contactConnection: contactConnection) + .environment(\EnvironmentValues.refresh as! WritableKeyPath, nil) + } } } .onTapGesture { @@ -467,7 +469,7 @@ struct ChatListNavLink: View { .padding(4) .frame(height: rowHeights[dynamicTypeSize]) .onTapGesture { showInvalidJSON = true } - .sheet(isPresented: $showInvalidJSON) { + .appSheet(isPresented: $showInvalidJSON) { invalidJSONView(json) .environment(\EnvironmentValues.refresh as! WritableKeyPath, nil) } diff --git a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift index 8c1a3bf4e1..5da7c8e877 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift @@ -123,7 +123,7 @@ struct UserProfilesView: View { deleteModeButton("Profile and server connections", true) deleteModeButton("Local profile data only", false) } - .sheet(item: $selectedUser) { user in + .appSheet(item: $selectedUser) { user in HiddenProfileView(user: user, profileHidden: $profileHidden) } .onChange(of: profileHidden) { _ in @@ -131,7 +131,7 @@ struct UserProfilesView: View { withAnimation { profileHidden = false } } } - .sheet(item: $profileAction) { action in + .appSheet(item: $profileAction) { action in profileActionView(action) } .alert(item: $alert) { alert in 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 28abc7221a..673d6668f9 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -1717,6 +1717,10 @@ This is your own one-time link! Базата данни ще бъде мигрирана, когато приложението се рестартира No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Децентрализиран @@ -3684,6 +3688,10 @@ This is your link for group %@! Чернова на съобщение No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Реакции на съобщения @@ -7539,6 +7547,12 @@ SimpleX сървърите не могат да видят вашия профи изпрати лично съобщение No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address зададен нов адрес за контакт 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 41e770b180..24c71a3487 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -1647,6 +1647,10 @@ This is your own one-time link! Databáze bude přenesena po restartu aplikace No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Decentralizované @@ -3541,6 +3545,10 @@ This is your link for group %@! Návrh zprávy No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Reakce na zprávy @@ -7247,6 +7255,12 @@ Servery SimpleX nevidí váš profil. odeslat přímou zprávu No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address profile update event chat item 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 5c3c74ba77..4889950d33 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -715,6 +715,7 @@ Allow downgrade + Herabstufung erlauben No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Sie nutzen immer privates Routing. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Kapazität überschritten - der Empfänger hat die zuvor gesendeten Nachrichten nicht empfangen. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Dateien von unbekannten Servern bestätigen. No comment provided by engineer. @@ -1717,6 +1721,10 @@ Das ist Ihr eigener Einmal-Link! Die Datenbank wird beim nächsten Start der App migriert No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Dezentral @@ -1966,6 +1974,7 @@ Das kann nicht rückgängig gemacht werden! Destination server error: %@ + Zielserver-Fehler: %@ snd error text @@ -2075,15 +2084,17 @@ Das kann nicht rückgängig gemacht werden! Do NOT send messages directly, even if your or destination server does not support private routing. + Nachrichten werden nicht direkt versendet, selbst wenn Ihr oder der Zielserver kein privates Routing unterstützt. No comment provided by engineer. Do NOT use SimpleX for emergency calls. - Nutzen Sie SimpleX nicht für Notrufe. + SimpleX NICHT für Notrufe nutzen. No comment provided by engineer. Do NOT use private routing. + Sie nutzen KEIN privates Routing. No comment provided by engineer. @@ -2743,6 +2754,7 @@ Das kann nicht rückgängig gemacht werden! Files + Dateien No comment provided by engineer. @@ -2853,11 +2865,15 @@ Das kann nicht rückgängig gemacht werden! Forwarding server: %1$@ Destination server error: %2$@ + Weiterleitungsserver: %1$@ +Zielserver Fehler: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Weiterleitungsserver: %1$@ +Fehler: %2$@ snd error text @@ -3677,6 +3693,7 @@ Das ist Ihr Link für die Gruppe %@! Message delivery warning + Warnung bei der Nachrichtenzustellung item status text @@ -3684,6 +3701,10 @@ Das ist Ihr Link für die Gruppe %@! Nachrichtenentwurf No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Reaktionen auf Nachrichten @@ -3701,10 +3722,12 @@ Das ist Ihr Link für die Gruppe %@! Message routing fallback + Fallback für das Nachrichten-Routing No comment provided by engineer. Message routing mode + Modus für das Nachrichten-Routing No comment provided by engineer. @@ -3869,6 +3892,7 @@ Das ist Ihr Link für die Gruppe %@! Network issues - message expired after many attempts to send it. + Netzwerk-Fehler - die Nachricht ist nach vielen Sende-Versuchen abgelaufen. snd error text @@ -4414,10 +4438,12 @@ Fehler: %@ Private message routing + Privates Nachrichten-Routing No comment provided by engineer. Private message routing 🚀 + Privates Nachrichten-Routing 🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Fehler: %@ Private routing + Privates Routing No comment provided by engineer. @@ -4511,6 +4538,7 @@ Fehler: %@ Protect IP address + IP-Adresse schützen No comment provided by engineer. @@ -4521,6 +4549,8 @@ Fehler: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Schützen Sie Ihre IP-Adresse vor den Nachrichten-Relais , die Ihre Kontakte ausgewählt haben. +Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Dateien sicher empfangen No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Nachrichten werden direkt versendet, wenn die IP-Adresse geschützt ist, und Ihr oder der Zielserver kein privates Routing unterstützt. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Nachrichten werden direkt versendet, wenn Ihr oder der Zielserver kein privates Routing unterstützt. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + Die Server-Adresse ist nicht mit den Netzwerk-Einstellungen kompatibel. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + Die Server-Version ist nicht mit den Netzwerk-Einstellungen kompatibel. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Nachrichtenstatus anzeigen No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Bei Nachrichten, die über privates Routing versendet wurden, → anzeigen. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro 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). No comment provided by engineer. @@ -5874,6 +5912,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro To protect your IP address, private routing uses your SMP servers to deliver messages. + Zum Schutz Ihrer IP-Adresse, wird für die Nachrichten-Auslieferung privates Routing über Ihre konfigurierten SMP-Server genutzt. No comment provided by engineer. @@ -6015,6 +6054,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Unknown servers! + Unbekannte Server! No comment provided by engineer. @@ -6136,7 +6176,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Use current profile - Das aktuelle Profil nutzen + Aktuelles Profil nutzen No comment provided by engineer. @@ -6156,7 +6196,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Use new incognito profile - Ein neues Inkognito-Profil nutzen + Neues Inkognito-Profil nutzen No comment provided by engineer. @@ -6166,10 +6206,12 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Use private routing with unknown servers when IP address is not protected. + Sie nutzen privates Routing mit unbekannten Servern, wenn Ihre IP-Adresse nicht geschützt ist. No comment provided by engineer. Use private routing with unknown servers. + Sie nutzen privates Routing mit unbekannten Servern. No comment provided by engineer. @@ -6409,10 +6451,12 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Without Tor or VPN, your IP address will be visible to file servers. + Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für Datei-Server sichtbar sein. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für diese XFTP-Relais sichtbar sein: %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Wrong key or unknown connection - most likely this connection is deleted. + Falscher Schlüssel oder unbekannte Verbindung - höchstwahrscheinlich ist diese Verbindung gelöscht worden. snd error text @@ -7539,6 +7584,12 @@ SimpleX-Server können Ihr Profil nicht einsehen. Direktnachricht senden No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address Es wurde eine neue Kontaktadresse festgelegt @@ -7581,6 +7632,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. unknown relays + Unbekannte Relais No comment provided by engineer. @@ -7590,6 +7642,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. unprotected + Ungeschützt No comment provided by engineer. @@ -7659,6 +7712,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. when IP hidden + Wenn die IP-Adresse versteckt ist No comment provided by engineer. @@ -7797,7 +7851,7 @@ SimpleX-Server können Ihr Profil nicht einsehen. Copyright © 2022 SimpleX Chat. All rights reserved. - Copyright © 2022 SimpleX Chat. All rights reserved. + Copyright © 2024 SimpleX Chat. All rights reserved. Copyright (human-readable) 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 777bd312de..aca1aefb11 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -1721,6 +1721,11 @@ This is your own one-time link! Database will be migrated when the app restarts No comment provided by engineer. + + Debug delivery + Debug delivery + No comment provided by engineer. + Decentralized Decentralized @@ -3697,6 +3702,11 @@ This is your link for group %@! Message draft No comment provided by engineer. + + Message queue info + Message queue info + No comment provided by engineer. + Message reactions Message reactions @@ -7576,6 +7586,15 @@ SimpleX servers cannot see your profile. send direct message No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address set new contact address 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 2479e5f07a..d76630ab3f 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -715,6 +715,7 @@ Allow downgrade + Permitir versión anterior No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Usar siempre enrutamiento privado. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Capacidad excedida - el destinatario no ha recibido los mensajes previos. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Confirma archivos de servidores desconocidos. No comment provided by engineer. @@ -1717,6 +1721,10 @@ This is your own one-time link! La base de datos migrará cuando se reinicie la aplicación No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Descentralizada @@ -1966,6 +1974,7 @@ This cannot be undone! Destination server error: %@ + Error del servidor de destino: %@ snd error text @@ -2075,6 +2084,7 @@ This cannot be undone! Do NOT send messages directly, even if your or destination server does not support private routing. + NO enviar mensajes directamente incluso si tu servidor o el de destino no soportan enrutamiento privado. No comment provided by engineer. @@ -2084,6 +2094,7 @@ This cannot be undone! Do NOT use private routing. + NO usar enrutamiento privado. No comment provided by engineer. @@ -2743,6 +2754,7 @@ This cannot be undone! Files + Archivos No comment provided by engineer. @@ -2853,11 +2865,15 @@ This cannot be undone! Forwarding server: %1$@ Destination server error: %2$@ + Servidor de reenvío: %1$@ +Error del servidor de destino: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Servidor de reenvío: %1$@ +Error: %2$@ snd error text @@ -3677,6 +3693,7 @@ This is your link for group %@! Message delivery warning + Aviso de entrega de mensaje item status text @@ -3684,6 +3701,10 @@ This is your link for group %@! Borrador de mensaje No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Reacciones a mensajes @@ -3701,10 +3722,12 @@ This is your link for group %@! Message routing fallback + Enrutamiento de mensajes alternativo No comment provided by engineer. Message routing mode + Modo de enrutamiento de mensajes No comment provided by engineer. @@ -3869,6 +3892,7 @@ This is your link for group %@! Network issues - message expired after many attempts to send it. + Problema en la red - el mensaje ha expirado tras muchos intentos de envío. snd error text @@ -4414,10 +4438,12 @@ Error: %@ Private message routing + Enrutamiento privado de mensajes No comment provided by engineer. Private message routing 🚀 + Enrutamiento privado de mensajes 🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Error: %@ Private routing + Enrutamiento privado No comment provided by engineer. @@ -4511,6 +4538,7 @@ Error: %@ Protect IP address + Proteger dirección IP No comment provided by engineer. @@ -4521,6 +4549,8 @@ Error: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Protege tu dirección IP de los servidores de retransmisión elegidos por tus contactos. +Actívalo en ajustes de *Servidores y Redes*. No comment provided by engineer. @@ -4695,7 +4725,7 @@ Enable in *Network & servers* settings. Relay server is only used if necessary. Another party can observe your IP address. - El retransmisor sólo se usa en caso de necesidad. Un tercero podría ver tu IP. + El servidor de retransmisión sólo se usa en caso de necesidad. Un tercero podría ver tu IP. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Recibe archivos de forma segura No comment provided by engineer. @@ -5074,7 +5105,7 @@ Enable in *Network & servers* settings. Send direct message to connect - Enviar mensaje directo para conectar + Envia un mensaje para conectar No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Enviar mensajes directamente cuando tu dirección IP está protegida y tu servidor o el de destino no admitan enrutamiento privado. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Enviar mensajes directamente cuando tu servidor o el de destino no admitan enrutamiento privado. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + La dirección del servidor es incompatible con la configuración de la red. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + La versión del servidor es incompatible con la configuración de red. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Estado del mensaje No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Mostrar → en mensajes con enrutamiento privado. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. 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 .onion). No comment provided by engineer. @@ -5874,6 +5912,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. To protect your IP address, private routing uses your SMP servers to deliver messages. + Para proteger tu dirección IP, el enrutamiento privado usa tus servidores SMP para enviar mensajes. No comment provided by engineer. @@ -6015,6 +6054,7 @@ Se te pedirá que completes la autenticación antes de activar esta función. Unknown servers! + ¡Servidores desconocidos! No comment provided by engineer. @@ -6167,10 +6207,12 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb Use private routing with unknown servers when IP address is not protected. + Usar enrutamiento privado con servidores desconocidos cuando la dirección IP no está protegida. No comment provided by engineer. Use private routing with unknown servers. + Usar enrutamiento privado con servidores desconocidos. No comment provided by engineer. @@ -6410,10 +6452,12 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb Without Tor or VPN, your IP address will be visible to file servers. + Sin Tor o VPN, tu dirección IP será visible para los servidores de archivos. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Sin Tor o VPN, tu dirección IP será visible para estos servidores XFTP: %@. No comment provided by engineer. @@ -6423,6 +6467,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb Wrong key or unknown connection - most likely this connection is deleted. + Clave incorrecta o conexión desconocida - probablemente esta conexión fue eliminada. snd error text @@ -7540,6 +7585,12 @@ Los servidores de SimpleX no pueden ver tu perfil. Enviar mensaje directo No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address nueva dirección de contacto @@ -7582,6 +7633,7 @@ Los servidores de SimpleX no pueden ver tu perfil. unknown relays + servidor de retransmisión desconocido No comment provided by engineer. @@ -7591,6 +7643,7 @@ Los servidores de SimpleX no pueden ver tu perfil. unprotected + desprotegido No comment provided by engineer. @@ -7660,6 +7713,7 @@ Los servidores de SimpleX no pueden ver tu perfil. when IP hidden + con IP oculta 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 b15c2b1779..77f9e29871 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -1640,6 +1640,10 @@ This is your own one-time link! Tietokanta siirretään, kun sovellus käynnistyy uudelleen No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Hajautettu @@ -3531,6 +3535,10 @@ This is your link for group %@! Viestiluonnos No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Viestireaktiot @@ -7231,6 +7239,12 @@ SimpleX-palvelimet eivät näe profiiliasi. send direct message No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address profile update event chat item 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 28ddaccb53..7e6c0d113d 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -715,6 +715,7 @@ Allow downgrade + Autoriser la rétrogradation No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Toujours utiliser le routage privé. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Capacité dépassée - le destinataire n'a pas pu recevoir les messages envoyés précédemment. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Confirmer les fichiers provenant de serveurs inconnus. No comment provided by engineer. @@ -1717,6 +1721,10 @@ Il s'agit de votre propre lien unique ! La base de données sera migrée lors du redémarrage de l'app No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Décentralisé @@ -1966,6 +1974,7 @@ Cette opération ne peut être annulée ! Destination server error: %@ + Erreur du serveur de destination : %@ snd error text @@ -2075,6 +2084,7 @@ Cette opération ne peut être annulée ! Do NOT send messages directly, even if your or destination server does not support private routing. + Ne pas envoyer de messages directement, même si votre serveur ou le serveur de destination ne prend pas en charge le routage privé. No comment provided by engineer. @@ -2084,6 +2094,7 @@ Cette opération ne peut être annulée ! Do NOT use private routing. + Ne pas utiliser de routage privé. No comment provided by engineer. @@ -2743,6 +2754,7 @@ Cette opération ne peut être annulée ! Files + Fichiers No comment provided by engineer. @@ -2853,11 +2865,15 @@ Cette opération ne peut être annulée ! Forwarding server: %1$@ Destination server error: %2$@ + Serveur de transfert : %1$@ +Erreur du serveur de destination : %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Serveur de transfert : %1$@ +Erreur : %2$@ snd error text @@ -3677,6 +3693,7 @@ Voici votre lien pour le groupe %@ ! Message delivery warning + Avertissement sur la distribution des messages item status text @@ -3684,6 +3701,10 @@ Voici votre lien pour le groupe %@ ! Brouillon de message No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Réactions aux messages @@ -3701,10 +3722,12 @@ Voici votre lien pour le groupe %@ ! Message routing fallback + Rabattement du routage des messages No comment provided by engineer. Message routing mode + Mode de routage des messages No comment provided by engineer. @@ -3869,6 +3892,7 @@ Voici votre lien pour le groupe %@ ! Network issues - message expired after many attempts to send it. + Problèmes de réseau - le message a expiré après plusieurs tentatives d'envoi. snd error text @@ -4414,10 +4438,12 @@ Erreur : %@ Private message routing + Routage privé des messages No comment provided by engineer. Private message routing 🚀 + Routage privé des messages 🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Erreur : %@ Private routing + Routage privé No comment provided by engineer. @@ -4511,6 +4538,7 @@ Erreur : %@ Protect IP address + Protéger l'adresse IP No comment provided by engineer. @@ -4521,6 +4549,8 @@ Erreur : %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Protégez votre adresse IP des relais de messagerie choisis par vos contacts. +Activez-le dans les paramètres *Réseau et serveurs*. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Réception de fichiers en toute sécurité No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Envoyer les messages de manière directe lorsque l'adresse IP est protégée et que votre serveur ou le serveur de destination ne prend pas en charge le routage privé. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Envoyez les messages de manière directe lorsque votre serveur ou le serveur de destination ne prend pas en charge le routage privé. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + L'adresse du serveur est incompatible avec les paramètres du réseau. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + La version du serveur est incompatible avec les paramètres du réseau. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Afficher le statut du message No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Afficher → sur les messages envoyés via le routage privé. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. The app will ask to confirm downloads from unknown file servers (except .onion). + L'application demandera de confirmer les téléchargements à partir de serveurs de fichiers inconnus (sauf .onion). No comment provided by engineer. @@ -5874,6 +5912,7 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. To protect your IP address, private routing uses your SMP servers to deliver messages. + Pour protéger votre adresse IP, le routage privé utilise vos serveurs SMP pour délivrer les messages. No comment provided by engineer. @@ -6015,6 +6054,7 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s Unknown servers! + Serveurs inconnus ! No comment provided by engineer. @@ -6166,10 +6206,12 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Use private routing with unknown servers when IP address is not protected. + Utiliser le routage privé avec des serveurs inconnus lorsque l'adresse IP n'est pas protégée. No comment provided by engineer. Use private routing with unknown servers. + Utiliser le routage privé avec des serveurs inconnus. No comment provided by engineer. @@ -6409,10 +6451,12 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Without Tor or VPN, your IP address will be visible to file servers. + Sans Tor ou un VPN, votre adresse IP sera visible par les serveurs de fichiers. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Sans Tor ni VPN, votre adresse IP sera visible par ces relais XFTP : %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Wrong key or unknown connection - most likely this connection is deleted. + Clé erronée ou connexion non identifiée - il est très probable que cette connexion soit supprimée. snd error text @@ -7539,6 +7584,12 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. envoyer un message direct No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address a changé d'adresse de contact @@ -7581,6 +7632,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. unknown relays + relais inconnus No comment provided by engineer. @@ -7590,6 +7642,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. unprotected + non protégé No comment provided by engineer. @@ -7659,6 +7712,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. when IP hidden + lorsque l'IP est masquée 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 439bd0a842..13594c8efa 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -349,7 +349,7 @@ **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). - **Legprivátabb**: ne használja a SimpleX Chat értesítési szervert, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást). + **Legprivátabb**: ne használja a SimpleX Chat értesítési kiszolgálót, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást). No comment provided by engineer. @@ -364,7 +364,7 @@ **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. - **Javasolt**: az eszköztoken és az értesítések elküldésre kerülnek a SimpleX Chat értesítési szerverre, kivéve az üzenet tartalma, mérete vagy az, hogy kitől származik. + **Javasolt**: 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. @@ -715,6 +715,7 @@ Allow downgrade + Korábbi verzióra történő visszatérés engedélyezése No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Mindig használjon privát útválasztást. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Kapacitás túllépés - a címzett nem kapta meg a korábban elküldött üzeneteket. snd error text @@ -1223,7 +1226,7 @@ Choose _Migrate from another device_ on the new device and scan QR code. - Válassza az _Átköltöztetés egy másik eszközről_ opciót az új eszközön és szkennelje be a QR-kódot. + Válassza az _Átköltöztetés egy másik eszközről_ opciót az új eszközön és olvassa be a QR-kódot. No comment provided by engineer. @@ -1243,17 +1246,17 @@ Clear conversation - Beszélgetés kiürítése + Üzenetek kiürítése No comment provided by engineer. Clear conversation? - Beszélgetés kiürítése? + Üzenetek kiürítése? No comment provided by engineer. Clear private notes? - Privát jegyzetek törlése? + Privát jegyzetek kiürítése? No comment provided by engineer. @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Ismeretlen kiszolgálókról származó fájlok jóváhagyása. No comment provided by engineer. @@ -1717,6 +1721,10 @@ Ez az egyszer használatos hivatkozása! Az adatbázis az alkalmazás újraindításakor migrálásra kerül No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Decentralizált @@ -1966,6 +1974,7 @@ Ez a művelet nem vonható vissza! Destination server error: %@ + Célkiszolgáló hiba: %@ snd error text @@ -2075,6 +2084,7 @@ Ez a művelet nem vonható vissza! Do NOT send messages directly, even if your or destination server does not support private routing. + Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást. No comment provided by engineer. @@ -2084,6 +2094,7 @@ Ez a művelet nem vonható vissza! Do NOT use private routing. + Ne használjon privát útválasztást. No comment provided by engineer. @@ -2743,6 +2754,7 @@ Ez a művelet nem vonható vissza! Files + Fájlok No comment provided by engineer. @@ -2853,11 +2865,15 @@ Ez a művelet nem vonható vissza! Forwarding server: %1$@ Destination server error: %2$@ + Továbbító kiszolgáló: %1$@ +Célkiszolgáló hiba:%2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Továbbító kiszolgáló: %1$@ +Hiba: %2$@ snd error text @@ -3607,7 +3623,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@). - Győződjön meg arról, hogy a %@ szervercímek megfelelő formátumúak, sorszeparáltak és nem duplikáltak (%@). + Győződjön meg arról, hogy a %@ kiszolgálócímek megfelelő formátumúak, sorszeparáltak és nem duplikáltak (%@). No comment provided by engineer. @@ -3627,7 +3643,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Mark read - Olvasottként jelölés + Olvasottnak jelölés No comment provided by engineer. @@ -3677,6 +3693,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Message delivery warning + Üzenet kézbesítési figyelmeztetés item status text @@ -3684,6 +3701,10 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Üzenetvázlat No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Üzenetreakciók @@ -3701,10 +3722,12 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Message routing fallback + Üzenet útválasztási tartalék No comment provided by engineer. Message routing mode + Üzenet útválasztási mód No comment provided by engineer. @@ -3739,12 +3762,12 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery. - Az üzeneteket, fájlokat és hívásokat **végpontok közötti titkosítással** és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi. + Az üzeneteket, fájlokat és hívásokat **végpontok közötti titkosítással**, sérülés utáni titkosság-védelemmel és -helyreállítással, továbbá visszautasítással védi. No comment provided by engineer. Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery. - Az üzeneteket, fájlokat és hívásokat **végpontok közötti kvantumrezisztens titkosítással** és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi. + Az üzeneteket, fájlokat és hívásokat **végpontok közötti kvantumrezisztens titkosítással**, sérülés utáni titkosság-védelemmel és -helyreállítással, továbbá visszautasítással védi. No comment provided by engineer. @@ -3869,6 +3892,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! 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. snd error text @@ -4414,10 +4438,12 @@ Hiba: %@ Private message routing + Privát üzenet útválasztás No comment provided by engineer. Private message routing 🚀 + Privát üzenet útválasztás 🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Hiba: %@ Private routing + Privát útválasztás No comment provided by engineer. @@ -4511,6 +4538,7 @@ Hiba: %@ Protect IP address + Az IP-cím védelme No comment provided by engineer. @@ -4521,6 +4549,8 @@ Hiba: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Védje IP-címét az ismerősei által kiválasztott üzenetküldő átjátszókkal szemben. +Engedélyezze a beállításokban a *Hálózat és kiszolgálók* menüpontban. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Fájlok biztonságos fogadása No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Közvetlen üzenetküldés, ha az IP-cím védett és az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Közvetlen üzenetküldés, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + A kiszolgáló címe nem kompatibilis a hálózati beállításokkal. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + A kiszolgáló verziója nem kompatibilis a hálózati beállításokkal. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Üzenet állapot megjelenítése No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Egy „→” jel megjelenítése a privát útválasztáson keresztül küldött üzeneteknél. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. 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. No comment provided by engineer. @@ -5874,6 +5912,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. To protect your IP address, private routing uses your SMP servers to deliver messages. + Az IP-címe védelme érdekében a privát útválasztás az SMP-kiszolgálókat használja az üzenetek kézbesítéséhez. No comment provided by engineer. @@ -5900,7 +5939,7 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej 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 ellenőrzéséhez ismerősével hasonlítsa össze (vagy szkennelje be) az eszközén lévő kódot. + A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal. No comment provided by engineer. @@ -6015,6 +6054,7 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej Unknown servers! + Ismeretlen kiszolgálók! No comment provided by engineer. @@ -6091,7 +6131,7 @@ A kapcsolódáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsol Updating settings will re-connect the client to all servers. - A beállítások frissítése a szerverekhez újra kapcsolódással jár. + A beállítások frissítése a kiszolgálókhoz való újra kapcsolódással jár. No comment provided by engineer. @@ -6166,10 +6206,12 @@ A kapcsolódáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsol Use private routing with unknown servers when IP address is not protected. + Privát útválasztás használata ismeretlen kiszolgálókkal, ha az IP-cím nem védett. No comment provided by engineer. Use private routing with unknown servers. + Használjon privát útválasztást ismeretlen kiszolgálókkal. No comment provided by engineer. @@ -6409,10 +6451,12 @@ A kapcsolódáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsol Without Tor or VPN, your IP address will be visible to file servers. + Tor vagy VPN nélkül az IP-címe látható lesz a fájlkiszolgálók számára. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Tor vagy VPN nélkül az IP-címe látható lesz ezen XFTP átjátszók számára: %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ A kapcsolódáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsol Wrong key or unknown connection - most likely this connection is deleted. + Rossz kulcs vagy ismeretlen kapcsolat - valószínűleg ez a kapcsolat törlődött. snd error text @@ -6598,7 +6643,7 @@ Csatlakozási kérés megismétlése? You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. - Ön szabályozhatja, hogy mely kiszogál(ók)ón keresztül **kapja** az üzeneteket, az ismerősöket - az üzenetküldéshez használt szervereken. + Ön szabályozhatja, hogy mely kiszogál(ók)ón keresztül **kapja** az üzeneteket, az ismerősöket - az üzenetküldéshez használt kiszolgálókon. No comment provided by engineer. @@ -7539,6 +7584,12 @@ A SimpleX kiszolgálók nem látjhatják profilját. közvetlen üzenet küldése No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address új kapcsolattartási azonosító beállítása @@ -7581,6 +7632,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. unknown relays + ismeretlen átjátszók No comment provided by engineer. @@ -7590,6 +7642,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. unprotected + nem védett No comment provided by engineer. @@ -7659,6 +7712,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. when IP hidden + ha az IP-cím rejtett 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 f1693f5350..b6fd18f551 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -715,6 +715,7 @@ Allow downgrade + Consenti downgrade No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Usa sempre l'instradamento privato. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Quota superata - il destinatario non ha ricevuto i messaggi precedentemente inviati. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Conferma i file da server sconosciuti. No comment provided by engineer. @@ -1717,6 +1721,10 @@ Questo è il tuo link una tantum! Il database verrà migrato al riavvio dell'app No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Decentralizzato @@ -1966,6 +1974,7 @@ Non è reversibile! Destination server error: %@ + Errore del server di destinazione: %@ snd error text @@ -2075,6 +2084,7 @@ Non è reversibile! Do NOT send messages directly, even if your or destination server does not support private routing. + NON inviare messaggi direttamente, anche se il tuo server o quello di destinazione non supporta l'instradamento privato. No comment provided by engineer. @@ -2084,6 +2094,7 @@ Non è reversibile! Do NOT use private routing. + NON usare l'instradamento privato. No comment provided by engineer. @@ -2743,6 +2754,7 @@ Non è reversibile! Files + File No comment provided by engineer. @@ -2853,11 +2865,15 @@ Non è reversibile! Forwarding server: %1$@ Destination server error: %2$@ + Server di inoltro: %1$@ +Errore del server di destinazione: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Server di inoltro: %1$@ +Errore: %2$@ snd error text @@ -3677,6 +3693,7 @@ Questo è il tuo link per il gruppo %@! Message delivery warning + Avviso di consegna del messaggio item status text @@ -3684,6 +3701,10 @@ Questo è il tuo link per il gruppo %@! Bozza dei messaggi No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Reazioni ai messaggi @@ -3701,10 +3722,12 @@ Questo è il tuo link per il gruppo %@! Message routing fallback + Ripiego instradamento messaggio No comment provided by engineer. Message routing mode + Modalità instradamento messaggio No comment provided by engineer. @@ -3869,6 +3892,7 @@ Questo è il tuo link per il gruppo %@! Network issues - message expired after many attempts to send it. + Problemi di rete - messaggio scaduto dopo molti tentativi di inviarlo. snd error text @@ -4414,10 +4438,12 @@ Errore: %@ Private message routing + Instradamento privato messaggi No comment provided by engineer. Private message routing 🚀 + Instradamento privato dei messaggi 🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Errore: %@ Private routing + Instradamento privato No comment provided by engineer. @@ -4511,6 +4538,7 @@ Errore: %@ Protect IP address + Proteggi l'indirizzo IP No comment provided by engineer. @@ -4521,6 +4549,8 @@ Errore: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Proteggi il tuo indirizzo IP dai relay di messaggistica scelti dai tuoi contatti. +Attivalo nelle impostazioni *Rete e server*. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Ricevi i file in sicurezza No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Invia messaggi direttamente quando l'indirizzo IP è protetto e il tuo server o quello di destinazione non supporta l'instradamento privato. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Invia messaggi direttamente quando il tuo server o quello di destinazione non supporta l'instradamento privato. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + L'indirizzo del server non è compatibile con le impostazioni di rete. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + La versione del server non è compatibile con le impostazioni di rete. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Mostra stato del messaggio No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Mostra → nei messaggi inviati via instradamento privato. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. 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). No comment provided by engineer. @@ -5874,6 +5912,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. To protect your IP address, private routing uses your SMP servers to deliver messages. + Per proteggere il tuo indirizzo IP, l'instradamento privato usa i tuoi server SMP per consegnare i messaggi. No comment provided by engineer. @@ -6015,6 +6054,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Unknown servers! + Server sconosciuti! No comment provided by engineer. @@ -6166,10 +6206,12 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Use private routing with unknown servers when IP address is not protected. + Usa l'instradamento privato con server sconosciuti quando l'indirizzo IP non è protetto. No comment provided by engineer. Use private routing with unknown servers. + Usa l'instradamento privato con server sconosciuti. No comment provided by engineer. @@ -6409,10 +6451,12 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Without Tor or VPN, your IP address will be visible to file servers. + Senza Tor o VPN, il tuo indirizzo IP sarà visibile ai server di file. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Senza Tor o VPN, il tuo indirizzo IP sarà visibile a questi relay XFTP: %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Wrong key or unknown connection - most likely this connection is deleted. + Chiave sbagliata o connessione sconosciuta - molto probabilmente questa connessione è stata eliminata. snd error text @@ -7539,6 +7584,12 @@ I server di SimpleX non possono vedere il tuo profilo. invia messaggio diretto No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address impostato nuovo indirizzo di contatto @@ -7581,6 +7632,7 @@ I server di SimpleX non possono vedere il tuo profilo. unknown relays + relay sconosciuti No comment provided by engineer. @@ -7590,6 +7642,7 @@ I server di SimpleX non possono vedere il tuo profilo. unprotected + non protetto No comment provided by engineer. @@ -7659,6 +7712,7 @@ I server di SimpleX non possono vedere il tuo profilo. when IP hidden + quando l'IP è nascosto 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 de92dd9e14..395fcb9326 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -1664,6 +1664,10 @@ This is your own one-time link! データベースはアプリ再起動時に移行されます No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized 分散型 @@ -3555,6 +3559,10 @@ This is your link for group %@! メッセージの下書き No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions メッセージへのリアクション @@ -7249,6 +7257,12 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 send direct message No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address profile update event chat item 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 24c53f1cdb..e4ee887f4b 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -715,6 +715,7 @@ Allow downgrade + Downgraden toestaan No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Gebruik altijd privéroutering. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Capaciteit overschreden - ontvanger heeft eerder verzonden berichten niet ontvangen. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Bevestig bestanden van onbekende servers. No comment provided by engineer. @@ -1717,6 +1721,10 @@ Dit is uw eigen eenmalige link! De database wordt gemigreerd wanneer de app opnieuw wordt opgestart No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Gedecentraliseerd @@ -1966,6 +1974,7 @@ Dit kan niet ongedaan gemaakt worden! Destination server error: %@ + Bestemmingsserverfout: %@ snd error text @@ -2075,6 +2084,7 @@ Dit kan niet ongedaan gemaakt worden! Do NOT send messages directly, even if your or destination server does not support private routing. + Stuur GEEN berichten rechtstreeks, zelfs als uw of de bestemmingsserver geen privéroutering ondersteunt. No comment provided by engineer. @@ -2084,6 +2094,7 @@ Dit kan niet ongedaan gemaakt worden! Do NOT use private routing. + Gebruik GEEN privéroutering. No comment provided by engineer. @@ -2743,6 +2754,7 @@ Dit kan niet ongedaan gemaakt worden! Files + Bestanden No comment provided by engineer. @@ -2853,11 +2865,15 @@ Dit kan niet ongedaan gemaakt worden! Forwarding server: %1$@ Destination server error: %2$@ + Doorstuurserver: %1$@ +Bestemmingsserverfout: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Doorstuurserver: %1$@ +Fout: %2$@ snd error text @@ -3677,6 +3693,7 @@ Dit is jouw link voor groep %@! Message delivery warning + Waarschuwing voor berichtbezorging item status text @@ -3684,6 +3701,10 @@ Dit is jouw link voor groep %@! Concept bericht No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Reacties op berichten @@ -3701,10 +3722,12 @@ Dit is jouw link voor groep %@! Message routing fallback + Terugval op berichtroutering No comment provided by engineer. Message routing mode + Berichtrouteringsmodus No comment provided by engineer. @@ -3869,6 +3892,7 @@ Dit is jouw link voor groep %@! Network issues - message expired after many attempts to send it. + Netwerkproblemen - bericht is verlopen na vele pogingen om het te verzenden. snd error text @@ -4414,10 +4438,12 @@ Fout: %@ Private message routing + Routering van privéberichten No comment provided by engineer. Private message routing 🚀 + Routing van privéberichten🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Fout: %@ Private routing + Privéroutering No comment provided by engineer. @@ -4511,6 +4538,7 @@ Fout: %@ Protect IP address + Bescherm het IP-adres No comment provided by engineer. @@ -4521,6 +4549,8 @@ Fout: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Bescherm uw IP-adres tegen de berichtenrelais die door uw contacten zijn gekozen. +Schakel dit in in *Netwerk en servers*-instellingen. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Veilig bestanden ontvangen No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Stuur berichten rechtstreeks als het IP-adres beschermd is en uw of bestemmingsserver geen privéroutering ondersteunt. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Stuur berichten rechtstreeks wanneer uw of de doelserver geen privéroutering ondersteunt. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + Serveradres is niet compatibel met netwerkinstellingen. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + Serverversie is incompatibel met netwerkinstellingen. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Toon berichtstatus No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Toon → bij berichten verzonden via privéroutering. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. 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. No comment provided by engineer. @@ -5874,6 +5912,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. To protect your IP address, private routing uses your SMP servers to deliver messages. + Om uw IP-adres te beschermen, gebruikt privéroutering uw SMP-servers om berichten te bezorgen. No comment provided by engineer. @@ -6015,6 +6054,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Unknown servers! + Onbekende servers! No comment provided by engineer. @@ -6166,10 +6206,12 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Use private routing with unknown servers when IP address is not protected. + Gebruik privéroutering met onbekende servers wanneer het IP-adres niet beveiligd is. No comment provided by engineer. Use private routing with unknown servers. + Gebruik privéroutering met onbekende servers. No comment provided by engineer. @@ -6409,10 +6451,12 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Without Tor or VPN, your IP address will be visible to file servers. + Zonder Tor of VPN is uw IP-adres zichtbaar voor bestandsservers. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Zonder Tor of VPN zal uw IP-adres zichtbaar zijn voor deze XFTP-relays: %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Wrong key or unknown connection - most likely this connection is deleted. + Verkeerde sleutel of onbekende verbinding - hoogstwaarschijnlijk is deze verbinding verwijderd. snd error text @@ -7539,6 +7584,12 @@ SimpleX servers kunnen uw profiel niet zien. stuur een direct bericht No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address nieuw contactadres instellen @@ -7581,6 +7632,7 @@ SimpleX servers kunnen uw profiel niet zien. unknown relays + onbekende relays No comment provided by engineer. @@ -7590,6 +7642,7 @@ SimpleX servers kunnen uw profiel niet zien. unprotected + onbeschermd No comment provided by engineer. @@ -7659,6 +7712,7 @@ SimpleX servers kunnen uw profiel niet zien. when IP hidden + wanneer IP verborgen is 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 6f5536d7d2..3a165f8c43 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -715,6 +715,7 @@ Allow downgrade + Zezwól na obniżenie wersji No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Zawsze używaj prywatnego trasowania. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Przekroczono pojemność - odbiorca nie otrzymał wcześniej wysłanych wiadomości. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Potwierdzaj pliki z nieznanych serwerów. No comment provided by engineer. @@ -1717,6 +1721,10 @@ To jest twój jednorazowy link! Baza danych zostanie zmigrowana po ponownym uruchomieniu aplikacji No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Zdecentralizowane @@ -1966,6 +1974,7 @@ To nie może być cofnięte! Destination server error: %@ + Błąd docelowego serwera: %@ snd error text @@ -2075,6 +2084,7 @@ To nie może być cofnięte! Do NOT send messages directly, even if your or destination server does not support private routing. + NIE wysyłaj wiadomości bezpośrednio, nawet jeśli serwer docelowy nie obsługuje prywatnego trasowania. No comment provided by engineer. @@ -2084,6 +2094,7 @@ To nie może być cofnięte! Do NOT use private routing. + NIE używaj prywatnego trasowania. No comment provided by engineer. @@ -2743,6 +2754,7 @@ To nie może być cofnięte! Files + Pliki No comment provided by engineer. @@ -2853,11 +2865,15 @@ To nie może być cofnięte! Forwarding server: %1$@ Destination server error: %2$@ + Serwer przekazujący: %1$@ +Błąd serwera docelowego: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Serwer przekazujący: %1$@ +Błąd: %2$@ snd error text @@ -3677,6 +3693,7 @@ To jest twój link do grupy %@! Message delivery warning + Ostrzeżenie dostarczenia wiadomości item status text @@ -3684,6 +3701,10 @@ To jest twój link do grupy %@! Wersja robocza wiadomości No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Reakcje wiadomości @@ -3701,10 +3722,12 @@ To jest twój link do grupy %@! Message routing fallback + Rezerwowe trasowania wiadomości No comment provided by engineer. Message routing mode + Tryb trasowania wiadomości No comment provided by engineer. @@ -3869,6 +3892,7 @@ To jest twój link do grupy %@! Network issues - message expired after many attempts to send it. + Błąd sieciowy - wiadomość wygasła po wielu próbach wysłania jej. snd error text @@ -4414,10 +4438,12 @@ Błąd: %@ Private message routing + Trasowanie prywatnych wiadomości No comment provided by engineer. Private message routing 🚀 + Trasowanie prywatnych wiadomości🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Błąd: %@ Private routing + Prywatne trasowanie No comment provided by engineer. @@ -4511,6 +4538,7 @@ Błąd: %@ Protect IP address + Chroń adres IP No comment provided by engineer. @@ -4521,6 +4549,8 @@ Błąd: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Chroni Twój adres IP przed przekaźnikami wiadomości wybranych przez Twoje kontakty. +Włącz w ustawianiach *Sieć i serwery* . No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Bezpiecznie otrzymuj pliki No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Wysyłaj wiadomości bezpośrednio, gdy adres IP jest chroniony i Twój lub docelowy serwer nie obsługuje prywatnego trasowania. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Wysyłaj wiadomości bezpośrednio, gdy Twój lub docelowy serwer nie obsługuje prywatnego trasowania. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + Adres serwera jest niekompatybilny z ustawieniami sieciowymi. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + Wersja serwera jest niekompatybilna z ustawieniami sieciowymi. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Pokaż status wiadomości No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Pokaż → na wiadomościach wysłanych przez prywatne trasowanie. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom The app will ask to confirm downloads from unknown file servers (except .onion). + Aplikacja zapyta o potwierdzenie pobierania od nieznanych serwerów plików (poza .onion). No comment provided by engineer. @@ -5874,6 +5912,7 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom To protect your IP address, private routing uses your SMP servers to deliver messages. + Aby chronić Twój adres IP, prywatne trasowanie używa Twoich serwerów SMP, aby dostarczyć wiadomości. No comment provided by engineer. @@ -6015,6 +6054,7 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania. Unknown servers! + Nieznane serwery! No comment provided by engineer. @@ -6166,10 +6206,12 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Use private routing with unknown servers when IP address is not protected. + Używaj prywatnego trasowania z nieznanymi serwerami, gdy adres IP nie jest chroniony. No comment provided by engineer. Use private routing with unknown servers. + Używaj prywatnego trasowania z nieznanymi serwerami. No comment provided by engineer. @@ -6409,10 +6451,12 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Without Tor or VPN, your IP address will be visible to file servers. + Bez Tor lub VPN, Twój adres IP będzie widoczny do serwerów plików. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Bez Tor lub VPN, Twój adres IP będzie widoczny dla tych przekaźników XFTP: %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Wrong key or unknown connection - most likely this connection is deleted. + Zły klucz lub nieznane połączenie - najprawdopodobniej to połączenie jest usunięte. snd error text @@ -7539,6 +7584,12 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. wyślij wiadomość bezpośrednią No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address ustaw nowy adres kontaktu @@ -7581,6 +7632,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. unknown relays + nieznane przekaźniki No comment provided by engineer. @@ -7590,6 +7642,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. unprotected + niezabezpieczony No comment provided by engineer. @@ -7659,6 +7712,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. when IP hidden + gdy IP ukryty 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 2569f49546..55c22354a9 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -715,6 +715,7 @@ Allow downgrade + Разрешить прямую доставку No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Всегда использовать конфиденциальную доставку. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Превышено количество сообщений - предыдущие сообщения не доставлены. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Подтверждать файлы с неизвестных серверов. No comment provided by engineer. @@ -1717,6 +1721,10 @@ This is your own one-time link! Данные чата будут мигрированы при перезапуске No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Децентрализованный @@ -1966,6 +1974,7 @@ This cannot be undone! Destination server error: %@ + Ошибка сервера получателя: %@ snd error text @@ -2075,6 +2084,7 @@ This cannot be undone! Do NOT send messages directly, even if your or destination server does not support private routing. + Не отправлять сообщения напрямую, даже если сервер получателя не поддерживает конфиденциальную доставку. No comment provided by engineer. @@ -2084,6 +2094,7 @@ This cannot be undone! Do NOT use private routing. + Не использовать конфиденциальную доставку. No comment provided by engineer. @@ -2743,6 +2754,7 @@ This cannot be undone! Files + Файлы No comment provided by engineer. @@ -2853,11 +2865,15 @@ This cannot be undone! Forwarding server: %1$@ Destination server error: %2$@ + Пересылающий сервер: %1$@ +Ошибка сервера получателя: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Пересылающий сервер: %1$@ +Ошибка: %2$@ snd error text @@ -3677,6 +3693,7 @@ This is your link for group %@! Message delivery warning + Предупреждение доставки сообщения item status text @@ -3684,6 +3701,10 @@ This is your link for group %@! Черновик сообщения No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Реакции на сообщения @@ -3701,10 +3722,12 @@ This is your link for group %@! Message routing fallback + Прямая доставка сообщений No comment provided by engineer. Message routing mode + Режим доставки сообщений No comment provided by engineer. @@ -3869,6 +3892,7 @@ This is your link for group %@! Network issues - message expired after many attempts to send it. + Ошибка сети - сообщение не было отправлено после многократных попыток. snd error text @@ -4414,10 +4438,12 @@ Error: %@ Private message routing + Конфиденциальная доставка сообщений No comment provided by engineer. Private message routing 🚀 + Конфиденциальная доставка сообщений 🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Error: %@ Private routing + Конфиденциальная доставка No comment provided by engineer. @@ -4511,6 +4538,7 @@ Error: %@ Protect IP address + Защитить IP адрес No comment provided by engineer. @@ -4521,6 +4549,8 @@ Error: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Защитите ваш IP адрес от серверов сообщений, выбранных Вашими контактами. +Включите в настройках *Сеть и серверы*. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Получайте файлы безопасно No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Отправлять сообщения напрямую, когда IP адрес защищен, и Ваш сервер или сервер получателя не поддерживает конфиденциальную доставку. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Отправлять сообщения напрямую, когда Ваш сервер или сервер получателя не поддерживает конфиденциальную доставку. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + Адрес сервера несовместим с настройками сети. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + Версия сервера несовместима с настройками сети. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Показать статус сообщения No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Показать → на сообщениях доставленных конфиденциально. No comment provided by engineer. @@ -5685,6 +5722,7 @@ It can happen because of some bug or when the connection is compromised. The app will ask to confirm downloads from unknown file servers (except .onion). + Приложение будет запрашивать подтверждение загрузки с неизвестных серверов (за исключением .onion адресов). No comment provided by engineer. @@ -5874,6 +5912,7 @@ It can happen because of some bug or when the connection is compromised. To protect your IP address, private routing uses your SMP servers to deliver messages. + Чтобы защитить ваш IP адрес, приложение использует Ваши SMP серверы для конфиденциальной доставки сообщений. No comment provided by engineer. @@ -6015,6 +6054,7 @@ You will be prompted to complete authentication before this feature is enabled.< Unknown servers! + Неизвестные серверы! No comment provided by engineer. @@ -6166,10 +6206,12 @@ To connect, please ask your contact to create another connection link and check Use private routing with unknown servers when IP address is not protected. + Использовать конфиденциальную доставку с неизвестными серверами, когда IP адрес не защищен. No comment provided by engineer. Use private routing with unknown servers. + Использовать конфиденциальную доставку с неизвестными серверами. No comment provided by engineer. @@ -6409,10 +6451,12 @@ To connect, please ask your contact to create another connection link and check Without Tor or VPN, your IP address will be visible to file servers. + Без Тора или ВПН, Ваш IP адрес будет доступен серверам файлов. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Без Тора или ВПН, Ваш IP адрес будет доступен этим серверам файлов: %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ To connect, please ask your contact to create another connection link and check Wrong key or unknown connection - most likely this connection is deleted. + Неверный ключ или неизвестное соединение - скорее всего, это соединение удалено. snd error text @@ -7539,6 +7584,12 @@ SimpleX серверы не могут получить доступ к Ваше отправьте сообщение No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address установлен новый адрес контакта @@ -7581,6 +7632,7 @@ SimpleX серверы не могут получить доступ к Ваше unknown relays + неизвестные серверы No comment provided by engineer. @@ -7590,6 +7642,7 @@ SimpleX серверы не могут получить доступ к Ваше unprotected + незащищённый No comment provided by engineer. @@ -7659,6 +7712,7 @@ SimpleX серверы не могут получить доступ к Ваше when IP hidden + когда IP защищен 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 69d3820c7f..4f4f41aa38 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -1629,6 +1629,10 @@ This is your own one-time link! ระบบจะย้ายฐานข้อมูลเมื่อแอปรีสตาร์ท No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized กระจายอำนาจแล้ว @@ -3514,6 +3518,10 @@ This is your link for group %@! ร่างข้อความ No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions ปฏิกิริยาของข้อความ @@ -7199,6 +7207,12 @@ SimpleX servers cannot see your profile. send direct message No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address profile update event chat item 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 0eef87534d..4a6418c596 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -445,7 +445,7 @@ 0s - 0 saniye + 0sn No comment provided by engineer. @@ -695,7 +695,7 @@ All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays. - Tüm kişileriniz, sohbetleriniz ve dosyalarınız güvenli bir şekilde şifrelenecek ve parçalar halinde yapılandırılmış XFTP rölelerine yüklenecektir. + Tüm kişileriniz, konuşmalarınız ve dosyalarınız güvenli bir şekilde şifrelenir ve yapılandırılmış XFTP yönlendiricilerine parçalar halinde yüklenir. No comment provided by engineer. @@ -715,6 +715,7 @@ Allow downgrade + Sürüm düşürmeye izin ver No comment provided by engineer. @@ -734,7 +735,7 @@ Allow sending direct messages to members. - Üyelere direkt mesaj göndermeye izin ver. + Üyelere doğrudan mesaj göndermeye izin ver. No comment provided by engineer. @@ -814,6 +815,7 @@ Always use private routing. + Her zaman gizli yönlendirme kullan. No comment provided by engineer. @@ -1098,6 +1100,7 @@ Capacity exceeded - recipient did not receive previously sent messages. + Kapasite aşıldı - alıcı önceden gönderilen mesajları almadı. snd error text @@ -1298,6 +1301,7 @@ Confirm files from unknown servers. + Bilinmeyen sunuculardan gelen dosyaları onayla. No comment provided by engineer. @@ -1717,6 +1721,10 @@ Bu senin kendi tek kullanımlık bağlantın! Uygulama yeniden başlatıldığında veritabanı taşınacaktır No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Merkezi Olmayan @@ -1966,6 +1974,7 @@ Bu geri alınamaz! Destination server error: %@ + Hedef sunucu hatası: %@ snd error text @@ -2075,6 +2084,7 @@ Bu geri alınamaz! Do NOT send messages directly, even if your or destination server does not support private routing. + Sizin veya hedef sunucunun özel yönlendirmeyi desteklememesi durumunda bile mesajları doğrudan GÖNDERMEYİN. No comment provided by engineer. @@ -2084,6 +2094,7 @@ Bu geri alınamaz! Do NOT use private routing. + Gizli yönlendirmeyi KULLANMA. No comment provided by engineer. @@ -2743,6 +2754,7 @@ Bu geri alınamaz! Files + Dosyalar No comment provided by engineer. @@ -2853,11 +2865,15 @@ Bu geri alınamaz! Forwarding server: %1$@ Destination server error: %2$@ + Yönlendirme sunucusu: %1$@ +Hedef sunucu hatası: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Yönlendirme sunucusu: %1$@ +Hata: %2$@ snd error text @@ -3677,6 +3693,7 @@ Bu senin grup için bağlantın %@! Message delivery warning + Mesaj iletimi uyarısı item status text @@ -3684,6 +3701,10 @@ Bu senin grup için bağlantın %@! Mesaj taslağı No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Mesaj tepkileri @@ -3701,10 +3722,12 @@ Bu senin grup için bağlantın %@! Message routing fallback + Mesaj yönlendirme yedeklemesi No comment provided by engineer. Message routing mode + Mesaj yönlendirme modu No comment provided by engineer. @@ -3869,6 +3892,7 @@ Bu senin grup için bağlantın %@! Network issues - message expired after many attempts to send it. + Ağ sorunları - birçok gönderme denemesinden sonra mesajın süresi doldu. snd error text @@ -4414,10 +4438,12 @@ Hata: %@ Private message routing + Gizli mesaj yönlendirme No comment provided by engineer. Private message routing 🚀 + Gizli mesaj yönlendirme 🚀 No comment provided by engineer. @@ -4427,6 +4453,7 @@ Hata: %@ Private routing + Gizli yönlendirme No comment provided by engineer. @@ -4491,7 +4518,7 @@ Hata: %@ Prohibit sending direct messages to members. - Geri dönülmez mesaj silme işlemini yasakla. + Üyelere doğrudan mesaj göndermeyi yasakla. No comment provided by engineer. @@ -4511,6 +4538,7 @@ Hata: %@ Protect IP address + IP adresini koru No comment provided by engineer. @@ -4521,6 +4549,8 @@ Hata: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + IP adresinizi kişileriniz tarafından seçilen mesajlaşma yönlendiricilerinden koruyun. +*Ağ ve sunucular* ayarlarında etkinleştirin. No comment provided by engineer. @@ -4695,12 +4725,12 @@ Enable in *Network & servers* settings. Relay server is only used if necessary. Another party can observe your IP address. - Aktarma sunucusu yalnızca gerekli olduğunda kullanılır. Başka bir taraf IP adresinizi gözlemleyebilir. + Yönlendirici sunucusu yalnızca gerekli olduğunda kullanılır. Başka bir taraf IP adresinizi gözlemleyebilir. No comment provided by engineer. Relay server protects your IP address, but it can observe the duration of the call. - Aktarıcı sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir. + Yönlendirici sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir. No comment provided by engineer. @@ -4865,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Dosyaları güvenle alın No comment provided by engineer. @@ -5094,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + IP adresi korumalı olduğunda ve sizin veya hedef sunucunun özel yönlendirmeyi desteklemediği durumlarda mesajları doğrudan gönderin. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Sizin veya hedef sunucunun özel yönlendirmeyi desteklemediği durumlarda mesajları doğrudan gönderin. No comment provided by engineer. @@ -5207,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + Sunucu adresi ağ ayarlarıyla uyumlu değil. srv error text. @@ -5226,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + Sunucu sürümü ağ ayarlarıyla uyumlu değil. srv error text @@ -5350,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Mesaj durumunu göster No comment provided by engineer. @@ -5359,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Gizli yönlendirme yoluyla gönderilen mesajlarda → işaretini göster. No comment provided by engineer. @@ -5685,6 +5722,7 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir. The app will ask to confirm downloads from unknown file servers (except .onion). + Uygulama bilinmeyen dosya sunucularından indirmeleri onaylamanızı isteyecektir (.onion hariç). No comment provided by engineer. @@ -5874,6 +5912,7 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir. To protect your IP address, private routing uses your SMP servers to deliver messages. + IP adresinizi korumak için,gizli yönlendirme mesajları iletmek için SMP sunucularınızı kullanır. No comment provided by engineer. @@ -6015,6 +6054,7 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec Unknown servers! + Bilinmeyen sunucular! No comment provided by engineer. @@ -6166,10 +6206,12 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Use private routing with unknown servers when IP address is not protected. + IP adresi korunmadığında bilinmeyen sunucularla gizli yönlendirme kullan. No comment provided by engineer. Use private routing with unknown servers. + Bilinmeyen sunucularla gizli yönlendirme kullan. No comment provided by engineer. @@ -6409,10 +6451,12 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Without Tor or VPN, your IP address will be visible to file servers. + Tor veya VPN olmadan, IP adresiniz dosya sunucularına görülebilir. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Tor veya VPN olmadan, IP adresiniz bu XFTP aktarıcıları tarafından görülebilir: %@. No comment provided by engineer. @@ -6422,6 +6466,7 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Wrong key or unknown connection - most likely this connection is deleted. + Yanlış anahtar veya bilinmeyen bağlantı - büyük olasılıkla bu bağlantı silinmiştir. snd error text @@ -7539,6 +7584,12 @@ SimpleX sunucuları profilinizi göremez. doğrudan mesaj gönder No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address yeni kişi adresi ayarla @@ -7581,6 +7632,7 @@ SimpleX sunucuları profilinizi göremez. unknown relays + bilinmeyen yönlendiriciler No comment provided by engineer. @@ -7590,6 +7642,7 @@ SimpleX sunucuları profilinizi göremez. unprotected + korumasız No comment provided by engineer. @@ -7659,6 +7712,7 @@ SimpleX sunucuları profilinizi göremez. when IP hidden + IP gizliyken 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 c5150d702d..258c42007a 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -715,6 +715,7 @@ Allow downgrade + Дозволити пониження версії No comment provided by engineer. @@ -749,6 +750,7 @@ Allow to send SimpleX links. + Дозволити надсилати посилання SimpleX. No comment provided by engineer. @@ -813,6 +815,7 @@ Always use private routing. + Завжди використовуйте приватну маршрутизацію. No comment provided by engineer. @@ -1097,10 +1100,12 @@ Capacity exceeded - recipient did not receive previously sent messages. + Перевищено ліміт - одержувач не отримав раніше надіслані повідомлення. snd error text Cellular + Стільниковий No comment provided by engineer. @@ -1296,6 +1301,7 @@ Confirm files from unknown servers. + Підтвердити файли з невідомих серверів. No comment provided by engineer. @@ -1715,6 +1721,10 @@ This is your own one-time link! База даних буде перенесена під час перезапуску програми No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized Децентралізований @@ -1964,6 +1974,7 @@ This cannot be undone! Destination server error: %@ + Помилка сервера призначення: %@ snd error text @@ -2073,6 +2084,7 @@ This cannot be undone! Do NOT send messages directly, even if your or destination server does not support private routing. + НЕ надсилайте повідомлення напряму, навіть якщо ваш сервер або сервер призначення не підтримує приватну маршрутизацію. No comment provided by engineer. @@ -2082,6 +2094,7 @@ This cannot be undone! Do NOT use private routing. + НЕ використовуйте приватну маршрутизацію. No comment provided by engineer. @@ -2116,6 +2129,7 @@ This cannot be undone! Download + Завантажити chat item action @@ -2230,6 +2244,7 @@ This cannot be undone! Enabled for + Увімкнено для No comment provided by engineer. @@ -2739,6 +2754,7 @@ This cannot be undone! Files + Файли No comment provided by engineer. @@ -2758,6 +2774,7 @@ This cannot be undone! Files and media not allowed + Файли та медіафайли заборонені No comment provided by engineer. @@ -2827,28 +2844,36 @@ This cannot be undone! Forward + Пересилання chat item action Forward and save messages + Пересилання та збереження повідомлень No comment provided by engineer. Forwarded + Переслано No comment provided by engineer. Forwarded from + Переслано з No comment provided by engineer. Forwarding server: %1$@ Destination server error: %2$@ + Сервер переадресації: %1$@ +Помилка сервера призначення: %2$@ snd error text Forwarding server: %1$@ Error: %2$@ + Сервер переадресації: %1$@ +Помилка: %2$@ snd error text @@ -2963,6 +2988,7 @@ Error: %2$@ Group members can send SimpleX links. + Учасники групи можуть надсилати посилання SimpleX. No comment provided by engineer. @@ -3207,6 +3233,7 @@ Error: %2$@ In-call sounds + Звуки вхідного дзвінка No comment provided by engineer. @@ -3666,6 +3693,7 @@ This is your link for group %@! Message delivery warning + Попередження про доставку повідомлення item status text @@ -3673,6 +3701,10 @@ This is your link for group %@! Чернетка повідомлення No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions Реакції на повідомлення @@ -3690,14 +3722,17 @@ This is your link for group %@! Message routing fallback + Запасний варіант маршрутизації повідомлень No comment provided by engineer. Message routing mode + Режим маршрутизації повідомлень No comment provided by engineer. Message source remains private. + Джерело повідомлення залишається приватним. No comment provided by engineer. @@ -3817,6 +3852,7 @@ This is your link for group %@! More reliable network connection. + Більш надійне з'єднання з мережею. No comment provided by engineer. @@ -3851,14 +3887,17 @@ This is your link for group %@! Network connection + Підключення до мережі No comment provided by engineer. Network issues - message expired after many attempts to send it. + Проблеми з мережею - термін дії повідомлення закінчився після багатьох спроб надіслати його. snd error text Network management + Керування мережею No comment provided by engineer. @@ -3973,6 +4012,7 @@ This is your link for group %@! No network connection + Немає підключення до мережі No comment provided by engineer. @@ -4191,6 +4231,7 @@ This is your link for group %@! Other + Інше No comment provided by engineer. @@ -4397,10 +4438,12 @@ Error: %@ Private message routing + Маршрутизація приватних повідомлень No comment provided by engineer. Private message routing 🚀 + Маршрутизація приватних повідомлень 🚀 No comment provided by engineer. @@ -4410,6 +4453,7 @@ Error: %@ Private routing + Приватна маршрутизація No comment provided by engineer. @@ -4424,6 +4468,7 @@ Error: %@ Profile images + Зображення профілю No comment provided by engineer. @@ -4468,6 +4513,7 @@ Error: %@ Prohibit sending SimpleX links. + Заборонити надсилання посилань SimpleX. No comment provided by engineer. @@ -4492,6 +4538,7 @@ Error: %@ Protect IP address + Захист IP-адреси No comment provided by engineer. @@ -4502,6 +4549,8 @@ Error: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. + Захистіть свою IP-адресу від ретрансляторів повідомлень, обраних вашими контактами. +Увімкніть у налаштуваннях *Мережа та сервери*. No comment provided by engineer. @@ -4626,6 +4675,7 @@ Enable in *Network & servers* settings. Recipient(s) can't see who this message is from. + Одержувач(и) не бачить, від кого це повідомлення. No comment provided by engineer. @@ -4845,6 +4895,7 @@ Enable in *Network & servers* settings. Safely receive files + Безпечне отримання файлів No comment provided by engineer. @@ -4934,6 +4985,7 @@ Enable in *Network & servers* settings. Saved + Збережено No comment provided by engineer. @@ -4943,6 +4995,7 @@ Enable in *Network & servers* settings. Saved from + Збережено з No comment provided by engineer. @@ -5072,10 +5125,12 @@ Enable in *Network & servers* settings. Send messages directly when IP address is protected and your or destination server does not support private routing. + Надсилайте повідомлення напряму, якщо IP-адреса захищена, а ваш сервер або сервер призначення не підтримує приватну маршрутизацію. No comment provided by engineer. Send messages directly when your or destination server does not support private routing. + Надсилайте повідомлення напряму, якщо ваш сервер або сервер призначення не підтримує приватну маршрутизацію. No comment provided by engineer. @@ -5185,6 +5240,7 @@ Enable in *Network & servers* settings. Server address is incompatible with network settings. + Адреса сервера несумісна з налаштуваннями мережі. srv error text. @@ -5204,6 +5260,7 @@ Enable in *Network & servers* settings. Server version is incompatible with network settings. + Серверна версія несумісна з мережевими налаштуваннями. srv error text @@ -5268,6 +5325,7 @@ Enable in *Network & servers* settings. Shape profile images + Сформуйте зображення профілю No comment provided by engineer. @@ -5327,6 +5385,7 @@ Enable in *Network & servers* settings. Show message status + Показати статус повідомлення No comment provided by engineer. @@ -5336,6 +5395,7 @@ Enable in *Network & servers* settings. Show → on messages sent via private routing. + Показувати → у повідомленнях, надісланих через приватну маршрутизацію. No comment provided by engineer. @@ -5400,10 +5460,12 @@ Enable in *Network & servers* settings. SimpleX links are prohibited in this group. + У цій групі заборонені посилання на SimpleX. No comment provided by engineer. SimpleX links not allowed + Посилання SimpleX заборонені No comment provided by engineer. @@ -5443,6 +5505,7 @@ Enable in *Network & servers* settings. Square, circle, or anything in between. + Квадрат, коло або щось середнє між ними. No comment provided by engineer. @@ -5659,6 +5722,7 @@ It can happen because of some bug or when the connection is compromised. The app will ask to confirm downloads from unknown file servers (except .onion). + Програма попросить підтвердити завантаження з невідомих файлових серверів (крім .onion). No comment provided by engineer. @@ -5848,6 +5912,7 @@ It can happen because of some bug or when the connection is compromised. To protect your IP address, private routing uses your SMP servers to deliver messages. + Щоб захистити вашу IP-адресу, приватна маршрутизація використовує ваші SMP-сервери для доставки повідомлень. No comment provided by engineer. @@ -5989,6 +6054,7 @@ You will be prompted to complete authentication before this feature is enabled.< Unknown servers! + Невідомі сервери! No comment provided by engineer. @@ -6140,10 +6206,12 @@ To connect, please ask your contact to create another connection link and check Use private routing with unknown servers when IP address is not protected. + Використовуйте приватну маршрутизацію з невідомими серверами, якщо IP-адреса не захищена. No comment provided by engineer. Use private routing with unknown servers. + Використовуйте приватну маршрутизацію з невідомими серверами. No comment provided by engineer. @@ -6263,6 +6331,7 @@ To connect, please ask your contact to create another connection link and check Voice messages not allowed + Голосові повідомлення заборонені No comment provided by engineer. @@ -6337,6 +6406,7 @@ To connect, please ask your contact to create another connection link and check When connecting audio and video calls. + При підключенні аудіо та відеодзвінків. No comment provided by engineer. @@ -6351,14 +6421,17 @@ To connect, please ask your contact to create another connection link and check WiFi + WiFi No comment provided by engineer. Will be enabled in direct chats! + Буде ввімкнено в прямих чатах! No comment provided by engineer. Wired ethernet + Дротова мережа Ethernet No comment provided by engineer. @@ -6378,10 +6451,12 @@ To connect, please ask your contact to create another connection link and check Without Tor or VPN, your IP address will be visible to file servers. + Без Tor або VPN ваша IP-адреса буде видимою для файлових серверів. No comment provided by engineer. Without Tor or VPN, your IP address will be visible to these XFTP relays: %@. + Без Tor або VPN ваша IP-адреса буде видимою для цих XFTP-ретрансляторів: %@. No comment provided by engineer. @@ -6391,6 +6466,7 @@ To connect, please ask your contact to create another connection link and check Wrong key or unknown connection - most likely this connection is deleted. + Неправильний ключ або невідоме з'єднання - швидше за все, це з'єднання видалено. snd error text @@ -6858,6 +6934,7 @@ SimpleX servers cannot see your profile. admins + адміністратори feature role @@ -6872,6 +6949,7 @@ SimpleX servers cannot see your profile. all members + всі учасники feature role @@ -7206,6 +7284,7 @@ SimpleX servers cannot see your profile. forwarded + переслано No comment provided by engineer. @@ -7417,6 +7496,7 @@ SimpleX servers cannot see your profile. owners + власники feature role @@ -7471,10 +7551,12 @@ SimpleX servers cannot see your profile. saved + збережено No comment provided by engineer. saved from %@ + збережено з %@ No comment provided by engineer. @@ -7502,6 +7584,12 @@ SimpleX servers cannot see your profile. надіслати пряме повідомлення No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address встановити нову контактну адресу @@ -7544,6 +7632,7 @@ SimpleX servers cannot see your profile. unknown relays + невідомі реле No comment provided by engineer. @@ -7553,6 +7642,7 @@ SimpleX servers cannot see your profile. unprotected + незахищені No comment provided by engineer. @@ -7622,6 +7712,7 @@ SimpleX servers cannot see your profile. when IP hidden + коли IP приховано No comment provided by engineer. @@ -7631,6 +7722,7 @@ SimpleX servers cannot see your profile. you + ти 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 5303064f1c..9808c6fbcd 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 @@ -1695,6 +1695,10 @@ This is your own one-time link! 应用程序重新启动时将迁移数据库 No comment provided by engineer. + + Debug delivery + No comment provided by engineer. + Decentralized 分散式 @@ -3646,6 +3650,10 @@ This is your link for group %@! 消息草稿 No comment provided by engineer. + + Message queue info + No comment provided by engineer. + Message reactions 消息回应 @@ -7471,6 +7479,12 @@ SimpleX 服务器无法看到您的资料。 发送私信 No comment provided by engineer. + + server queue info: %1$@ + +last received msg: %2$@ + queue info + set new contact address 设置新的联系地址 diff --git a/apps/ios/SimpleX NSE/de.lproj/InfoPlist.strings b/apps/ios/SimpleX NSE/de.lproj/InfoPlist.strings index 9c675514f4..6cc768efe1 100644 --- a/apps/ios/SimpleX NSE/de.lproj/InfoPlist.strings +++ b/apps/ios/SimpleX NSE/de.lproj/InfoPlist.strings @@ -5,5 +5,5 @@ "CFBundleName" = "SimpleX NSE"; /* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. All rights reserved."; +"NSHumanReadableCopyright" = "Copyright © 2024 SimpleX Chat. All rights reserved."; diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 93e61f3b21..ed889b5218 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -24,6 +24,11 @@ 5C029EAA283942EA004A9677 /* CallController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C029EA9283942EA004A9677 /* CallController.swift */; }; 5C05DF532840AA1D00C683F9 /* CallSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C05DF522840AA1D00C683F9 /* CallSettings.swift */; }; 5C063D2727A4564100AEC577 /* ChatPreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C063D2627A4564100AEC577 /* ChatPreviewView.swift */; }; + 5C0EA13B2C0B176B00AD2E5E /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C0EA1362C0B176B00AD2E5E /* libgmp.a */; }; + 5C0EA13C2C0B176B00AD2E5E /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C0EA1372C0B176B00AD2E5E /* libgmpxx.a */; }; + 5C0EA13D2C0B176B00AD2E5E /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C0EA1382C0B176B00AD2E5E /* libffi.a */; }; + 5C0EA13E2C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C0EA1392C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc-ghc9.6.3.a */; }; + 5C0EA13F2C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C0EA13A2C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc.a */; }; 5C10D88828EED12E00E58BF0 /* ContactConnectionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C10D88728EED12E00E58BF0 /* ContactConnectionInfo.swift */; }; 5C10D88A28F187F300E58BF0 /* FullScreenMediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C10D88928F187F300E58BF0 /* FullScreenMediaView.swift */; }; 5C116CDC27AABE0400E66D01 /* ContactRequestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C116CDB27AABE0400E66D01 /* ContactRequestView.swift */; }; @@ -139,11 +144,6 @@ 5CEACCED27DEA495000BD591 /* MsgContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEACCEC27DEA495000BD591 /* MsgContentView.swift */; }; 5CEBD7462A5C0A8F00665FE2 /* KeyboardPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEBD7452A5C0A8F00665FE2 /* KeyboardPadding.swift */; }; 5CEBD7482A5F115D00665FE2 /* SetDeliveryReceiptsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CEBD7472A5F115D00665FE2 /* SetDeliveryReceiptsView.swift */; }; - 5CEE879E2C076B8400583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CEE87992C076B8300583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7.a */; }; - 5CEE879F2C076B8400583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CEE879A2C076B8300583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7-ghc9.6.3.a */; }; - 5CEE87A02C076B8400583B8A /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CEE879B2C076B8400583B8A /* libffi.a */; }; - 5CEE87A12C076B8400583B8A /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CEE879C2C076B8400583B8A /* libgmp.a */; }; - 5CEE87A22C076B8400583B8A /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CEE879D2C076B8400583B8A /* libgmpxx.a */; }; 5CF937202B24DE8C00E1D781 /* SharedFileSubscriber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF9371F2B24DE8C00E1D781 /* SharedFileSubscriber.swift */; }; 5CF937232B2503D000E1D781 /* NSESubscriber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF937212B25034A00E1D781 /* NSESubscriber.swift */; }; 5CFA59C42860BC6200863A68 /* MigrateToAppGroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFA59C32860BC6200863A68 /* MigrateToAppGroupView.swift */; }; @@ -273,6 +273,11 @@ 5C029EA9283942EA004A9677 /* CallController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallController.swift; sourceTree = ""; }; 5C05DF522840AA1D00C683F9 /* CallSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallSettings.swift; sourceTree = ""; }; 5C063D2627A4564100AEC577 /* ChatPreviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatPreviewView.swift; sourceTree = ""; }; + 5C0EA1362C0B176B00AD2E5E /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5C0EA1372C0B176B00AD2E5E /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5C0EA1382C0B176B00AD2E5E /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 5C0EA1392C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc-ghc9.6.3.a"; sourceTree = ""; }; + 5C0EA13A2C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc.a"; sourceTree = ""; }; 5C10D88728EED12E00E58BF0 /* ContactConnectionInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactConnectionInfo.swift; sourceTree = ""; }; 5C10D88928F187F300E58BF0 /* FullScreenMediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullScreenMediaView.swift; sourceTree = ""; }; 5C116CDB27AABE0400E66D01 /* ContactRequestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactRequestView.swift; sourceTree = ""; }; @@ -435,11 +440,6 @@ 5CEACCEC27DEA495000BD591 /* MsgContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MsgContentView.swift; sourceTree = ""; }; 5CEBD7452A5C0A8F00665FE2 /* KeyboardPadding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardPadding.swift; sourceTree = ""; }; 5CEBD7472A5F115D00665FE2 /* SetDeliveryReceiptsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetDeliveryReceiptsView.swift; sourceTree = ""; }; - 5CEE87992C076B8300583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7.a"; sourceTree = ""; }; - 5CEE879A2C076B8300583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7-ghc9.6.3.a"; sourceTree = ""; }; - 5CEE879B2C076B8400583B8A /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 5CEE879C2C076B8400583B8A /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5CEE879D2C076B8400583B8A /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; 5CF9371F2B24DE8C00E1D781 /* SharedFileSubscriber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedFileSubscriber.swift; sourceTree = ""; }; 5CF937212B25034A00E1D781 /* NSESubscriber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSESubscriber.swift; sourceTree = ""; }; 5CFA59C32860BC6200863A68 /* MigrateToAppGroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrateToAppGroupView.swift; sourceTree = ""; }; @@ -529,13 +529,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5CEE879E2C076B8400583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7.a in Frameworks */, + 5C0EA13C2C0B176B00AD2E5E /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, - 5CEE879F2C076B8400583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7-ghc9.6.3.a in Frameworks */, - 5CEE87A02C076B8400583B8A /* libffi.a in Frameworks */, - 5CEE87A12C076B8400583B8A /* libgmp.a in Frameworks */, + 5C0EA13B2C0B176B00AD2E5E /* libgmp.a in Frameworks */, + 5C0EA13D2C0B176B00AD2E5E /* libffi.a in Frameworks */, + 5C0EA13F2C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, - 5CEE87A22C076B8400583B8A /* libgmpxx.a in Frameworks */, + 5C0EA13E2C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc-ghc9.6.3.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -601,11 +601,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5CEE879B2C076B8400583B8A /* libffi.a */, - 5CEE879C2C076B8400583B8A /* libgmp.a */, - 5CEE879D2C076B8400583B8A /* libgmpxx.a */, - 5CEE879A2C076B8300583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7-ghc9.6.3.a */, - 5CEE87992C076B8300583B8A /* libHSsimplex-chat-5.8.0.4-LLYprD9nQTR9mmjl4EdHW7.a */, + 5C0EA1382C0B176B00AD2E5E /* libffi.a */, + 5C0EA1362C0B176B00AD2E5E /* libgmp.a */, + 5C0EA1372C0B176B00AD2E5E /* libgmpxx.a */, + 5C0EA1392C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc-ghc9.6.3.a */, + 5C0EA13A2C0B176B00AD2E5E /* libHSsimplex-chat-5.8.0.5-Idqi6HXqzzs2zrnyZtMyhc.a */, ); path = Libraries; sourceTree = ""; @@ -1552,7 +1552,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 221; + CURRENT_PROJECT_VERSION = 223; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1601,7 +1601,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 221; + CURRENT_PROJECT_VERSION = 223; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -1687,7 +1687,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 221; + CURRENT_PROJECT_VERSION = 223; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -1724,7 +1724,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 221; + CURRENT_PROJECT_VERSION = 223; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -1761,7 +1761,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 221; + CURRENT_PROJECT_VERSION = 223; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -1812,7 +1812,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 221; + CURRENT_PROJECT_VERSION = 223; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 12683bc3a4..1574d43ac0 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -82,6 +82,8 @@ public enum ChatCommand { case apiSetMemberSettings(groupId: Int64, groupMemberId: Int64, memberSettings: GroupMemberSettings) case apiContactInfo(contactId: Int64) case apiGroupMemberInfo(groupId: Int64, groupMemberId: Int64) + case apiContactQueueInfo(contactId: Int64) + case apiGroupMemberQueueInfo(groupId: Int64, groupMemberId: Int64) case apiSwitchContact(contactId: Int64) case apiSwitchGroupMember(groupId: Int64, groupMemberId: Int64) case apiAbortSwitchContact(contactId: Int64) @@ -228,6 +230,8 @@ public enum ChatCommand { case let .apiSetMemberSettings(groupId, groupMemberId, memberSettings): return "/_member settings #\(groupId) \(groupMemberId) \(encodeJSON(memberSettings))" case let .apiContactInfo(contactId): return "/_info @\(contactId)" case let .apiGroupMemberInfo(groupId, groupMemberId): return "/_info #\(groupId) \(groupMemberId)" + case let .apiContactQueueInfo(contactId): return "/_queue info @\(contactId)" + case let .apiGroupMemberQueueInfo(groupId, groupMemberId): return "/_queue info #\(groupId) \(groupMemberId)" case let .apiSwitchContact(contactId): return "/_switch @\(contactId)" case let .apiSwitchGroupMember(groupId, groupMemberId): return "/_switch #\(groupId) \(groupMemberId)" case let .apiAbortSwitchContact(contactId): return "/_abort switch @\(contactId)" @@ -375,6 +379,8 @@ public enum ChatCommand { case .apiSetMemberSettings: return "apiSetMemberSettings" case .apiContactInfo: return "apiContactInfo" case .apiGroupMemberInfo: return "apiGroupMemberInfo" + case .apiContactQueueInfo: return "apiContactQueueInfo" + case .apiGroupMemberQueueInfo: return "apiGroupMemberQueueInfo" case .apiSwitchContact: return "apiSwitchContact" case .apiSwitchGroupMember: return "apiSwitchGroupMember" case .apiAbortSwitchContact: return "apiAbortSwitchContact" @@ -516,6 +522,7 @@ public enum ChatResponse: Decodable, Error { case networkConfig(networkConfig: NetCfg) case contactInfo(user: UserRef, contact: Contact, connectionStats_: ConnectionStats?, customUserProfile: Profile?) case groupMemberInfo(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats_: ConnectionStats?) + case queueInfo(user: UserRef, rcvMsgInfo: RcvMsgInfo?, queueInfo: QueueInfo) case contactSwitchStarted(user: UserRef, contact: Contact, connectionStats: ConnectionStats) case groupMemberSwitchStarted(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats) case contactSwitchAborted(user: UserRef, contact: Contact, connectionStats: ConnectionStats) @@ -628,7 +635,7 @@ public enum ChatResponse: Decodable, Error { case sndFileCompleteXFTP(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta) case sndStandaloneFileComplete(user: UserRef, fileTransferMeta: FileTransferMeta, rcvURIs: [String]) case sndFileCancelledXFTP(user: UserRef, chatItem_: AChatItem?, fileTransferMeta: FileTransferMeta) - case sndFileError(user: UserRef, chatItem_: AChatItem?, fileTransferMeta: FileTransferMeta) + case sndFileError(user: UserRef, chatItem_: AChatItem?, fileTransferMeta: FileTransferMeta, errorMessage: String) // call events case callInvitation(callInvitation: RcvCallInvitation) case callOffer(user: UserRef, contact: Contact, callType: CallType, offer: WebRTCSession, sharedKey: String?, askConfirmation: Bool) @@ -678,6 +685,7 @@ public enum ChatResponse: Decodable, Error { case .networkConfig: return "networkConfig" case .contactInfo: return "contactInfo" case .groupMemberInfo: return "groupMemberInfo" + case .queueInfo: return "queueInfo" case .contactSwitchStarted: return "contactSwitchStarted" case .groupMemberSwitchStarted: return "groupMemberSwitchStarted" case .contactSwitchAborted: return "contactSwitchAborted" @@ -836,6 +844,9 @@ public enum ChatResponse: Decodable, Error { case let .networkConfig(networkConfig): return String(describing: networkConfig) case let .contactInfo(u, contact, connectionStats_, customUserProfile): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats_: \(String(describing: connectionStats_))\ncustomUserProfile: \(String(describing: customUserProfile))") case let .groupMemberInfo(u, groupInfo, member, connectionStats_): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats_: \(String(describing: connectionStats_))") + case let .queueInfo(u, rcvMsgInfo, queueInfo): + let msgInfo = if let info = rcvMsgInfo { encodeJSON(rcvMsgInfo) } else { "none" } + return withUser(u, "rcvMsgInfo: \(msgInfo)\nqueueInfo: \(encodeJSON(queueInfo))") case let .contactSwitchStarted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))") case let .groupMemberSwitchStarted(u, groupInfo, member, connectionStats): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats: \(String(describing: connectionStats))") case let .contactSwitchAborted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))") @@ -945,7 +956,7 @@ public enum ChatResponse: Decodable, Error { case let .sndFileCompleteXFTP(u, chatItem, _): return withUser(u, String(describing: chatItem)) case let .sndStandaloneFileComplete(u, _, rcvURIs): return withUser(u, String(rcvURIs.count)) case let .sndFileCancelledXFTP(u, chatItem, _): return withUser(u, String(describing: chatItem)) - case let .sndFileError(u, chatItem, _): return withUser(u, String(describing: chatItem)) + case let .sndFileError(u, chatItem, _, err): return withUser(u, "error: \(String(describing: err))\nchatItem: \(String(describing: chatItem))") case let .callInvitation(inv): return String(describing: inv) case let .callOffer(u, contact, callType, offer, sharedKey, askConfirmation): return withUser(u, "contact: \(contact.id)\ncallType: \(String(describing: callType))\nsharedKey: \(sharedKey ?? "")\naskConfirmation: \(askConfirmation)\noffer: \(String(describing: offer))") case let .callAnswer(u, contact, answer): return withUser(u, "contact: \(contact.id)\nanswer: \(String(describing: answer))") @@ -2170,3 +2181,42 @@ public enum UserNetworkType: String, Codable { } } } + +public struct RcvMsgInfo: Codable { + var msgId: Int64 + var msgDeliveryId: Int64 + var msgDeliveryStatus: String + var agentMsgId: Int64 + var agentMsgMeta: String +} + +public struct QueueInfo: Codable { + var qiSnd: Bool + var qiNtf: Bool + var qiSub: QSub? + var qiSize: Int + var qiMsg: MsgInfo? +} + +public struct QSub: Codable { + var qSubThread: QSubThread + var qDelivered: String? +} + +public enum QSubThread: String, Codable { + case noSub + case subPending + case subThread + case prohibitSub +} + +public struct MsgInfo: Codable { + var msgId: String + var msgTs: Date + var msgType: MsgType +} + +public enum MsgType: String, Codable { + case message + case quota +} diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index e6d98cc96a..01a760721f 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Erlauben Sie verschwindende Nachrichten nur dann, wenn es Ihr Kontakt ebenfalls erlaubt."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Herabstufung erlauben"; + /* No comment provided by engineer. */ "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)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "Immer"; +/* No comment provided by engineer. */ +"Always use private routing." = "Sie nutzen immer privates Routing."; + /* No comment provided by engineer. */ "Always use relay" = "Über ein Relais verbinden"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Datei kann nicht empfangen werden"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Kapazität überschritten - der Empfänger hat die zuvor gesendeten Nachrichten nicht empfangen."; + /* No comment provided by engineer. */ "Cellular" = "Zellulär"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Datenbank-Aktualisierungen bestätigen"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Dateien von unbekannten Servern bestätigen."; + /* No comment provided by engineer. */ "Confirm network settings" = "Bestätigen Sie die Netzwerkeinstellungen"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Desktop-Geräte"; +/* snd error text */ +"Destination server error: %@" = "Zielserver-Fehler: %@"; + /* No comment provided by engineer. */ "Develop" = "Entwicklung"; @@ -1399,7 +1414,13 @@ "Do not send history to new members." = "Den Nachrichtenverlauf nicht an neue Mitglieder senden."; /* No comment provided by engineer. */ -"Do NOT use SimpleX for emergency calls." = "Nutzen Sie SimpleX nicht für Notrufe."; +"Do NOT send messages directly, even if your or destination server does not support private routing." = "Nachrichten werden nicht direkt versendet, selbst wenn Ihr oder der Zielserver kein privates Routing unterstützt."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "Sie nutzen KEIN privates Routing."; + +/* No comment provided by engineer. */ +"Do NOT use SimpleX for emergency calls." = "SimpleX NICHT für Notrufe nutzen."; /* No comment provided by engineer. */ "Don't create address" = "Keine Adresse erstellt"; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Datei: %@"; +/* No comment provided by engineer. */ +"Files" = "Dateien"; + /* No comment provided by engineer. */ "Files & media" = "Dateien & Medien"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Weitergeleitet aus"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Weiterleitungsserver: %1$@\nZielserver Fehler: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Weiterleitungsserver: %1$@\nFehler: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Gefundener Desktop"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Empfangsbestätigungen für Nachrichten!"; +/* item status text */ +"Message delivery warning" = "Warnung bei der Nachrichtenzustellung"; + /* No comment provided by engineer. */ "Message draft" = "Nachrichtenentwurf"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "Nachricht empfangen"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Fallback für das Nachrichten-Routing"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Modus für das Nachrichten-Routing"; + /* No comment provided by engineer. */ "Message source remains private." = "Die Nachrichtenquelle bleibt privat."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Netzwerkverbindung"; +/* 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"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Neutrale Dateinamen"; +/* No comment provided by engineer. */ +"Private message routing" = "Privates Nachrichten-Routing"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Privates Nachrichten-Routing 🚀"; + /* name of notes to self */ "Private notes" = "Private Notizen"; +/* No comment provided by engineer. */ +"Private routing" = "Privates Routing"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profil und Serververbindungen"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "App-Bildschirm schützen"; +/* No comment provided by engineer. */ +"Protect IP address" = "IP-Adresse schützen"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Ihre Chat-Profile mit einem Passwort schützen!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Schützen Sie Ihre IP-Adresse vor den Nachrichten-Relais , die Ihre Kontakte ausgewählt haben.\nAktivieren Sie es in den *Netzwerk & Server* Einstellungen."; + /* No comment provided by engineer. */ "Protocol timeout" = "Protokollzeitüberschreitung"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Chat starten"; +/* No comment provided by engineer. */ +"Safely receive files" = "Dateien sicher empfangen"; + /* No comment provided by engineer. */ "Safer groups" = "Sicherere Gruppen"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Live Nachricht senden"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Nachrichten werden direkt versendet, wenn die IP-Adresse geschützt ist, und Ihr oder der Zielserver kein privates Routing unterstützt."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Nachrichten werden direkt versendet, wenn Ihr oder der Zielserver kein privates Routing unterstützt."; + /* No comment provided by engineer. */ "Send notifications" = "Benachrichtigungen senden"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Gesendete Nachrichten werden nach der eingestellten Zeit gelöscht."; +/* srv error text. */ +"Server address is incompatible with network settings." = "Die Server-Adresse ist nicht mit den Netzwerk-Einstellungen kompatibel."; + /* server test error */ "Server requires authorization to create queues, check password" = "Um Warteschlangen zu erzeugen benötigt der Server eine Authentifizierung. Bitte überprüfen Sie das Passwort"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Server Test ist fehlgeschlagen!"; +/* srv error text */ +"Server version is incompatible with network settings." = "Die Server-Version ist nicht mit den Netzwerk-Einstellungen kompatibel."; + /* No comment provided by engineer. */ "Servers" = "Server"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Mit Kontakten teilen"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Bei Nachrichten, die über privates Routing versendet wurden, → anzeigen."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Anrufliste anzeigen"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Letzte Nachrichten anzeigen"; +/* No comment provided by engineer. */ +"Show message status" = "Nachrichtenstatus anzeigen"; + /* No comment provided by engineer. */ "Show preview" = "Vorschau anzeigen"; @@ -3740,6 +3818,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 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)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Die Änderung des Datenbank-Passworts konnte nicht abgeschlossen werden."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Um Ihre Informationen zu schützen, schalten Sie die SimpleX-Sperre ein.\nSie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funktion aktiviert wird."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Zum Schutz Ihrer IP-Adresse, wird für die Nachrichten-Auslieferung privates Routing über Ihre konfigurierten SMP-Server genutzt."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Bitte erlauben Sie die Nutzung des Mikrofons, um Sprachnachrichten aufnehmen zu können."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Unbekannter Fehler"; +/* No comment provided by engineer. */ +"unknown relays" = "Unbekannte Relais"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Unbekannte Server!"; + /* No comment provided by engineer. */ "unknown status" = "unbekannter Gruppenmitglieds-Status"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Stummschaltung aufheben"; +/* No comment provided by engineer. */ +"unprotected" = "Ungeschützt"; + /* No comment provided by engineer. */ "Unread" = "Ungelesen"; @@ -4020,7 +4113,7 @@ "Use chat" = "Verwenden Sie Chat"; /* No comment provided by engineer. */ -"Use current profile" = "Das aktuelle Profil nutzen"; +"Use current profile" = "Aktuelles Profil nutzen"; /* No comment provided by engineer. */ "Use for new connections" = "Für neue Verbindungen nutzen"; @@ -4032,11 +4125,17 @@ "Use iOS call interface" = "iOS Anrufschnittstelle nutzen"; /* No comment provided by engineer. */ -"Use new incognito profile" = "Ein neues Inkognito-Profil nutzen"; +"Use new incognito profile" = "Neues Inkognito-Profil nutzen"; /* No comment provided by engineer. */ "Use only local notifications?" = "Nur lokale Benachrichtigungen nutzen?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Sie nutzen privates Routing mit unbekannten Servern, wenn Ihre IP-Adresse nicht geschützt ist."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Sie nutzen privates Routing mit unbekannten Servern."; + /* No comment provided by engineer. */ "Use server" = "Server nutzen"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Bei der Verbindung über Audio- und Video-Anrufe."; +/* No comment provided by engineer. */ +"when IP hidden" = "Wenn die IP-Adresse versteckt ist"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Wenn Personen eine Verbindung anfordern, können Sie diese annehmen oder ablehnen."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Mit reduziertem Akkuverbrauch."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für Datei-Server sichtbar sein."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für diese XFTP-Relais sichtbar sein: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Falsches Datenbank-Passwort"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Falscher Schlüssel oder unbekannte Verbindung - höchstwahrscheinlich ist diese Verbindung gelöscht worden."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Falsches Passwort!"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 42002cd282..01924b1903 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Se permiten los mensajes temporales pero sólo si tu contacto también los permite para tí."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Permitir versión anterior"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Se permite la eliminación irreversible de mensajes pero sólo si tu contacto también la permite para tí. (24 horas)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "siempre"; +/* No comment provided by engineer. */ +"Always use private routing." = "Usar siempre enrutamiento privado."; + /* No comment provided by engineer. */ "Always use relay" = "Usar siempre retransmisor"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "No se puede recibir el archivo"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Capacidad excedida - el destinatario no ha recibido los mensajes previos."; + /* No comment provided by engineer. */ "Cellular" = "Móvil"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Confirmar actualizaciones de la bases de datos"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Confirma archivos de servidores desconocidos."; + /* No comment provided by engineer. */ "Confirm network settings" = "Confirmar configuración de red"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Ordenadores"; +/* snd error text */ +"Destination server error: %@" = "Error del servidor de destino: %@"; + /* No comment provided by engineer. */ "Develop" = "Desarrollo"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "No enviar historial a miembros nuevos."; +/* No comment provided by engineer. */ +"Do NOT send messages directly, even if your or destination server does not support private routing." = "NO enviar mensajes directamente incluso si tu servidor o el de destino no soportan enrutamiento privado."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "NO usar enrutamiento privado."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NO uses SimpleX para llamadas de emergencia."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Archivo: %@"; +/* No comment provided by engineer. */ +"Files" = "Archivos"; + /* No comment provided by engineer. */ "Files & media" = "Archivos y multimedia"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Reenviado por"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Servidor de reenvío: %1$@\nError del servidor de destino: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Servidor de reenvío: %1$@\nError: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Ordenador encontrado"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "¡Confirmación de entrega de mensajes!"; +/* item status text */ +"Message delivery warning" = "Aviso de entrega de mensaje"; + /* No comment provided by engineer. */ "Message draft" = "Borrador de mensaje"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "mensaje recibido"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Enrutamiento de mensajes alternativo"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Modo de enrutamiento de mensajes"; + /* No comment provided by engineer. */ "Message source remains private." = "El autor del mensaje se mantiene privado."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Conexión de 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"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Nombres de archivos privados"; +/* No comment provided by engineer. */ +"Private message routing" = "Enrutamiento privado de mensajes"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Enrutamiento privado de mensajes 🚀"; + /* name of notes to self */ "Private notes" = "Notas privadas"; +/* No comment provided by engineer. */ +"Private routing" = "Enrutamiento privado"; + /* No comment provided by engineer. */ "Profile and server connections" = "Datos del perfil y conexiones"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "Proteger la pantalla de la aplicación"; +/* No comment provided by engineer. */ +"Protect IP address" = "Proteger dirección IP"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "¡Protege tus perfiles con contraseña!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Protege tu dirección IP de los servidores de retransmisión elegidos por tus contactos.\nActívalo en ajustes de *Servidores y Redes*."; + /* No comment provided by engineer. */ "Protocol timeout" = "Tiempo de espera del protocolo"; @@ -3117,7 +3174,7 @@ "rejected call" = "llamada rechazada"; /* No comment provided by engineer. */ -"Relay server is only used if necessary. Another party can observe your IP address." = "El retransmisor sólo se usa en caso de necesidad. Un tercero podría ver tu IP."; +"Relay server is only used if necessary. Another party can observe your IP address." = "El servidor de retransmisión sólo se usa en caso de necesidad. Un tercero podría ver tu IP."; /* No comment provided by engineer. */ "Relay server protects your IP address, but it can observe the duration of the call." = "El servidor de retransmisión protege tu IP pero puede ver la duración de la llamada."; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Ejecutar chat"; +/* No comment provided by engineer. */ +"Safely receive files" = "Recibe archivos de forma segura"; + /* No comment provided by engineer. */ "Safer groups" = "Grupos más seguros"; @@ -3375,7 +3435,7 @@ "Send direct message" = "Enviar mensaje directo"; /* No comment provided by engineer. */ -"Send direct message to connect" = "Enviar mensaje directo para conectar"; +"Send direct message to connect" = "Envia un mensaje para conectar"; /* No comment provided by engineer. */ "Send disappearing message" = "Enviar mensaje temporal"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Mensaje en vivo"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Enviar mensajes directamente cuando tu dirección IP está protegida y tu servidor o el de destino no admitan enrutamiento privado."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Enviar mensajes directamente cuando tu servidor o el de destino no admitan enrutamiento privado."; + /* No comment provided by engineer. */ "Send notifications" = "Enviar notificaciones"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido."; +/* srv error text. */ +"Server address is incompatible with network settings." = "La dirección del servidor es incompatible con la configuración de la red."; + /* server test error */ "Server requires authorization to create queues, check password" = "El servidor requiere autorización para crear colas, comprueba la contraseña"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "¡Error en prueba del servidor!"; +/* srv error text */ +"Server version is incompatible with network settings." = "La versión del servidor es incompatible con la configuración de red."; + /* No comment provided by engineer. */ "Servers" = "Servidores"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Compartir con contactos"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Mostrar → en mensajes con enrutamiento privado."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Mostrar llamadas en el historial del teléfono"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Mostrar último mensaje"; +/* No comment provided by engineer. */ +"Show message status" = "Estado del mensaje"; + /* No comment provided by engineer. */ "Show preview" = "Mostrar vista previa"; @@ -3740,6 +3818,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 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 .onion)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "El intento de cambiar la contraseña de la base de datos no se ha completado."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Para proteger tu información, activa el Bloqueo SimpleX.\nSe te pedirá que completes la autenticación antes de activar esta función."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Para proteger tu dirección IP, el enrutamiento privado usa tus servidores SMP para enviar mensajes."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Para grabar el mensaje de voz concede permiso para usar el micrófono."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Error desconocido"; +/* No comment provided by engineer. */ +"unknown relays" = "servidor de retransmisión desconocido"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "¡Servidores desconocidos!"; + /* No comment provided by engineer. */ "unknown status" = "estado desconocido"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Activar audio"; +/* No comment provided by engineer. */ +"unprotected" = "desprotegido"; + /* No comment provided by engineer. */ "Unread" = "No leído"; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "¿Usar sólo notificaciones locales?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Usar enrutamiento privado con servidores desconocidos cuando la dirección IP no está protegida."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Usar enrutamiento privado con servidores desconocidos."; + /* No comment provided by engineer. */ "Use server" = "Usar servidor"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Al iniciar llamadas de audio y vídeo."; +/* No comment provided by engineer. */ +"when IP hidden" = "con IP oculta"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Cuando alguien solicite conectarse podrás aceptar o rechazar la solicitud."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Con uso reducido de batería."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Sin Tor o VPN, tu dirección IP será visible para los servidores de archivos."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Sin Tor o VPN, tu dirección IP será visible para estos servidores XFTP: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Contraseña de base de datos incorrecta"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Clave incorrecta o conexión desconocida - probablemente esta conexión fue eliminada."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "¡Contraseña incorrecta!"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index ba34d03a78..91b8d7c866 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Autorise les messages éphémères seulement si votre contact vous l’autorise."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Autoriser la rétrogradation"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Autoriser la suppression irréversible des messages uniquement si votre contact vous l'autorise. (24 heures)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "toujours"; +/* No comment provided by engineer. */ +"Always use private routing." = "Toujours utiliser le routage privé."; + /* No comment provided by engineer. */ "Always use relay" = "Se connecter via relais"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Impossible de recevoir le fichier"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Capacité dépassée - le destinataire n'a pas pu recevoir les messages envoyés précédemment."; + /* No comment provided by engineer. */ "Cellular" = "Cellulaire"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Confirmer la mise à niveau de la base de données"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Confirmer les fichiers provenant de serveurs inconnus."; + /* No comment provided by engineer. */ "Confirm network settings" = "Confirmer les paramètres réseau"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Appareils de bureau"; +/* snd error text */ +"Destination server error: %@" = "Erreur du serveur de destination : %@"; + /* No comment provided by engineer. */ "Develop" = "Développer"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Ne pas envoyer d'historique aux nouveaux membres."; +/* No comment provided by engineer. */ +"Do NOT send messages directly, even if your or destination server does not support private routing." = "Ne pas envoyer de messages directement, même si votre serveur ou le serveur de destination ne prend pas en charge le routage privé."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "Ne pas utiliser de routage privé."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "N'utilisez PAS SimpleX pour les appels d'urgence."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Fichier : %@"; +/* No comment provided by engineer. */ +"Files" = "Fichiers"; + /* No comment provided by engineer. */ "Files & media" = "Fichiers & médias"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Transféré depuis"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Serveur de transfert : %1$@\nErreur du serveur de destination : %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Serveur de transfert : %1$@\nErreur : %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Bureau trouvé"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Accusés de réception des messages !"; +/* item status text */ +"Message delivery warning" = "Avertissement sur la distribution des messages"; + /* No comment provided by engineer. */ "Message draft" = "Brouillon de message"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "message reçu"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Rabattement du routage des messages"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Mode de routage des messages"; + /* No comment provided by engineer. */ "Message source remains private." = "La source du message reste privée."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Connexion au réseau"; +/* snd error text */ +"Network issues - message expired after many attempts to send it." = "Problèmes de réseau - le message a expiré après plusieurs tentatives d'envoi."; + /* No comment provided by engineer. */ "Network management" = "Gestion du réseau"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Noms de fichiers privés"; +/* No comment provided by engineer. */ +"Private message routing" = "Routage privé des messages"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Routage privé des messages 🚀"; + /* name of notes to self */ "Private notes" = "Notes privées"; +/* No comment provided by engineer. */ +"Private routing" = "Routage privé"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profil et connexions au serveur"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "Protéger l'écran de l'app"; +/* No comment provided by engineer. */ +"Protect IP address" = "Protéger l'adresse IP"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Protégez vos profils de chat par un mot de passe !"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Protégez votre adresse IP des relais de messagerie choisis par vos contacts.\nActivez-le dans les paramètres *Réseau et serveurs*."; + /* No comment provided by engineer. */ "Protocol timeout" = "Délai du protocole"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Exécuter le chat"; +/* No comment provided by engineer. */ +"Safely receive files" = "Réception de fichiers en toute sécurité"; + /* No comment provided by engineer. */ "Safer groups" = "Groupes plus sûrs"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Envoyer un message dynamique"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Envoyer les messages de manière directe lorsque l'adresse IP est protégée et que votre serveur ou le serveur de destination ne prend pas en charge le routage privé."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Envoyez les messages de manière directe lorsque votre serveur ou le serveur de destination ne prend pas en charge le routage privé."; + /* No comment provided by engineer. */ "Send notifications" = "Envoi de notifications"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Les messages envoyés seront supprimés après une durée déterminée."; +/* srv error text. */ +"Server address is incompatible with network settings." = "L'adresse du serveur est incompatible avec les paramètres du réseau."; + /* server test error */ "Server requires authorization to create queues, check password" = "Le serveur requiert une autorisation pour créer des files d'attente, vérifiez le mot de passe"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Échec du test du serveur !"; +/* srv error text */ +"Server version is incompatible with network settings." = "La version du serveur est incompatible avec les paramètres du réseau."; + /* No comment provided by engineer. */ "Servers" = "Serveurs"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Partager avec vos contacts"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Afficher → sur les messages envoyés via le routage privé."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Afficher les appels dans l'historique du téléphone"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Voir les derniers messages"; +/* No comment provided by engineer. */ +"Show message status" = "Afficher le statut du message"; + /* No comment provided by engineer. */ "Show preview" = "Afficher l'aperçu"; @@ -3740,6 +3818,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "L'application peut vous avertir lorsque vous recevez des messages ou des demandes de contact - veuillez ouvrir les paramètres pour les activer."; +/* No comment provided by engineer. */ +"The app will ask to confirm downloads from unknown file servers (except .onion)." = "L'application demandera de confirmer les téléchargements à partir de serveurs de fichiers inconnus (sauf .onion)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "La tentative de modification de la phrase secrète de la base de données n'a pas abouti."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Pour protéger vos informations, activez la fonction SimpleX Lock.\nVous serez invité à confirmer l'authentification avant que cette fonction ne soit activée."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Pour protéger votre adresse IP, le routage privé utilise vos serveurs SMP pour délivrer les messages."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Pour enregistrer un message vocal, veuillez accorder la permission d'utiliser le microphone."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Erreur inconnue"; +/* No comment provided by engineer. */ +"unknown relays" = "relais inconnus"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Serveurs inconnus !"; + /* No comment provided by engineer. */ "unknown status" = "statut inconnu"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Démute"; +/* No comment provided by engineer. */ +"unprotected" = "non protégé"; + /* No comment provided by engineer. */ "Unread" = "Non lu"; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Utilisation de notifications locales uniquement ?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Utiliser le routage privé avec des serveurs inconnus lorsque l'adresse IP n'est pas protégée."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Utiliser le routage privé avec des serveurs inconnus."; + /* No comment provided by engineer. */ "Use server" = "Utiliser ce serveur"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Lors des appels audio et vidéo."; +/* No comment provided by engineer. */ +"when IP hidden" = "lorsque l'IP est masquée"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Vous pouvez accepter ou refuser les demandes de contacts."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Consommation réduite de la batterie."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Sans Tor ou un VPN, votre adresse IP sera visible par les serveurs de fichiers."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Sans Tor ni VPN, votre adresse IP sera visible par ces relais XFTP : %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Mauvaise phrase secrète pour la base de données"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Clé erronée ou connexion non identifiée - il est très probable que cette connexion soit supprimée."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Mauvaise phrase secrète !"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index f7d1b35f4a..9d04ebd4fb 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -83,7 +83,7 @@ "**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." = "**Privátabb**: 20 percenként ellenőrzi az új üzeneteket. Az eszköztoken megosztásra kerül a SimpleX Chat kiszolgálóval, de az nem, hogy hány ismerőse vagy üzenete van."; /* No comment provided by engineer. */ -"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Legprivátabb**: ne használja a SimpleX Chat értesítési szervert, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást)."; +"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Legprivátabb**: ne használja a SimpleX Chat értesítési kiszolgálót, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást)."; /* No comment provided by engineer. */ "**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Megjegyzés**: ha két eszközön is ugyanazt az adatbázist használja, akkor biztonsági védelemként megszakítja a kapcsolataiból érkező üzenetek visszafejtését."; @@ -92,7 +92,7 @@ "**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Figyelem**: NEM tudja visszaállítani vagy megváltoztatni jelmondatát, ha elveszíti azt."; /* No comment provided by engineer. */ -"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Javasolt**: az eszköztoken és az értesítések elküldésre kerülnek a SimpleX Chat értesítési szerverre, kivéve az üzenet tartalma, mérete vagy az, hogy kitől származik."; +"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Javasolt**: 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. */ "**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Figyelmeztetés**: Az azonnali push-értesítésekhez a kulcstárolóban tárolt jelmondat megadása szükséges."; @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Az eltűnő üzenetek küldése kizárólag abban az esetben van engedélyezve, ha az ismerőse is engedélyezi az ön számára."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Korábbi verzióra történő visszatérés engedélyezése"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Az üzenetek végleges törlése kizárólag abban az esetben van engedélyezve, ha az ismerőse is engedélyezi. (24 óra)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "mindig"; +/* No comment provided by engineer. */ +"Always use private routing." = "Mindig használjon privát útválasztást."; + /* No comment provided by engineer. */ "Always use relay" = "Mindig használjon átjátszó kiszolgálót"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Nem lehet fogadni a fájlt"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Kapacitás túllépés - a címzett nem kapta meg a korábban elküldött üzeneteket."; + /* No comment provided by engineer. */ "Cellular" = "Mobilhálózat"; @@ -805,7 +814,7 @@ "Chinese and Spanish interface" = "Kínai és spanyol kezelőfelület"; /* No comment provided by engineer. */ -"Choose _Migrate from another device_ on the new device and scan QR code." = "Válassza az _Átköltöztetés egy másik eszközről_ opciót az új eszközön és szkennelje be a QR-kódot."; +"Choose _Migrate from another device_ on the new device and scan QR code." = "Válassza az _Átköltöztetés egy másik eszközről_ opciót az új eszközön és olvassa be a QR-kódot."; /* No comment provided by engineer. */ "Choose file" = "Fájl kiválasztása"; @@ -817,13 +826,13 @@ "Clear" = "Kiürítés"; /* No comment provided by engineer. */ -"Clear conversation" = "Beszélgetés kiürítése"; +"Clear conversation" = "Üzenetek kiürítése"; /* No comment provided by engineer. */ -"Clear conversation?" = "Beszélgetés kiürítése?"; +"Clear conversation?" = "Üzenetek kiürítése?"; /* No comment provided by engineer. */ -"Clear private notes?" = "Privát jegyzetek törlése?"; +"Clear private notes?" = "Privát jegyzetek kiürítése?"; /* No comment provided by engineer. */ "Clear verification" = "Hitelesítés törlése"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Adatbázis frissítés megerősítése"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Ismeretlen kiszolgálókról származó fájlok jóváhagyása."; + /* No comment provided by engineer. */ "Confirm network settings" = "Hálózati beállítások megerősítése"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Számítógépek"; +/* snd error text */ +"Destination server error: %@" = "Célkiszolgáló hiba: %@"; + /* No comment provided by engineer. */ "Develop" = "Fejlesztés"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Az előzmények ne kerüljenek elküldésre az új tagok számára."; +/* No comment provided by engineer. */ +"Do NOT send messages directly, even if your or destination server does not support private routing." = "Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "Ne használjon privát útválasztást."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NE használja a SimpleX-et segélyhívásokhoz."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Fájl: %@"; +/* No comment provided by engineer. */ +"Files" = "Fájlok"; + /* No comment provided by engineer. */ "Files & media" = "Fájlok és média"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Továbbítva innen:"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Továbbító kiszolgáló: %1$@\nCélkiszolgáló hiba:%2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Továbbító kiszolgáló: %1$@\nHiba: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Megtalált számítógép"; @@ -2407,7 +2437,7 @@ "Make profile private!" = "Tegye priváttá a profilját!"; /* No comment provided by engineer. */ -"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Győződjön meg arról, hogy a %@ szervercímek megfelelő formátumúak, sorszeparáltak és nem duplikáltak (%@)."; +"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Győződjön meg arról, hogy a %@ kiszolgálócímek megfelelő formátumúak, sorszeparáltak és nem duplikáltak (%@)."; /* No comment provided by engineer. */ "Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Győződjön meg arról, hogy a WebRTC ICE-kiszolgáló címei megfelelő formátumúak, sorszeparáltak és nem duplikáltak."; @@ -2419,7 +2449,7 @@ "Mark deleted for everyone" = "Jelölje meg mindenki számára töröltként"; /* No comment provided by engineer. */ -"Mark read" = "Olvasottként jelölés"; +"Mark read" = "Olvasottnak jelölés"; /* No comment provided by engineer. */ "Mark verified" = "Hitelesítés"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Üzenetkézbesítési bizonylatok!"; +/* item status text */ +"Message delivery warning" = "Üzenet kézbesítési figyelmeztetés"; + /* No comment provided by engineer. */ "Message draft" = "Üzenetvázlat"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "üzenet érkezett"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Üzenet útválasztási tartalék"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Üzenet útválasztási mód"; + /* No comment provided by engineer. */ "Message source remains private." = "Az üzenet forrása titokban marad."; @@ -2494,10 +2533,10 @@ "Messages from %@ will be shown!" = "A(z) %@ által írt üzenetek megjelennek!"; /* 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." = "Az üzeneteket, fájlokat és hívásokat **végpontok közötti titkosítással** és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi."; +"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Az üzeneteket, fájlokat és hívásokat **végpontok közötti titkosítással**, sérülés utáni titkosság-védelemmel és -helyreállítással, továbbá visszautasítással védi."; /* No comment provided by engineer. */ -"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Az üzeneteket, fájlokat és hívásokat **végpontok közötti kvantumrezisztens titkosítással** és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi."; +"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Az üzeneteket, fájlokat és hívásokat **végpontok közötti kvantumrezisztens titkosítással**, sérülés utáni titkosság-védelemmel és -helyreállítással, továbbá visszautasítással védi."; /* No comment provided by engineer. */ "Migrate device" = "Eszköz átköltöztetése"; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Internetkapcsolat"; +/* 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"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Privát fájl nevek"; +/* No comment provided by engineer. */ +"Private message routing" = "Privát üzenet útválasztás"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Privát üzenet útválasztás 🚀"; + /* name of notes to self */ "Private notes" = "Privát jegyzetek"; +/* No comment provided by engineer. */ +"Private routing" = "Privát útválasztás"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profil és kiszolgálókapcsolatok"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "Alkalmazás képernyőjének védelme"; +/* No comment provided by engineer. */ +"Protect IP address" = "Az IP-cím védelme"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Csevegési profiljok védelme jelszóval!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Védje IP-címét az ismerősei által kiválasztott üzenetküldő átjátszókkal szemben.\nEngedélyezze a beállításokban a *Hálózat és kiszolgálók* menüpontban."; + /* No comment provided by engineer. */ "Protocol timeout" = "Protokoll időtúllépés"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Csevegési szolgáltatás indítása"; +/* No comment provided by engineer. */ +"Safely receive files" = "Fájlok biztonságos fogadása"; + /* No comment provided by engineer. */ "Safer groups" = "Biztonságosabb csoportok"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Élő üzenet küldése"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Közvetlen üzenetküldés, ha az IP-cím védett és az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Közvetlen üzenetküldés, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást."; + /* No comment provided by engineer. */ "Send notifications" = "Értesítések küldése"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Az elküldött üzenetek törlésre kerülnek a beállított idő után."; +/* 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."; + /* server test error */ "Server requires authorization to create queues, check password" = "A kiszolgálónak engedélyre van szüksége a várólisták létrehozásához, ellenőrizze jelszavát"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Sikertelen kiszolgáló-teszt!"; +/* srv error text */ +"Server version is incompatible with network settings." = "A kiszolgáló verziója nem kompatibilis a hálózati beállításokkal."; + /* No comment provided by engineer. */ "Servers" = "Kiszolgálók"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Megosztás ismerősökkel"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Egy „→” jel megjelenítése a privát útválasztáson keresztül küldött üzeneteknél."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Hívások megjelenítése a híváslistában"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Utolsó üzenetek megjelenítése"; +/* No comment provided by engineer. */ +"Show message status" = "Üzenet állapot megjelenítése"; + /* No comment provided by engineer. */ "Show preview" = "Előnézet megjelenítése"; @@ -3740,6 +3818,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 kapcsolatfelvételi kéréseket kap – beállítások megnyitása az engedélyezéshez."; +/* 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."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Az adatbázis jelmondatának megváltoztatására tett kísérlet nem fejeződött be."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Az adatavédelem érdekében kapcsolja be a SimpleX zárolás funkciót.\nA funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befejezésére."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Az IP-címe védelme érdekében a privát útválasztás az SMP-kiszolgálókat használja az üzenetek kézbesítéséhez."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Hangüzenet rögzítéséhez adjon engedélyt a mikrofon használathoz."; @@ -3870,7 +3954,7 @@ "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 migrálása szükséges."; /* 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 ellenőrzéséhez ismerősével hasonlítsa össze (vagy szkennelje be) az eszközén lévő kódot."; +"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 ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal."; /* No comment provided by engineer. */ "Toggle incognito when connecting." = "Inkognitó mód kapcsolódáskor."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Ismeretlen hiba"; +/* No comment provided by engineer. */ +"unknown relays" = "ismeretlen átjátszók"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Ismeretlen kiszolgálók!"; + /* No comment provided by engineer. */ "unknown status" = "ismeretlen státusz"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Némítás feloldása"; +/* No comment provided by engineer. */ +"unprotected" = "nem védett"; + /* No comment provided by engineer. */ "Unread" = "Olvasatlan"; @@ -3996,7 +4089,7 @@ "updated profile" = "frissített profil"; /* No comment provided by engineer. */ -"Updating settings will re-connect the client to all servers." = "A beállítások frissítése a szerverekhez újra kapcsolódással jár."; +"Updating settings will re-connect the client to all servers." = "A beállítások frissítése a kiszolgálókhoz való újra kapcsolódással jár."; /* No comment provided by engineer. */ "Updating this setting will re-connect the client to all servers." = "A beállítás frissítésével a kliens újrakapcsolódik az összes kiszolgálóhoz."; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Csak helyi értesítések használata?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Privát útválasztás használata ismeretlen kiszolgálókkal, ha az IP-cím nem védett."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Használjon privát útválasztást ismeretlen kiszolgálókkal."; + /* No comment provided by engineer. */ "Use server" = "Kiszolgáló használata"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Amikor egy bejövő hang- vagy videóhívás érkezik."; +/* No comment provided by engineer. */ +"when IP hidden" = "ha az IP-cím rejtett"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Amikor az emberek kapcsolódást kérelmeznek, ön elfogadhatja vagy elutasíthatja azokat."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Csökkentett akkumulátorhasználattal."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Tor vagy VPN nélkül az IP-címe látható lesz a fájlkiszolgálók számára."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Tor vagy VPN nélkül az IP-címe látható lesz ezen XFTP átjátszók számára: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Téves adatbázis jelmondat"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Rossz kulcs vagy ismeretlen kapcsolat - valószínűleg ez a kapcsolat törlődött."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Téves jelmondat!"; @@ -4347,7 +4458,7 @@ "you changed role of %@ to %@" = "%1$@ szerepkörét megváltoztatta erre: %@"; /* No comment provided by engineer. */ -"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Ön szabályozhatja, hogy mely kiszogál(ók)ón keresztül **kapja** az üzeneteket, az ismerősöket - az üzenetküldéshez használt szervereken."; +"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Ön szabályozhatja, hogy mely kiszogál(ók)ón keresztül **kapja** az üzeneteket, az ismerősöket - az üzenetküldéshez használt kiszolgálókon."; /* No comment provided by engineer. */ "You could not be verified; please try again." = "Nem lehetett ellenőrizni; próbálja meg újra."; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 15bef7719e..7039ebc4d0 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Consenti i messaggi a tempo solo se il contatto li consente a te."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Consenti downgrade"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Consenti l'eliminazione irreversibile dei messaggi solo se il contatto la consente a te. (24 ore)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "sempre"; +/* No comment provided by engineer. */ +"Always use private routing." = "Usa sempre l'instradamento privato."; + /* No comment provided by engineer. */ "Always use relay" = "Connetti via relay"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Impossibile ricevere il file"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Quota superata - il destinatario non ha ricevuto i messaggi precedentemente inviati."; + /* No comment provided by engineer. */ "Cellular" = "Mobile"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Conferma aggiornamenti database"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Conferma i file da server sconosciuti."; + /* No comment provided by engineer. */ "Confirm network settings" = "Conferma le impostazioni di rete"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Dispositivi desktop"; +/* snd error text */ +"Destination server error: %@" = "Errore del server di destinazione: %@"; + /* No comment provided by engineer. */ "Develop" = "Sviluppa"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Non inviare la cronologia ai nuovi membri."; +/* No comment provided by engineer. */ +"Do NOT send messages directly, even if your or destination server does not support private routing." = "NON inviare messaggi direttamente, anche se il tuo server o quello di destinazione non supporta l'instradamento privato."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "NON usare l'instradamento privato."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NON usare SimpleX per chiamate di emergenza."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "File: %@"; +/* No comment provided by engineer. */ +"Files" = "File"; + /* No comment provided by engineer. */ "Files & media" = "File e multimediali"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Inoltrato da"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Server di inoltro: %1$@\nErrore del server di destinazione: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Server di inoltro: %1$@\nErrore: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Desktop trovato"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Ricevute di consegna dei messaggi!"; +/* item status text */ +"Message delivery warning" = "Avviso di consegna del messaggio"; + /* No comment provided by engineer. */ "Message draft" = "Bozza dei messaggi"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "messaggio ricevuto"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Ripiego instradamento messaggio"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Modalità instradamento messaggio"; + /* No comment provided by engineer. */ "Message source remains private." = "La fonte del messaggio resta privata."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Connessione di 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"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Nomi di file privati"; +/* No comment provided by engineer. */ +"Private message routing" = "Instradamento privato messaggi"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Instradamento privato dei messaggi 🚀"; + /* name of notes to self */ "Private notes" = "Note private"; +/* No comment provided by engineer. */ +"Private routing" = "Instradamento privato"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profilo e connessioni al server"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "Proteggi la schermata dell'app"; +/* No comment provided by engineer. */ +"Protect IP address" = "Proteggi l'indirizzo IP"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Proteggi i tuoi profili di chat con una password!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Proteggi il tuo indirizzo IP dai relay di messaggistica scelti dai tuoi contatti.\nAttivalo nelle impostazioni *Rete e server*."; + /* No comment provided by engineer. */ "Protocol timeout" = "Scadenza del protocollo"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Avvia chat"; +/* No comment provided by engineer. */ +"Safely receive files" = "Ricevi i file in sicurezza"; + /* No comment provided by engineer. */ "Safer groups" = "Gruppi più sicuri"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Invia messaggio in diretta"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Invia messaggi direttamente quando l'indirizzo IP è protetto e il tuo server o quello di destinazione non supporta l'instradamento privato."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Invia messaggi direttamente quando il tuo server o quello di destinazione non supporta l'instradamento privato."; + /* No comment provided by engineer. */ "Send notifications" = "Invia notifiche"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "I messaggi inviati verranno eliminati dopo il tempo impostato."; +/* srv error text. */ +"Server address is incompatible with network settings." = "L'indirizzo del server non è compatibile con le impostazioni di rete."; + /* server test error */ "Server requires authorization to create queues, check password" = "Il server richiede l'autorizzazione di creare code, controlla la password"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Test del server fallito!"; +/* srv error text */ +"Server version is incompatible with network settings." = "La versione del server non è compatibile con le impostazioni di rete."; + /* No comment provided by engineer. */ "Servers" = "Server"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Condividi con i contatti"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Mostra → nei messaggi inviati via instradamento privato."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Mostra le chiamate nella cronologia del telefono"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Mostra ultimi messaggi"; +/* No comment provided by engineer. */ +"Show message status" = "Mostra stato del messaggio"; + /* No comment provided by engineer. */ "Show preview" = "Mostra anteprima"; @@ -3740,6 +3818,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 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)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Il tentativo di cambiare la password del database non è stato completato."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Per proteggere le tue informazioni, attiva SimpleX Lock.\nTi verrà chiesto di completare l'autenticazione prima di attivare questa funzionalità."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Per proteggere il tuo indirizzo IP, l'instradamento privato usa i tuoi server SMP per consegnare i messaggi."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Per registrare un messaggio vocale, concedi l'autorizzazione all'uso del microfono."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Errore sconosciuto"; +/* No comment provided by engineer. */ +"unknown relays" = "relay sconosciuti"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Server sconosciuti!"; + /* No comment provided by engineer. */ "unknown status" = "stato sconosciuto"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Riattiva notifiche"; +/* No comment provided by engineer. */ +"unprotected" = "non protetto"; + /* No comment provided by engineer. */ "Unread" = "Non letto"; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Usare solo notifiche locali?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Usa l'instradamento privato con server sconosciuti quando l'indirizzo IP non è protetto."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Usa l'instradamento privato con server sconosciuti."; + /* No comment provided by engineer. */ "Use server" = "Usa il server"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Quando si connettono le chiamate audio e video."; +/* No comment provided by engineer. */ +"when IP hidden" = "quando l'IP è nascosto"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Quando le persone chiedono di connettersi, puoi accettare o rifiutare."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Con consumo di batteria ridotto."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Senza Tor o VPN, il tuo indirizzo IP sarà visibile ai server di file."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Senza Tor o VPN, il tuo indirizzo IP sarà visibile a questi relay XFTP: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Password del database sbagliata"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Chiave sbagliata o connessione sconosciuta - molto probabilmente questa connessione è stata eliminata."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Password sbagliata!"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index e19473fe4b..119cbc6378 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Sta verdwijnende berichten alleen toe als uw contact dit toestaat."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Downgraden toestaan"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "altijd"; +/* No comment provided by engineer. */ +"Always use private routing." = "Gebruik altijd privéroutering."; + /* No comment provided by engineer. */ "Always use relay" = "Altijd relay gebruiken"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Kan bestand niet ontvangen"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Capaciteit overschreden - ontvanger heeft eerder verzonden berichten niet ontvangen."; + /* No comment provided by engineer. */ "Cellular" = "Mobiel"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Bevestig database upgrades"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Bevestig bestanden van onbekende servers."; + /* No comment provided by engineer. */ "Confirm network settings" = "Bevestig netwerk instellingen"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Desktop apparaten"; +/* snd error text */ +"Destination server error: %@" = "Bestemmingsserverfout: %@"; + /* No comment provided by engineer. */ "Develop" = "Ontwikkelen"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Stuur geen geschiedenis naar nieuwe leden."; +/* No comment provided by engineer. */ +"Do NOT send messages directly, even if your or destination server does not support private routing." = "Stuur GEEN berichten rechtstreeks, zelfs als uw of de bestemmingsserver geen privéroutering ondersteunt."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "Gebruik GEEN privéroutering."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Gebruik SimpleX NIET voor noodoproepen."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Bestand: %@"; +/* No comment provided by engineer. */ +"Files" = "Bestanden"; + /* No comment provided by engineer. */ "Files & media" = "Bestanden en media"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Doorgestuurd vanuit"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Doorstuurserver: %1$@\nBestemmingsserverfout: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Doorstuurserver: %1$@\nFout: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Desktop gevonden"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Ontvangst bevestiging voor berichten!"; +/* item status text */ +"Message delivery warning" = "Waarschuwing voor berichtbezorging"; + /* No comment provided by engineer. */ "Message draft" = "Concept bericht"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "bericht ontvangen"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Terugval op berichtroutering"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Berichtrouteringsmodus"; + /* No comment provided by engineer. */ "Message source remains private." = "Berichtbron blijft privé."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Netwerkverbinding"; +/* 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"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Privé bestandsnamen"; +/* No comment provided by engineer. */ +"Private message routing" = "Routering van privéberichten"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Routing van privéberichten🚀"; + /* name of notes to self */ "Private notes" = "Privé notities"; +/* No comment provided by engineer. */ +"Private routing" = "Privéroutering"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profiel- en serververbindingen"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "App scherm verbergen"; +/* No comment provided by engineer. */ +"Protect IP address" = "Bescherm het IP-adres"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Bescherm je chat profielen met een wachtwoord!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Bescherm uw IP-adres tegen de berichtenrelais die door uw contacten zijn gekozen.\nSchakel dit in in *Netwerk en servers*-instellingen."; + /* No comment provided by engineer. */ "Protocol timeout" = "Protocol timeout"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Chat uitvoeren"; +/* No comment provided by engineer. */ +"Safely receive files" = "Veilig bestanden ontvangen"; + /* No comment provided by engineer. */ "Safer groups" = "Veiligere groepen"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Stuur een livebericht"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Stuur berichten rechtstreeks als het IP-adres beschermd is en uw of bestemmingsserver geen privéroutering ondersteunt."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Stuur berichten rechtstreeks wanneer uw of de doelserver geen privéroutering ondersteunt."; + /* No comment provided by engineer. */ "Send notifications" = "Meldingen verzenden"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Verzonden berichten worden na ingestelde tijd verwijderd."; +/* srv error text. */ +"Server address is incompatible with network settings." = "Serveradres is niet compatibel met netwerkinstellingen."; + /* server test error */ "Server requires authorization to create queues, check password" = "Server vereist autorisatie om wachtrijen te maken, controleer wachtwoord"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Servertest mislukt!"; +/* srv error text */ +"Server version is incompatible with network settings." = "Serverversie is incompatibel met netwerkinstellingen."; + /* No comment provided by engineer. */ "Servers" = "Servers"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Delen met contacten"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Toon → bij berichten verzonden via privéroutering."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Toon oproepen in de telefoongeschiedenis"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Laat laatste berichten zien"; +/* No comment provided by engineer. */ +"Show message status" = "Toon berichtstatus"; + /* No comment provided by engineer. */ "Show preview" = "Toon voorbeeld"; @@ -3740,6 +3818,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 will ask to confirm downloads from unknown file servers (except .onion)." = "De app vraagt om downloads van onbekende bestandsservers (behalve .onion) te bevestigen."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "De poging om het wachtwoord van de database te wijzigen is niet voltooid."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Schakel SimpleX Vergrendelen om uw informatie te beschermen.\nU wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Om uw IP-adres te beschermen, gebruikt privéroutering uw SMP-servers om berichten te bezorgen."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Geef toestemming om de microfoon te gebruiken om een spraakbericht op te nemen."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Onbekende fout"; +/* No comment provided by engineer. */ +"unknown relays" = "onbekende relays"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Onbekende servers!"; + /* No comment provided by engineer. */ "unknown status" = "onbekende status"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Dempen opheffen"; +/* No comment provided by engineer. */ +"unprotected" = "onbeschermd"; + /* No comment provided by engineer. */ "Unread" = "Ongelezen"; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Alleen lokale meldingen gebruiken?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Gebruik privéroutering met onbekende servers wanneer het IP-adres niet beveiligd is."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Gebruik privéroutering met onbekende servers."; + /* No comment provided by engineer. */ "Use server" = "Gebruik server"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Bij het verbinden van audio- en video-oproepen."; +/* No comment provided by engineer. */ +"when IP hidden" = "wanneer IP verborgen is"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Wanneer mensen vragen om verbinding te maken, kunt u dit accepteren of weigeren."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Met verminderd batterijgebruik."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Zonder Tor of VPN is uw IP-adres zichtbaar voor bestandsservers."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Zonder Tor of VPN zal uw IP-adres zichtbaar zijn voor deze XFTP-relays: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Verkeerd wachtwoord voor de database"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Verkeerde sleutel of onbekende verbinding - hoogstwaarschijnlijk is deze verbinding verwijderd."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Verkeerd wachtwoord!"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index bd534a77e9..3189c74cf2 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Zezwól na znikające wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Zezwól na obniżenie wersji"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli. (24 godziny)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "zawsze"; +/* No comment provided by engineer. */ +"Always use private routing." = "Zawsze używaj prywatnego trasowania."; + /* No comment provided by engineer. */ "Always use relay" = "Zawsze używaj przekaźnika"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Nie można odebrać pliku"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Przekroczono pojemność - odbiorca nie otrzymał wcześniej wysłanych wiadomości."; + /* No comment provided by engineer. */ "Cellular" = "Sieć komórkowa"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Potwierdź aktualizacje bazy danych"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Potwierdzaj pliki z nieznanych serwerów."; + /* No comment provided by engineer. */ "Confirm network settings" = "Potwierdź ustawienia sieciowe"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Urządzenia komputerowe"; +/* snd error text */ +"Destination server error: %@" = "Błąd docelowego serwera: %@"; + /* No comment provided by engineer. */ "Develop" = "Deweloperskie"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Nie wysyłaj historii do nowych członków."; +/* No comment provided by engineer. */ +"Do NOT send messages directly, even if your or destination server does not support private routing." = "NIE wysyłaj wiadomości bezpośrednio, nawet jeśli serwer docelowy nie obsługuje prywatnego trasowania."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "NIE używaj prywatnego trasowania."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NIE używaj SimpleX do połączeń alarmowych."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Plik: %@"; +/* No comment provided by engineer. */ +"Files" = "Pliki"; + /* No comment provided by engineer. */ "Files & media" = "Pliki i media"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Przekazane dalej od"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Serwer przekazujący: %1$@\nBłąd serwera docelowego: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Serwer przekazujący: %1$@\nBłąd: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Znaleziono komputer"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Potwierdzenia dostarczenia wiadomości!"; +/* item status text */ +"Message delivery warning" = "Ostrzeżenie dostarczenia wiadomości"; + /* No comment provided by engineer. */ "Message draft" = "Wersja robocza wiadomości"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "wiadomość otrzymana"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Rezerwowe trasowania wiadomości"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Tryb trasowania wiadomości"; + /* No comment provided by engineer. */ "Message source remains private." = "Źródło wiadomości pozostaje prywatne."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Połączenie z siecią"; +/* snd error text */ +"Network issues - message expired after many attempts to send it." = "Błąd sieciowy - wiadomość wygasła po wielu próbach wysłania jej."; + /* No comment provided by engineer. */ "Network management" = "Zarządzenie sieciowe"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Prywatne nazwy plików"; +/* No comment provided by engineer. */ +"Private message routing" = "Trasowanie prywatnych wiadomości"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Trasowanie prywatnych wiadomości🚀"; + /* name of notes to self */ "Private notes" = "Prywatne notatki"; +/* No comment provided by engineer. */ +"Private routing" = "Prywatne trasowanie"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profil i połączenia z serwerem"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "Chroń ekran aplikacji"; +/* No comment provided by engineer. */ +"Protect IP address" = "Chroń adres IP"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Chroń swoje profile czatu hasłem!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Chroni Twój adres IP przed przekaźnikami wiadomości wybranych przez Twoje kontakty.\nWłącz w ustawianiach *Sieć i serwery* ."; + /* No comment provided by engineer. */ "Protocol timeout" = "Limit czasu protokołu"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Uruchom czat"; +/* No comment provided by engineer. */ +"Safely receive files" = "Bezpiecznie otrzymuj pliki"; + /* No comment provided by engineer. */ "Safer groups" = "Bezpieczniejsze grupy"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Wyślij wiadomość na żywo"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Wysyłaj wiadomości bezpośrednio, gdy adres IP jest chroniony i Twój lub docelowy serwer nie obsługuje prywatnego trasowania."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Wysyłaj wiadomości bezpośrednio, gdy Twój lub docelowy serwer nie obsługuje prywatnego trasowania."; + /* No comment provided by engineer. */ "Send notifications" = "Wyślij powiadomienia"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Wysłane wiadomości zostaną usunięte po ustawionym czasie."; +/* srv error text. */ +"Server address is incompatible with network settings." = "Adres serwera jest niekompatybilny z ustawieniami sieciowymi."; + /* server test error */ "Server requires authorization to create queues, check password" = "Serwer wymaga autoryzacji do tworzenia kolejek, sprawdź hasło"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Test serwera nie powiódł się!"; +/* srv error text */ +"Server version is incompatible with network settings." = "Wersja serwera jest niekompatybilna z ustawieniami sieciowymi."; + /* No comment provided by engineer. */ "Servers" = "Serwery"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Udostępnij kontaktom"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Pokaż → na wiadomościach wysłanych przez prywatne trasowanie."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Pokaż połączenia w historii telefonu"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Pokaż ostatnie wiadomości"; +/* No comment provided by engineer. */ +"Show message status" = "Pokaż status wiadomości"; + /* No comment provided by engineer. */ "Show preview" = "Pokaż podgląd"; @@ -3740,6 +3818,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "Aplikacja może powiadamiać Cię, gdy otrzymujesz wiadomości lub prośby o kontakt — otwórz ustawienia, aby włączyć."; +/* No comment provided by engineer. */ +"The app will ask to confirm downloads from unknown file servers (except .onion)." = "Aplikacja zapyta o potwierdzenie pobierania od nieznanych serwerów plików (poza .onion)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Próba zmiany hasła bazy danych nie została zakończona."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Aby chronić swoje informacje, włącz funkcję blokady SimpleX.\nPrzed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Aby chronić Twój adres IP, prywatne trasowanie używa Twoich serwerów SMP, aby dostarczyć wiadomości."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Aby nagrać wiadomość głosową należy udzielić zgody na użycie Mikrofonu."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Nieznany błąd"; +/* No comment provided by engineer. */ +"unknown relays" = "nieznane przekaźniki"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Nieznane serwery!"; + /* No comment provided by engineer. */ "unknown status" = "nieznany status"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Wyłącz wyciszenie"; +/* No comment provided by engineer. */ +"unprotected" = "niezabezpieczony"; + /* No comment provided by engineer. */ "Unread" = "Nieprzeczytane"; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Używać tylko lokalnych powiadomień?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Używaj prywatnego trasowania z nieznanymi serwerami, gdy adres IP nie jest chroniony."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Używaj prywatnego trasowania z nieznanymi serwerami."; + /* No comment provided by engineer. */ "Use server" = "Użyj serwera"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Podczas łączenia połączeń audio i wideo."; +/* No comment provided by engineer. */ +"when IP hidden" = "gdy IP ukryty"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Kiedy ludzie proszą o połączenie, możesz je zaakceptować lub odrzucić."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Ze zmniejszonym zużyciem baterii."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Bez Tor lub VPN, Twój adres IP będzie widoczny do serwerów plików."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Bez Tor lub VPN, Twój adres IP będzie widoczny dla tych przekaźników XFTP: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Nieprawidłowe hasło bazy danych"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Zły klucz lub nieznane połączenie - najprawdopodobniej to połączenie jest usunięte."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Nieprawidłowe hasło!"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index baa9f89eac..c0ad6e23cf 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Разрешить исчезающие сообщения, только если Ваш контакт разрешает их Вам."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Разрешить прямую доставку"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам. (24 часа)"; @@ -509,6 +512,9 @@ /* pref value */ "always" = "всегда"; +/* No comment provided by engineer. */ +"Always use private routing." = "Всегда использовать конфиденциальную доставку."; + /* No comment provided by engineer. */ "Always use relay" = "Всегда соединяться через relay"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Невозможно получить файл"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Превышено количество сообщений - предыдущие сообщения не доставлены."; + /* No comment provided by engineer. */ "Cellular" = "Мобильная сеть"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Подтвердить обновление базы данных"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Подтверждать файлы с неизвестных серверов."; + /* No comment provided by engineer. */ "Confirm network settings" = "Подтвердите настройки сети"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Компьютеры"; +/* snd error text */ +"Destination server error: %@" = "Ошибка сервера получателя: %@"; + /* No comment provided by engineer. */ "Develop" = "Для разработчиков"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Не отправлять историю новым членам."; +/* 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 private routing." = "Не использовать конфиденциальную доставку."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Не используйте SimpleX для экстренных звонков."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Файл: %@"; +/* No comment provided by engineer. */ +"Files" = "Файлы"; + /* No comment provided by engineer. */ "Files & media" = "Файлы и медиа"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Переслано из"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Пересылающий сервер: %1$@\nОшибка сервера получателя: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Пересылающий сервер: %1$@\nОшибка: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Компьютер найден"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Отчеты о доставке сообщений!"; +/* item status text */ +"Message delivery warning" = "Предупреждение доставки сообщения"; + /* No comment provided by engineer. */ "Message draft" = "Черновик сообщения"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "получено сообщение"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Прямая доставка сообщений"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Режим доставки сообщений"; + /* No comment provided by engineer. */ "Message source remains private." = "Источник сообщения остаётся конфиденциальным."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Интернет-соединение"; +/* snd error text */ +"Network issues - message expired after many attempts to send it." = "Ошибка сети - сообщение не было отправлено после многократных попыток."; + /* No comment provided by engineer. */ "Network management" = "Статус сети"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Защищенные имена файлов"; +/* No comment provided by engineer. */ +"Private message routing" = "Конфиденциальная доставка сообщений"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Конфиденциальная доставка сообщений 🚀"; + /* name of notes to self */ "Private notes" = "Личные заметки"; +/* No comment provided by engineer. */ +"Private routing" = "Конфиденциальная доставка"; + /* No comment provided by engineer. */ "Profile and server connections" = "Профиль и соединения на сервере"; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "Защитить экран приложения"; +/* No comment provided by engineer. */ +"Protect IP address" = "Защитить IP адрес"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Защитите Ваши профили чата паролем!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Защитите ваш IP адрес от серверов сообщений, выбранных Вашими контактами.\nВключите в настройках *Сеть и серверы*."; + /* No comment provided by engineer. */ "Protocol timeout" = "Таймаут протокола"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Запустить chat"; +/* No comment provided by engineer. */ +"Safely receive files" = "Получайте файлы безопасно"; + /* No comment provided by engineer. */ "Safer groups" = "Более безопасные группы"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Отправить живое сообщение"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Отправлять сообщения напрямую, когда IP адрес защищен, и Ваш сервер или сервер получателя не поддерживает конфиденциальную доставку."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Отправлять сообщения напрямую, когда Ваш сервер или сервер получателя не поддерживает конфиденциальную доставку."; + /* No comment provided by engineer. */ "Send notifications" = "Отправлять уведомления"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Отправленные сообщения будут удалены через заданное время."; +/* srv error text. */ +"Server address is incompatible with network settings." = "Адрес сервера несовместим с настройками сети."; + /* server test error */ "Server requires authorization to create queues, check password" = "Сервер требует авторизации для создания очередей, проверьте пароль"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Ошибка теста сервера!"; +/* srv error text */ +"Server version is incompatible with network settings." = "Версия сервера несовместима с настройками сети."; + /* No comment provided by engineer. */ "Servers" = "Серверы"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Поделиться с контактами"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Показать → на сообщениях доставленных конфиденциально."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Показать звонки в истории телефона"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Показывать последние сообщения"; +/* No comment provided by engineer. */ +"Show message status" = "Показать статус сообщения"; + /* No comment provided by engineer. */ "Show preview" = "Показывать уведомления"; @@ -3740,6 +3818,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 will ask to confirm downloads from unknown file servers (except .onion)." = "Приложение будет запрашивать подтверждение загрузки с неизвестных серверов (за исключением .onion адресов)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Попытка поменять пароль базы данных не была завершена."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Чтобы защитить Вашу информацию, включите блокировку SimpleX Chat.\nВам будет нужно пройти аутентификацию для включения блокировки."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Чтобы защитить ваш IP адрес, приложение использует Ваши SMP серверы для конфиденциальной доставки сообщений."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Для записи голосового сообщения, пожалуйста разрешите доступ к микрофону."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Неизвестная ошибка"; +/* No comment provided by engineer. */ +"unknown relays" = "неизвестные серверы"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Неизвестные серверы!"; + /* No comment provided by engineer. */ "unknown status" = "неизвестный статус"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Уведомлять"; +/* No comment provided by engineer. */ +"unprotected" = "незащищённый"; + /* No comment provided by engineer. */ "Unread" = "Не прочитано"; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Использовать только локальные нотификации?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Использовать конфиденциальную доставку с неизвестными серверами, когда IP адрес не защищен."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Использовать конфиденциальную доставку с неизвестными серверами."; + /* No comment provided by engineer. */ "Use server" = "Использовать сервер"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Во время соединения аудио и видео звонков."; +/* No comment provided by engineer. */ +"when IP hidden" = "когда IP защищен"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Когда Вы получите запрос на соединение, Вы можете принять или отклонить его."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "С уменьшенным потреблением батареи."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Без Тора или ВПН, Ваш IP адрес будет доступен серверам файлов."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Без Тора или ВПН, Ваш IP адрес будет доступен этим серверам файлов: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Неправильный пароль базы данных"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Неверный ключ или неизвестное соединение - скорее всего, это соединение удалено."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Неправильный пароль!"; diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index 0350dc836c..696d5a3f21 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -275,7 +275,7 @@ "0 sec" = "0 saniye"; /* No comment provided by engineer. */ -"0s" = "0 saniye"; +"0s" = "0sn"; /* time interval */ "1 day" = "1 gün"; @@ -438,7 +438,7 @@ "All your contacts will remain connected. Profile update will be sent to your contacts." = "Tüm kişileriniz bağlı kalacaktır. Profil güncellemesi kişilerinize gönderilecektir."; /* No comment provided by engineer. */ -"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Tüm kişileriniz, sohbetleriniz ve dosyalarınız güvenli bir şekilde şifrelenecek ve parçalar halinde yapılandırılmış XFTP rölelerine yüklenecektir."; +"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Tüm kişileriniz, konuşmalarınız ve dosyalarınız güvenli bir şekilde şifrelenir ve yapılandırılmış XFTP yönlendiricilerine parçalar halinde yüklenir."; /* No comment provided by engineer. */ "Allow" = "İzin ver"; @@ -449,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Eğer kişide izin verirse kaybolan mesajlara izin ver."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Sürüm düşürmeye izin ver"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Konuştuğun kişi, kalıcı olarak silinebilen mesajlara izin veriyorsa sen de ver. (24 saat içinde)"; @@ -459,7 +462,7 @@ "Allow message reactions." = "Mesaj tepkilerine izin ver."; /* No comment provided by engineer. */ -"Allow sending direct messages to members." = "Üyelere direkt mesaj göndermeye izin ver."; +"Allow sending direct messages to members." = "Üyelere doğrudan mesaj göndermeye izin ver."; /* No comment provided by engineer. */ "Allow sending disappearing messages." = "Kendiliğinden yok olan mesajlar göndermeye izin ver."; @@ -509,6 +512,9 @@ /* pref value */ "always" = "her zaman"; +/* No comment provided by engineer. */ +"Always use private routing." = "Her zaman gizli yönlendirme kullan."; + /* No comment provided by engineer. */ "Always use relay" = "Her zaman yönlendirici kullan"; @@ -716,6 +722,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Dosya alınamıyor"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Kapasite aşıldı - alıcı önceden gönderilen mesajları almadı."; + /* No comment provided by engineer. */ "Cellular" = "Hücresel Veri"; @@ -852,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Veritabanı geliştirmelerini onayla"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Bilinmeyen sunuculardan gelen dosyaları onayla."; + /* No comment provided by engineer. */ "Confirm network settings" = "Ağ ayarlarını onaylayın"; @@ -1320,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Bilgisayar cihazları"; +/* snd error text */ +"Destination server error: %@" = "Hedef sunucu hatası: %@"; + /* No comment provided by engineer. */ "Develop" = "Geliştir"; @@ -1398,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Yeni üyelere geçmişi gönderme."; +/* No comment provided by engineer. */ +"Do NOT send messages directly, even if your or destination server does not support private routing." = "Sizin veya hedef sunucunun özel yönlendirmeyi desteklememesi durumunda bile mesajları doğrudan GÖNDERMEYİN."; + +/* No comment provided by engineer. */ +"Do NOT use private routing." = "Gizli yönlendirmeyi KULLANMA."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Acil aramalar için SimpleX'i KULLANMAYIN."; @@ -1839,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Dosya: %@"; +/* No comment provided by engineer. */ +"Files" = "Dosyalar"; + /* No comment provided by engineer. */ "Files & media" = "Dosyalar & medya"; @@ -1905,6 +1929,12 @@ /* No comment provided by engineer. */ "Forwarded from" = "Şuradan iletildi"; +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Yönlendirme sunucusu: %1$@\nHedef sunucu hatası: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Yönlendirme sunucusu: %1$@\nHata: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Bilgisayar bulundu"; @@ -2460,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Mesaj alındı bilgisi!"; +/* item status text */ +"Message delivery warning" = "Mesaj iletimi uyarısı"; + /* No comment provided by engineer. */ "Message draft" = "Mesaj taslağı"; @@ -2475,6 +2508,12 @@ /* notification */ "message received" = "mesaj alındı"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Mesaj yönlendirme yedeklemesi"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Mesaj yönlendirme modu"; + /* No comment provided by engineer. */ "Message source remains private." = "Mesaj kaynağı gizli kalır."; @@ -2586,6 +2625,9 @@ /* No comment provided by engineer. */ "Network connection" = "Ağ bağlantısı"; +/* snd error text */ +"Network issues - message expired after many attempts to send it." = "Ağ sorunları - birçok gönderme denemesinden sonra mesajın süresi doldu."; + /* No comment provided by engineer. */ "Network management" = "Ağ yönetimi"; @@ -2948,9 +2990,18 @@ /* No comment provided by engineer. */ "Private filenames" = "Gizli dosya adları"; +/* No comment provided by engineer. */ +"Private message routing" = "Gizli mesaj yönlendirme"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Gizli mesaj yönlendirme 🚀"; + /* name of notes to self */ "Private notes" = "Gizli notlar"; +/* No comment provided by engineer. */ +"Private routing" = "Gizli yönlendirme"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profil ve sunucu bağlantıları"; @@ -2985,7 +3036,7 @@ "Prohibit messages reactions." = "Mesajlarda tepkileri yasakla."; /* No comment provided by engineer. */ -"Prohibit sending direct messages to members." = "Geri dönülmez mesaj silme işlemini yasakla."; +"Prohibit sending direct messages to members." = "Üyelere doğrudan mesaj göndermeyi yasakla."; /* No comment provided by engineer. */ "Prohibit sending disappearing messages." = "Kaybolan mesajların gönderimini yasakla."; @@ -3002,9 +3053,15 @@ /* No comment provided by engineer. */ "Protect app screen" = "Uygulama ekranını koru"; +/* No comment provided by engineer. */ +"Protect IP address" = "IP adresini koru"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Bir parolayla birlikte sohbet profillerini koru!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "IP adresinizi kişileriniz tarafından seçilen mesajlaşma yönlendiricilerinden koruyun.\n*Ağ ve sunucular* ayarlarında etkinleştirin."; + /* No comment provided by engineer. */ "Protocol timeout" = "Protokol zaman aşımı"; @@ -3117,10 +3174,10 @@ "rejected call" = "geri çevrilmiş çağrı"; /* No comment provided by engineer. */ -"Relay server is only used if necessary. Another party can observe your IP address." = "Aktarma sunucusu yalnızca gerekli olduğunda kullanılır. Başka bir taraf IP adresinizi gözlemleyebilir."; +"Relay server is only used if necessary. Another party can observe your IP address." = "Yönlendirici sunucusu yalnızca gerekli olduğunda kullanılır. Başka bir taraf IP adresinizi gözlemleyebilir."; /* No comment provided by engineer. */ -"Relay server protects your IP address, but it can observe the duration of the call." = "Aktarıcı sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir."; +"Relay server protects your IP address, but it can observe the duration of the call." = "Yönlendirici sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir."; /* No comment provided by engineer. */ "Remove" = "Sil"; @@ -3230,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Sohbeti çalıştır"; +/* No comment provided by engineer. */ +"Safely receive files" = "Dosyaları güvenle alın"; + /* No comment provided by engineer. */ "Safer groups" = "Daha güvenli gruplar"; @@ -3386,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Canlı mesaj gönder"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "IP adresi korumalı olduğunda ve sizin veya hedef sunucunun özel yönlendirmeyi desteklemediği durumlarda mesajları doğrudan gönderin."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Sizin veya hedef sunucunun özel yönlendirmeyi desteklemediği durumlarda mesajları doğrudan gönderin."; + /* No comment provided by engineer. */ "Send notifications" = "Bildirimler gönder"; @@ -3449,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Gönderilen mesajlar ayarlanan süreden sonra silinecektir."; +/* srv error text. */ +"Server address is incompatible with network settings." = "Sunucu adresi ağ ayarlarıyla uyumlu değil."; + /* server test error */ "Server requires authorization to create queues, check password" = "Sunucunun sıra oluşturması için yetki gereklidir, şifreyi kontrol edin"; @@ -3458,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Sunucu testinde hata oluştu!"; +/* srv error text */ +"Server version is incompatible with network settings." = "Sunucu sürümü ağ ayarlarıyla uyumlu değil."; + /* No comment provided by engineer. */ "Servers" = "Sunucular"; @@ -3524,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Kişilerle paylaş"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Gizli yönlendirme yoluyla gönderilen mesajlarda → işaretini göster."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Telefon geçmişinde aramaları göster"; @@ -3533,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Son mesajları göster"; +/* No comment provided by engineer. */ +"Show message status" = "Mesaj durumunu göster"; + /* No comment provided by engineer. */ "Show preview" = "Ön gösterimi göser"; @@ -3740,6 +3818,9 @@ /* No comment provided by engineer. */ "The app can notify you when you receive messages or contact requests - please open settings to enable." = "Uygulama, mesaj veya iletişim isteği aldığınızda sizi bilgilendirebilir - etkinleştirmek için lütfen ayarları açın."; +/* No comment provided by engineer. */ +"The app will ask to confirm downloads from unknown file servers (except .onion)." = "Uygulama bilinmeyen dosya sunucularından indirmeleri onaylamanızı isteyecektir (.onion hariç)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Veritabanı parolasını değiştirme girişimi tamamlanmadı."; @@ -3860,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Bilgilerinizi korumak için SimpleX Lock özelliğini açın.\nBu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenecektir."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "IP adresinizi korumak için,gizli yönlendirme mesajları iletmek için SMP sunucularınızı kullanır."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Sesli mesaj kaydetmek için lütfen Mikrofon kullanım izni verin."; @@ -3944,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Bilinmeyen hata"; +/* No comment provided by engineer. */ +"unknown relays" = "bilinmeyen yönlendiriciler"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Bilinmeyen sunucular!"; + /* No comment provided by engineer. */ "unknown status" = "bilinmeyen durum"; @@ -3968,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Susturmayı kaldır"; +/* No comment provided by engineer. */ +"unprotected" = "korumasız"; + /* No comment provided by engineer. */ "Unread" = "Okunmamış"; @@ -4037,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Sadece yerel bildirimler kullanılsın mı?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "IP adresi korunmadığında bilinmeyen sunucularla gizli yönlendirme kullan."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Bilinmeyen sunucularla gizli yönlendirme kullan."; + /* No comment provided by engineer. */ "Use server" = "Sunucu kullan"; @@ -4190,6 +4289,9 @@ /* No comment provided by engineer. */ "When connecting audio and video calls." = "Sesli ve görüntülü aramalara bağlanırken."; +/* No comment provided by engineer. */ +"when IP hidden" = "IP gizliyken"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "İnsanlar bağlantı talebinde bulunduğunda, kabul edebilir veya reddedebilirsiniz."; @@ -4214,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "Azaltılmış pil kullanımı ile birlikte."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Tor veya VPN olmadan, IP adresiniz dosya sunucularına görülebilir."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Tor veya VPN olmadan, IP adresiniz bu XFTP aktarıcıları tarafından görülebilir: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Yanlış veritabanı parolası"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Yanlış anahtar veya bilinmeyen bağlantı - büyük olasılıkla bu bağlantı silinmiştir."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Yanlış parola!"; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 488a2b1c82..7cb4270d5b 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -389,6 +389,9 @@ /* member role */ "admin" = "адмін"; +/* feature role */ +"admins" = "адміністратори"; + /* No comment provided by engineer. */ "Admins can block a member for all." = "Адміністратори можуть заблокувати користувача для всіх."; @@ -416,6 +419,9 @@ /* No comment provided by engineer. */ "All group members will remain connected." = "Всі учасники групи залишаться на зв'язку."; +/* feature role */ +"all members" = "всі учасники"; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Усі повідомлення будуть видалені - цю дію не можна скасувати!"; @@ -443,6 +449,9 @@ /* No comment provided by engineer. */ "Allow disappearing messages only if your contact allows it to you." = "Дозволяйте зникати повідомленням, тільки якщо контакт дозволяє вам це робити."; +/* No comment provided by engineer. */ +"Allow downgrade" = "Дозволити пониження версії"; + /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Дозволяйте безповоротне видалення повідомлень, тільки якщо контакт дозволяє вам це зробити. (24 години)"; @@ -464,6 +473,9 @@ /* No comment provided by engineer. */ "Allow to send files and media." = "Дозволяє надсилати файли та медіа."; +/* No comment provided by engineer. */ +"Allow to send SimpleX links." = "Дозволити надсилати посилання SimpleX."; + /* No comment provided by engineer. */ "Allow to send voice messages." = "Дозволити надсилати голосові повідомлення."; @@ -500,6 +512,9 @@ /* pref value */ "always" = "завжди"; +/* No comment provided by engineer. */ +"Always use private routing." = "Завжди використовуйте приватну маршрутизацію."; + /* No comment provided by engineer. */ "Always use relay" = "Завжди використовуйте реле"; @@ -707,6 +722,12 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Не вдається отримати файл"; +/* snd error text */ +"Capacity exceeded - recipient did not receive previously sent messages." = "Перевищено ліміт - одержувач не отримав раніше надіслані повідомлення."; + +/* No comment provided by engineer. */ +"Cellular" = "Стільниковий"; + /* No comment provided by engineer. */ "Change" = "Зміна"; @@ -840,6 +861,9 @@ /* No comment provided by engineer. */ "Confirm database upgrades" = "Підтвердити оновлення бази даних"; +/* No comment provided by engineer. */ +"Confirm files from unknown servers." = "Підтвердити файли з невідомих серверів."; + /* No comment provided by engineer. */ "Confirm network settings" = "Підтвердьте налаштування мережі"; @@ -1308,6 +1332,9 @@ /* No comment provided by engineer. */ "Desktop devices" = "Настільні пристрої"; +/* snd error text */ +"Destination server error: %@" = "Помилка сервера призначення: %@"; + /* No comment provided by engineer. */ "Develop" = "Розробник"; @@ -1386,6 +1413,12 @@ /* No comment provided by engineer. */ "Do not send history to new members." = "Не надсилайте історію новим користувачам."; +/* 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 private routing." = "НЕ використовуйте приватну маршрутизацію."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "НЕ використовуйте SimpleX для екстрених викликів."; @@ -1401,6 +1434,9 @@ /* No comment provided by engineer. */ "Downgrade and open chat" = "Пониження та відкритий чат"; +/* chat item action */ +"Download" = "Завантажити"; + /* No comment provided by engineer. */ "Download failed" = "Не вдалося завантажити"; @@ -1476,6 +1512,9 @@ /* enabled status */ "enabled" = "увімкнено"; +/* No comment provided by engineer. */ +"Enabled for" = "Увімкнено для"; + /* enabled status */ "enabled for contact" = "увімкнено для контакту"; @@ -1821,6 +1860,9 @@ /* No comment provided by engineer. */ "File: %@" = "Файл: %@"; +/* No comment provided by engineer. */ +"Files" = "Файли"; + /* No comment provided by engineer. */ "Files & media" = "Файли та медіа"; @@ -1830,6 +1872,9 @@ /* No comment provided by engineer. */ "Files and media are prohibited in this group." = "Файли та медіа в цій групі заборонені."; +/* No comment provided by engineer. */ +"Files and media not allowed" = "Файли та медіафайли заборонені"; + /* No comment provided by engineer. */ "Files and media prohibited!" = "Файли та медіа заборонені!"; @@ -1869,6 +1914,27 @@ /* No comment provided by engineer. */ "For console" = "Для консолі"; +/* chat item action */ +"Forward" = "Пересилання"; + +/* No comment provided by engineer. */ +"Forward and save messages" = "Пересилання та збереження повідомлень"; + +/* No comment provided by engineer. */ +"forwarded" = "переслано"; + +/* No comment provided by engineer. */ +"Forwarded" = "Переслано"; + +/* No comment provided by engineer. */ +"Forwarded from" = "Переслано з"; + +/* snd error text */ +"Forwarding server: %@\nDestination server error: %@" = "Сервер переадресації: %1$@\nПомилка сервера призначення: %2$@"; + +/* snd error text */ +"Forwarding server: %@\nError: %@" = "Сервер переадресації: %1$@\nПомилка: %2$@"; + /* No comment provided by engineer. */ "Found desktop" = "Знайдено робочий стіл"; @@ -1947,6 +2013,9 @@ /* No comment provided by engineer. */ "Group members can send files and media." = "Учасники групи можуть надсилати файли та медіа."; +/* No comment provided by engineer. */ +"Group members can send SimpleX links." = "Учасники групи можуть надсилати посилання SimpleX."; + /* No comment provided by engineer. */ "Group members can send voice messages." = "Учасники групи можуть надсилати голосові повідомлення."; @@ -2088,6 +2157,9 @@ /* No comment provided by engineer. */ "In reply to" = "У відповідь на"; +/* No comment provided by engineer. */ +"In-call sounds" = "Звуки вхідного дзвінка"; + /* No comment provided by engineer. */ "Incognito" = "Інкогніто"; @@ -2418,6 +2490,9 @@ /* No comment provided by engineer. */ "Message delivery receipts!" = "Підтвердження доставки повідомлення!"; +/* item status text */ +"Message delivery warning" = "Попередження про доставку повідомлення"; + /* No comment provided by engineer. */ "Message draft" = "Чернетка повідомлення"; @@ -2433,6 +2508,15 @@ /* notification */ "message received" = "повідомлення отримано"; +/* No comment provided by engineer. */ +"Message routing fallback" = "Запасний варіант маршрутизації повідомлень"; + +/* No comment provided by engineer. */ +"Message routing mode" = "Режим маршрутизації повідомлень"; + +/* No comment provided by engineer. */ +"Message source remains private." = "Джерело повідомлення залишається приватним."; + /* No comment provided by engineer. */ "Message text" = "Текст повідомлення"; @@ -2517,6 +2601,9 @@ /* No comment provided by engineer. */ "More improvements are coming soon!" = "Незабаром буде ще більше покращень!"; +/* No comment provided by engineer. */ +"More reliable network connection." = "Більш надійне з'єднання з мережею."; + /* item status description */ "Most likely this connection is deleted." = "Швидше за все, це з'єднання видалено."; @@ -2535,6 +2622,15 @@ /* No comment provided by engineer. */ "Network & servers" = "Мережа та сервери"; +/* No comment provided by engineer. */ +"Network connection" = "Підключення до мережі"; + +/* 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 settings" = "Налаштування мережі"; @@ -2613,6 +2709,9 @@ /* No comment provided by engineer. */ "No history" = "Немає історії"; +/* No comment provided by engineer. */ +"No network connection" = "Немає підключення до мережі"; + /* No comment provided by engineer. */ "No permission to record voice message" = "Немає дозволу на запис голосового повідомлення"; @@ -2759,9 +2858,15 @@ /* No comment provided by engineer. */ "Or show this code" = "Або покажіть цей код"; +/* No comment provided by engineer. */ +"Other" = "Інше"; + /* member role */ "owner" = "власник"; +/* feature role */ +"owners" = "власники"; + /* No comment provided by engineer. */ "Passcode" = "Пароль"; @@ -2885,15 +2990,27 @@ /* No comment provided by engineer. */ "Private filenames" = "Приватні імена файлів"; +/* No comment provided by engineer. */ +"Private message routing" = "Маршрутизація приватних повідомлень"; + +/* No comment provided by engineer. */ +"Private message routing 🚀" = "Маршрутизація приватних повідомлень 🚀"; + /* name of notes to self */ "Private notes" = "Приватні нотатки"; +/* No comment provided by engineer. */ +"Private routing" = "Приватна маршрутизація"; + /* No comment provided by engineer. */ "Profile and server connections" = "З'єднання профілю та сервера"; /* No comment provided by engineer. */ "Profile image" = "Зображення профілю"; +/* No comment provided by engineer. */ +"Profile images" = "Зображення профілю"; + /* No comment provided by engineer. */ "Profile name" = "Назва профілю"; @@ -2927,15 +3044,24 @@ /* No comment provided by engineer. */ "Prohibit sending files and media." = "Заборонити надсилання файлів і медіа."; +/* No comment provided by engineer. */ +"Prohibit sending SimpleX links." = "Заборонити надсилання посилань SimpleX."; + /* No comment provided by engineer. */ "Prohibit sending voice messages." = "Заборонити надсилання голосових повідомлень."; /* No comment provided by engineer. */ "Protect app screen" = "Захистіть екран програми"; +/* No comment provided by engineer. */ +"Protect IP address" = "Захист IP-адреси"; + /* No comment provided by engineer. */ "Protect your chat profiles with a password!" = "Захистіть свої профілі чату паролем!"; +/* No comment provided by engineer. */ +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Захистіть свою IP-адресу від ретрансляторів повідомлень, обраних вашими контактами.\nУвімкніть у налаштуваннях *Мережа та сервери*."; + /* No comment provided by engineer. */ "Protocol timeout" = "Тайм-аут протоколу"; @@ -3014,6 +3140,9 @@ /* No comment provided by engineer. */ "Recent history and improved [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." = "Нещодавня історія та покращення [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)."; +/* No comment provided by engineer. */ +"Recipient(s) can't see who this message is from." = "Одержувач(и) не бачить, від кого це повідомлення."; + /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Одержувачі бачать оновлення, коли ви їх вводите."; @@ -3158,6 +3287,9 @@ /* No comment provided by engineer. */ "Run chat" = "Запустити чат"; +/* No comment provided by engineer. */ +"Safely receive files" = "Безпечне отримання файлів"; + /* No comment provided by engineer. */ "Safer groups" = "Безпечніші групи"; @@ -3209,6 +3341,18 @@ /* No comment provided by engineer. */ "Save welcome message?" = "Зберегти вітальне повідомлення?"; +/* No comment provided by engineer. */ +"saved" = "збережено"; + +/* No comment provided by engineer. */ +"Saved" = "Збережено"; + +/* No comment provided by engineer. */ +"Saved from" = "Збережено з"; + +/* No comment provided by engineer. */ +"saved from %@" = "збережено з %@"; + /* message info title */ "Saved message" = "Збережене повідомлення"; @@ -3302,6 +3446,12 @@ /* No comment provided by engineer. */ "Send live message" = "Надіслати живе повідомлення"; +/* No comment provided by engineer. */ +"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Надсилайте повідомлення напряму, якщо IP-адреса захищена, а ваш сервер або сервер призначення не підтримує приватну маршрутизацію."; + +/* No comment provided by engineer. */ +"Send messages directly when your or destination server does not support private routing." = "Надсилайте повідомлення напряму, якщо ваш сервер або сервер призначення не підтримує приватну маршрутизацію."; + /* No comment provided by engineer. */ "Send notifications" = "Надсилати сповіщення"; @@ -3365,6 +3515,9 @@ /* No comment provided by engineer. */ "Sent messages will be deleted after set time." = "Надіслані повідомлення будуть видалені через встановлений час."; +/* srv error text. */ +"Server address is incompatible with network settings." = "Адреса сервера несумісна з налаштуваннями мережі."; + /* server test error */ "Server requires authorization to create queues, check password" = "Сервер вимагає авторизації для створення черг, перевірте пароль"; @@ -3374,6 +3527,9 @@ /* No comment provided by engineer. */ "Server test failed!" = "Тест сервера завершився невдало!"; +/* srv error text */ +"Server version is incompatible with network settings." = "Серверна версія несумісна з мережевими налаштуваннями."; + /* No comment provided by engineer. */ "Servers" = "Сервери"; @@ -3416,6 +3572,9 @@ /* No comment provided by engineer. */ "Settings" = "Налаштування"; +/* No comment provided by engineer. */ +"Shape profile images" = "Сформуйте зображення профілю"; + /* chat item action */ "Share" = "Поділіться"; @@ -3437,6 +3596,9 @@ /* No comment provided by engineer. */ "Share with contacts" = "Поділіться з контактами"; +/* No comment provided by engineer. */ +"Show → on messages sent via private routing." = "Показувати → у повідомленнях, надісланих через приватну маршрутизацію."; + /* No comment provided by engineer. */ "Show calls in phone history" = "Показувати дзвінки в історії дзвінків"; @@ -3446,6 +3608,9 @@ /* No comment provided by engineer. */ "Show last messages" = "Показати останні повідомлення"; +/* No comment provided by engineer. */ +"Show message status" = "Показати статус повідомлення"; + /* No comment provided by engineer. */ "Show preview" = "Показати попередній перегляд"; @@ -3476,6 +3641,12 @@ /* chat feature */ "SimpleX links" = "Посилання SimpleX"; +/* No comment provided by engineer. */ +"SimpleX links are prohibited in this group." = "У цій групі заборонені посилання на SimpleX."; + +/* No comment provided by engineer. */ +"SimpleX links not allowed" = "Посилання SimpleX заборонені"; + /* No comment provided by engineer. */ "SimpleX Lock" = "SimpleX Lock"; @@ -3512,6 +3683,9 @@ /* notification title */ "Somebody" = "Хтось"; +/* No comment provided by engineer. */ +"Square, circle, or anything in between." = "Квадрат, коло або щось середнє між ними."; + /* chat item text */ "standard end-to-end encryption" = "стандартне наскрізне шифрування"; @@ -3644,6 +3818,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 will ask to confirm downloads from unknown file servers (except .onion)." = "Програма попросить підтвердити завантаження з невідомих файлових серверів (крім .onion)."; + /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Спроба змінити пароль до бази даних не була завершена."; @@ -3764,6 +3941,9 @@ /* No comment provided by engineer. */ "To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Щоб захистити вашу інформацію, увімкніть SimpleX Lock.\nПеред увімкненням цієї функції вам буде запропоновано пройти автентифікацію."; +/* No comment provided by engineer. */ +"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Щоб захистити вашу IP-адресу, приватна маршрутизація використовує ваші SMP-сервери для доставки повідомлень."; + /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Щоб записати голосове повідомлення, будь ласка, надайте дозвіл на використання мікрофону."; @@ -3848,6 +4028,12 @@ /* No comment provided by engineer. */ "Unknown error" = "Невідома помилка"; +/* No comment provided by engineer. */ +"unknown relays" = "невідомі реле"; + +/* No comment provided by engineer. */ +"Unknown servers!" = "Невідомі сервери!"; + /* No comment provided by engineer. */ "unknown status" = "невідомий статус"; @@ -3872,6 +4058,9 @@ /* No comment provided by engineer. */ "Unmute" = "Увімкнути звук"; +/* No comment provided by engineer. */ +"unprotected" = "незахищені"; + /* No comment provided by engineer. */ "Unread" = "Непрочитане"; @@ -3941,6 +4130,12 @@ /* No comment provided by engineer. */ "Use only local notifications?" = "Використовувати лише локальні сповіщення?"; +/* No comment provided by engineer. */ +"Use private routing with unknown servers when IP address is not protected." = "Використовуйте приватну маршрутизацію з невідомими серверами, якщо IP-адреса не захищена."; + +/* No comment provided by engineer. */ +"Use private routing with unknown servers." = "Використовуйте приватну маршрутизацію з невідомими серверами."; + /* No comment provided by engineer. */ "Use server" = "Використовувати сервер"; @@ -4037,6 +4232,9 @@ /* No comment provided by engineer. */ "Voice messages are prohibited in this group." = "Голосові повідомлення в цій групі заборонені."; +/* No comment provided by engineer. */ +"Voice messages not allowed" = "Голосові повідомлення заборонені"; + /* No comment provided by engineer. */ "Voice messages prohibited!" = "Голосові повідомлення заборонені!"; @@ -4088,12 +4286,27 @@ /* No comment provided by engineer. */ "When available" = "За наявності"; +/* No comment provided by engineer. */ +"When connecting audio and video calls." = "При підключенні аудіо та відеодзвінків."; + +/* No comment provided by engineer. */ +"when IP hidden" = "коли IP приховано"; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Коли люди звертаються із запитом на підключення, ви можете прийняти або відхилити його."; /* No comment provided by engineer. */ "When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Коли ви ділитеся з кимось своїм профілем інкогніто, цей профіль буде використовуватися для груп, до яких вас запрошують."; +/* No comment provided by engineer. */ +"WiFi" = "WiFi"; + +/* No comment provided by engineer. */ +"Will be enabled in direct chats!" = "Буде ввімкнено в прямих чатах!"; + +/* No comment provided by engineer. */ +"Wired ethernet" = "Дротова мережа Ethernet"; + /* No comment provided by engineer. */ "With encrypted files and media." = "З зашифрованими файлами та медіа."; @@ -4103,9 +4316,18 @@ /* No comment provided by engineer. */ "With reduced battery usage." = "З меншим споживанням заряду акумулятора."; +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to file servers." = "Без Tor або VPN ваша IP-адреса буде видимою для файлових серверів."; + +/* No comment provided by engineer. */ +"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Без Tor або VPN ваша IP-адреса буде видимою для цих XFTP-ретрансляторів: %@."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Неправильний пароль до бази даних"; +/* snd error text */ +"Wrong key or unknown connection - most likely this connection is deleted." = "Неправильний ключ або невідоме з'єднання - швидше за все, це з'єднання видалено."; + /* No comment provided by engineer. */ "Wrong passphrase!" = "Неправильний пароль!"; @@ -4115,6 +4337,9 @@ /* pref value */ "yes" = "так"; +/* No comment provided by engineer. */ +"you" = "ти"; + /* No comment provided by engineer. */ "You" = "Ти"; 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 b0557e2f67..1f7f55fb53 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 @@ -931,6 +931,20 @@ object ChatController { return null } + suspend fun apiContactQueueInfo(rh: Long?, contactId: Long): Pair? { + val r = sendCmd(rh, CC.APIContactQueueInfo(contactId)) + if (r is CR.QueueInfoR) return Pair(r.rcvMsgInfo, r.queueInfo) + apiErrorAlert("apiContactQueueInfo", generalGetString(MR.strings.error), r) + return null + } + + suspend fun apiGroupMemberQueueInfo(rh: Long?, groupId: Long, groupMemberId: Long): Pair? { + val r = sendCmd(rh, CC.APIGroupMemberQueueInfo(groupId, groupMemberId)) + if (r is CR.QueueInfoR) return Pair(r.rcvMsgInfo, r.queueInfo) + apiErrorAlert("apiGroupMemberQueueInfo", generalGetString(MR.strings.error), r) + return null + } + suspend fun apiSwitchContact(rh: Long?, contactId: Long): ConnectionStats? { val r = sendCmd(rh, CC.APISwitchContact(contactId)) if (r is CR.ContactSwitchStarted) return r.connectionStats @@ -2507,6 +2521,8 @@ sealed class CC { class ApiSetMemberSettings(val groupId: Long, val groupMemberId: Long, val memberSettings: GroupMemberSettings): CC() class APIContactInfo(val contactId: Long): CC() class APIGroupMemberInfo(val groupId: Long, val groupMemberId: Long): CC() + class APIContactQueueInfo(val contactId: Long): CC() + class APIGroupMemberQueueInfo(val groupId: Long, val groupMemberId: Long): CC() class APISwitchContact(val contactId: Long): CC() class APISwitchGroupMember(val groupId: Long, val groupMemberId: Long): CC() class APIAbortSwitchContact(val contactId: Long): CC() @@ -2652,6 +2668,8 @@ sealed class CC { is ApiSetMemberSettings -> "/_member settings #$groupId $groupMemberId ${json.encodeToString(memberSettings)}" is APIContactInfo -> "/_info @$contactId" is APIGroupMemberInfo -> "/_info #$groupId $groupMemberId" + is APIContactQueueInfo -> "/_queue info @$contactId" + is APIGroupMemberQueueInfo -> "/_queue info #$groupId $groupMemberId" is APISwitchContact -> "/_switch @$contactId" is APISwitchGroupMember -> "/_switch #$groupId $groupMemberId" is APIAbortSwitchContact -> "/_abort switch @$contactId" @@ -2790,6 +2808,8 @@ sealed class CC { is ApiSetMemberSettings -> "apiSetMemberSettings" is APIContactInfo -> "apiContactInfo" is APIGroupMemberInfo -> "apiGroupMemberInfo" + is APIContactQueueInfo -> "apiContactQueueInfo" + is APIGroupMemberQueueInfo -> "apiGroupMemberQueueInfo" is APISwitchContact -> "apiSwitchContact" is APISwitchGroupMember -> "apiSwitchGroupMember" is APIAbortSwitchContact -> "apiAbortSwitchContact" @@ -4197,6 +4217,7 @@ sealed class CR { @Serializable @SerialName("networkConfig") class NetworkConfig(val networkConfig: NetCfg): CR() @Serializable @SerialName("contactInfo") class ContactInfo(val user: UserRef, val contact: Contact, val connectionStats_: ConnectionStats? = null, val customUserProfile: Profile? = null): CR() @Serializable @SerialName("groupMemberInfo") class GroupMemberInfo(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats_: ConnectionStats? = null): CR() + @Serializable @SerialName("queueInfo") class QueueInfoR(val user: UserRef, val rcvMsgInfo: RcvMsgInfo?, val queueInfo: QueueInfo): CR() @Serializable @SerialName("contactSwitchStarted") class ContactSwitchStarted(val user: UserRef, val contact: Contact, val connectionStats: ConnectionStats): CR() @Serializable @SerialName("groupMemberSwitchStarted") class GroupMemberSwitchStarted(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR() @Serializable @SerialName("contactSwitchAborted") class ContactSwitchAborted(val user: UserRef, val contact: Contact, val connectionStats: ConnectionStats): CR() @@ -4368,6 +4389,7 @@ sealed class CR { is NetworkConfig -> "networkConfig" is ContactInfo -> "contactInfo" is GroupMemberInfo -> "groupMemberInfo" + is QueueInfoR -> "queueInfo" is ContactSwitchStarted -> "contactSwitchStarted" is GroupMemberSwitchStarted -> "groupMemberSwitchStarted" is ContactSwitchAborted -> "contactSwitchAborted" @@ -4529,6 +4551,7 @@ sealed class CR { is NetworkConfig -> json.encodeToString(networkConfig) is ContactInfo -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats_)}") is GroupMemberInfo -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats_)}") + is QueueInfoR -> withUser(user, "rcvMsgInfo: ${json.encodeToString(rcvMsgInfo)}\nqueueInfo: ${json.encodeToString(queueInfo)}\n") is ContactSwitchStarted -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}") is GroupMemberSwitchStarted -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats)}") is ContactSwitchAborted -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}") @@ -5786,3 +5809,52 @@ enum class UserNetworkType { OTHER -> generalGetString(MR.strings.network_type_other) } } + +@Serializable +data class RcvMsgInfo ( + val msgId: Long, + val msgDeliveryId: Long, + val msgDeliveryStatus: String, + val agentMsgId: Long, + val agentMsgMeta: String +) + +@Serializable +data class QueueInfo ( + val qiSnd: Boolean, + val qiNtf: Boolean, + val qiSub: QSub? = null, + val qiSize: Int, + val qiMsg: MsgInfo? = null +) + +@Serializable +data class QSub ( + val qSubThread: QSubThread, + val qDelivered: String? = null +) + +enum class QSubThread { + @SerialName("noSub") + NO_SUB, + @SerialName("subPending") + SUB_PENDING, + @SerialName("subThread") + SUB_THREAD, + @SerialName("prohibitSub") + PROHIBIT_SUB +} + +@Serializable +data class MsgInfo ( + val msgId: String, + val msgTs: Instant, + val msgType: MsgType, +) + +enum class MsgType { + @SerialName("message") + MESSAGE, + @SerialName("quota") + QUOTA +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt index 12b5747787..48ed0570a7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt @@ -42,6 +42,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import kotlinx.datetime.Clock +import kotlinx.serialization.encodeToString import java.io.File @Composable @@ -418,6 +419,19 @@ fun ChatInfoLayout( SectionView(title = stringResource(MR.strings.section_title_for_console)) { InfoRow(stringResource(MR.strings.info_row_local_name), chat.chatInfo.localDisplayName) InfoRow(stringResource(MR.strings.info_row_database_id), chat.chatInfo.apiId.toString()) + SectionItemView({ + withBGApi { + val info = controller.apiContactQueueInfo(chat.remoteHostId, chat.chatInfo.apiId) + if (info != null) { + AlertManager.shared.showAlertMsg( + title = generalGetString(MR.strings.message_queue_info), + text = queueInfoText(info) + ) + } + } + }) { + Text(stringResource(MR.strings.info_row_debug_delivery)) + } } } SectionBottomSpacer() @@ -798,6 +812,12 @@ fun showSyncConnectionForceAlert(syncConnectionForce: () -> Unit) { ) } +fun queueInfoText(info: Pair): String { + val (rcvMsgInfo, qInfo) = info + val msgInfo: String = if (rcvMsgInfo != null) json.encodeToString(rcvMsgInfo) else generalGetString(MR.strings.message_queue_info_none) + return generalGetString(MR.strings.message_queue_info_server_info).format(json.encodeToString(qInfo), msgInfo) +} + @Preview @Composable fun PreviewChatInfoLayout() { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 03d4e30a6c..71d82b5691 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.saveable.mapSaver import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.* import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.draw.drawWithCache import androidx.compose.ui.graphics.* import androidx.compose.ui.platform.* import dev.icerock.moko.resources.compose.painterResource @@ -620,7 +621,7 @@ fun ChatLayout( .fillMaxSize() .background(MaterialTheme.colors.background) .then(if (wallpaperImage != null) - Modifier.drawBehind { chatViewBackground(wallpaperImage, wallpaperType, backgroundColor, tintColor) } + Modifier.drawWithCache { chatViewBackground(wallpaperImage, wallpaperType, backgroundColor, tintColor) } else Modifier) .padding(contentPadding) 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 d546b51a93..931cc17872 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 @@ -86,7 +86,7 @@ fun getContactsToAdd(chatModel: ChatModel, search: String): List { .map { it.chatInfo } .filterIsInstance() .map { it.contact } - .filter { c -> c.ready && c.active && c.contactId !in memberContactIds && c.chatViewName.lowercase().contains(s) } + .filter { c -> c.sendMsgEnabled && !c.nextSendGrpInv && c.contactId !in memberContactIds && c.chatViewName.lowercase().contains(s) } .sortedBy { it.displayName.lowercase() } .toList() } 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 69b4de6803..b60c1f2496 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 @@ -203,7 +203,7 @@ fun GroupChatInfoLayout( scope.launch { listState.scrollToItem(0) } } val searchText = rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue()) } - val filteredMembers = remember(members) { derivedStateOf { members.filter { it.chatViewName.lowercase().contains(searchText.value.text.trim()) } } } + val filteredMembers = remember(members) { derivedStateOf { members.filter { it.chatViewName.lowercase().contains(searchText.value.text.trim().lowercase()) } } } // LALAL strange scrolling LazyColumnWithScrollBar( Modifier 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 e90efa7d1b..2799904b71 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 @@ -3,6 +3,7 @@ package chat.simplex.common.views.chat.group import InfoRow import SectionBottomSpacer import SectionDividerSpaced +import SectionItemView import SectionSpacer import SectionTextFooter import SectionView @@ -27,6 +28,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.common.model.* +import chat.simplex.common.model.ChatModel.controller import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.* import chat.simplex.common.views.helpers.* @@ -58,6 +60,7 @@ fun GroupMemberInfoView( if (chat != null) { val newRole = remember { mutableStateOf(member.memberRole) } GroupMemberInfoLayout( + rhId = rhId, groupInfo, member, connStats, @@ -219,6 +222,7 @@ fun removeMemberDialog(rhId: Long?, groupInfo: GroupInfo, member: GroupMember, c @Composable fun GroupMemberInfoLayout( + rhId: Long?, groupInfo: GroupInfo, member: GroupMember, connStats: MutableState, @@ -397,6 +401,19 @@ fun GroupMemberInfoLayout( SectionView(title = stringResource(MR.strings.section_title_for_console)) { InfoRow(stringResource(MR.strings.info_row_local_name), member.localDisplayName) InfoRow(stringResource(MR.strings.info_row_database_id), member.groupMemberId.toString()) + SectionItemView({ + withBGApi { + val info = controller.apiGroupMemberQueueInfo(rhId, groupInfo.apiId, member.groupMemberId) + if (info != null) { + AlertManager.shared.showAlertMsg( + title = generalGetString(MR.strings.message_queue_info), + text = queueInfoText(info) + ) + } + } + }) { + Text(stringResource(MR.strings.info_row_debug_delivery)) + } } } SectionBottomSpacer() @@ -644,6 +661,7 @@ fun blockMemberForAll(rhId: Long?, gInfo: GroupInfo, member: GroupMember, blocke fun PreviewGroupMemberInfoLayout() { SimpleXTheme { GroupMemberInfoLayout( + rhId = null, groupInfo = GroupInfo.sampleData, member = GroupMember.sampleData, connStats = remember { mutableStateOf(null) }, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt index a48bb2bb12..0ce9ba32fc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt @@ -154,13 +154,7 @@ fun CIFileView( FileProtocol.SMP -> progressIndicator() FileProtocol.LOCAL -> {} } - is CIFileStatus.SndComplete -> { - if ((file.forwardingAllowed() || (chatModel.connectedToRemote() && CIFile.cachedRemoteFileRequests[file.fileSource] == true))) { - fileIcon() - } else { - fileIcon(innerIcon = painterResource(MR.images.ic_check_filled)) - } - } + is CIFileStatus.SndComplete -> fileIcon(innerIcon = painterResource(MR.images.ic_check_filled)) is CIFileStatus.SndCancelled -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) is CIFileStatus.SndError -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) is CIFileStatus.RcvInvitation -> 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 330003b743..8549f6abe2 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 @@ -537,6 +537,7 @@ suspend fun exportChatArchive( if (!m.chatDbChanged.value) { controller.apiSaveAppSettings(AppSettings.current.prepareForExport()) } + wallpapersDir.mkdirs() m.controller.apiExportArchive(config) if (storagePath == null) { deleteOldArchive(m) @@ -592,6 +593,7 @@ private fun importArchive( withLongRunningApi { try { m.controller.apiDeleteStorage() + wallpapersDir.mkdirs() try { val config = ArchiveConfig(archivePath, parentTempDirectory = databaseExportDir.toString()) val archiveErrors = m.controller.apiImportArchive(config) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt index 89796baf4e..8921685cd6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatWallpaper.kt @@ -1,12 +1,13 @@ package chat.simplex.common.views.helpers +import androidx.compose.ui.draw.CacheDrawScope +import androidx.compose.ui.draw.DrawResult +import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.* -import androidx.compose.ui.graphics.drawscope.DrawScope -import androidx.compose.ui.graphics.drawscope.clipRect +import androidx.compose.ui.graphics.drawscope.* import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.unit.IntOffset -import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.* import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* @@ -352,9 +353,17 @@ sealed class WallpaperType { } } -fun DrawScope.chatViewBackground(image: ImageBitmap, imageType: WallpaperType, background: Color, tint: Color) = clipRect { - val quality = FilterQuality.High - fun repeat(imageScale: Float) { +private fun drawToBitmap(image: ImageBitmap, imageScale: Float, tint: Color, size: Size, density: Float, layoutDirection: LayoutDirection): ImageBitmap { + val quality = if (appPlatform.isAndroid) FilterQuality.High else FilterQuality.Low + val drawScope = CanvasDrawScope() + val bitmap = ImageBitmap(size.width.toInt(), size.height.toInt()) + val canvas = Canvas(bitmap) + drawScope.draw( + density = Density(density), + layoutDirection = layoutDirection, + canvas = canvas, + size = size, + ) { val scale = imageScale * density for (h in 0..(size.height / image.height / scale).roundToInt()) { for (w in 0..(size.width / image.width / scale).roundToInt()) { @@ -368,50 +377,71 @@ fun DrawScope.chatViewBackground(image: ImageBitmap, imageType: WallpaperType, b } } } + return bitmap +} - drawRect(background) - when (imageType) { - is WallpaperType.Preset -> repeat((imageType.scale ?: 1f) * imageType.predefinedImageScale) - is WallpaperType.Image -> when (val scaleType = imageType.scaleType ?: WallpaperScaleType.FILL) { - WallpaperScaleType.REPEAT -> repeat(imageType.scale ?: 1f) - WallpaperScaleType.FILL, WallpaperScaleType.FIT -> { - val scale = scaleType.contentScale.computeScaleFactor(Size(image.width.toFloat(), image.height.toFloat()), Size(size.width, size.height)) - val scaledWidth = (image.width * scale.scaleX).roundToInt() - val scaledHeight = (image.height * scale.scaleY).roundToInt() - // Large image will cause freeze - if (image.width > 4320 || image.height > 4320) return@clipRect +fun CacheDrawScope.chatViewBackground(image: ImageBitmap, imageType: WallpaperType, background: Color, tint: Color): DrawResult { + val imageScale = if (imageType is WallpaperType.Preset) { + (imageType.scale ?: 1f) * imageType.predefinedImageScale + } else if (imageType is WallpaperType.Image && imageType.scaleType == WallpaperScaleType.REPEAT) { + imageType.scale ?: 1f + } else { + 1f + } + val image = if (imageType is WallpaperType.Preset || (imageType is WallpaperType.Image && imageType.scaleType == WallpaperScaleType.REPEAT)) { + drawToBitmap(image, imageScale, tint, size, density, layoutDirection) + } else { + image + } - drawImage(image, dstOffset = IntOffset(x = ((size.width - scaledWidth) / 2).roundToInt(), y = ((size.height - scaledHeight) / 2).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) - if (scaleType == WallpaperScaleType.FIT) { - if (scaledWidth < size.width) { - // has black lines at left and right sides - var x = (size.width - scaledWidth) / 2 - while (x > 0) { - drawImage(image, dstOffset = IntOffset(x = (x - scaledWidth).roundToInt(), y = ((size.height - scaledHeight) / 2).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) - x -= scaledWidth - } - x = size.width - (size.width - scaledWidth) / 2 - while (x < size.width) { - drawImage(image, dstOffset = IntOffset(x = x.roundToInt(), y = ((size.height - scaledHeight) / 2).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) - x += scaledWidth - } - } else { - // has black lines at top and bottom sides - var y = (size.height - scaledHeight) / 2 - while (y > 0) { - drawImage(image, dstOffset = IntOffset(x = ((size.width - scaledWidth) / 2).roundToInt(), y = (y - scaledHeight).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) - y -= scaledHeight - } - y = size.height - (size.height - scaledHeight) / 2 - while (y < size.height) { - drawImage(image, dstOffset = IntOffset(x = ((size.width - scaledWidth) / 2).roundToInt(), y = y.roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) - y += scaledHeight + return onDrawBehind { + val quality = if (appPlatform.isAndroid) FilterQuality.High else FilterQuality.Low + drawRect(background) + when (imageType) { + is WallpaperType.Preset -> drawImage(image) + is WallpaperType.Image -> when (val scaleType = imageType.scaleType ?: WallpaperScaleType.FILL) { + WallpaperScaleType.REPEAT -> drawImage(image) + WallpaperScaleType.FILL, WallpaperScaleType.FIT -> { + clipRect { + val scale = scaleType.contentScale.computeScaleFactor(Size(image.width.toFloat(), image.height.toFloat()), Size(size.width, size.height)) + val scaledWidth = (image.width * scale.scaleX).roundToInt() + val scaledHeight = (image.height * scale.scaleY).roundToInt() + // Large image will cause freeze + if (image.width > 4320 || image.height > 4320) return@clipRect + + drawImage(image, dstOffset = IntOffset(x = ((size.width - scaledWidth) / 2).roundToInt(), y = ((size.height - scaledHeight) / 2).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) + if (scaleType == WallpaperScaleType.FIT) { + if (scaledWidth < size.width) { + // has black lines at left and right sides + var x = (size.width - scaledWidth) / 2 + while (x > 0) { + drawImage(image, dstOffset = IntOffset(x = (x - scaledWidth).roundToInt(), y = ((size.height - scaledHeight) / 2).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) + x -= scaledWidth + } + x = size.width - (size.width - scaledWidth) / 2 + while (x < size.width) { + drawImage(image, dstOffset = IntOffset(x = x.roundToInt(), y = ((size.height - scaledHeight) / 2).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) + x += scaledWidth + } + } else { + // has black lines at top and bottom sides + var y = (size.height - scaledHeight) / 2 + while (y > 0) { + drawImage(image, dstOffset = IntOffset(x = ((size.width - scaledWidth) / 2).roundToInt(), y = (y - scaledHeight).roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) + y -= scaledHeight + } + y = size.height - (size.height - scaledHeight) / 2 + while (y < size.height) { + drawImage(image, dstOffset = IntOffset(x = ((size.width - scaledWidth) / 2).roundToInt(), y = y.roundToInt()), dstSize = IntSize(scaledWidth, scaledHeight), filterQuality = quality) + y += scaledHeight + } + } } } + drawRect(tint) } - drawRect(tint) } + is WallpaperType.Empty -> {} } - is WallpaperType.Empty -> {} } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt index c96a277fb8..94affad0e7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Section.kt @@ -1,6 +1,5 @@ import androidx.compose.foundation.* import androidx.compose.foundation.layout.* -import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -13,12 +12,15 @@ import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.* +import chat.simplex.common.model.NotificationsMode import chat.simplex.common.platform.onRightClick import chat.simplex.common.platform.windowWidth import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* +import chat.simplex.common.views.onboarding.SelectableCard import chat.simplex.common.views.usersettings.SettingsActionItemWithContent import chat.simplex.res.MR +import dev.icerock.moko.resources.compose.stringResource @Composable fun SectionView(title: String? = null, padding: PaddingValues = PaddingValues(), content: (@Composable ColumnScope.() -> Unit)) { @@ -76,6 +78,26 @@ fun SectionViewSelectable( SectionTextFooter(values.first { it.value == currentValue.value }.description) } +@Composable +fun SectionViewSelectableCards( + title: String?, + currentValue: State, + values: List>, + onSelected: (T) -> Unit, +) { + SectionView(title) { + Column(Modifier.padding(horizontal = DEFAULT_PADDING)) { + if (title != null) { + Text(title, Modifier.fillMaxWidth(), textAlign = TextAlign.Center) + Spacer(Modifier.height(DEFAULT_PADDING * 2f)) + } + values.forEach { item -> + SelectableCard(currentValue, item.value, item.title, item.description, onSelected) + } + } + } +} + @Composable fun SectionItemView( click: (() -> Unit)? = null, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt index f3a992d451..1a94676f79 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/migration/MigrateToDevice.kt @@ -594,6 +594,7 @@ private fun MutableState.importArchive(archivePath: String, n chatInitControllerRemovingDatabases() } controller.apiDeleteStorage() + wallpapersDir.mkdirs() try { val config = ArchiveConfig(archivePath, parentTempDirectory = databaseExportDir.toString()) val archiveErrors = controller.apiImportArchive(config) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt index 9124808959..61ecee74e4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.text.AnnotatedString import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -35,9 +36,15 @@ fun SetNotificationsMode(m: ChatModel) { Column(Modifier.padding(horizontal = DEFAULT_PADDING * 1f)) { Text(stringResource(MR.strings.onboarding_notifications_mode_subtitle), Modifier.fillMaxWidth(), textAlign = TextAlign.Center) Spacer(Modifier.height(DEFAULT_PADDING * 2f)) - NotificationButton(currentMode, NotificationsMode.OFF, MR.strings.onboarding_notifications_mode_off, MR.strings.onboarding_notifications_mode_off_desc) - NotificationButton(currentMode, NotificationsMode.PERIODIC, MR.strings.onboarding_notifications_mode_periodic, MR.strings.onboarding_notifications_mode_periodic_desc) - NotificationButton(currentMode, NotificationsMode.SERVICE, MR.strings.onboarding_notifications_mode_service, MR.strings.onboarding_notifications_mode_service_desc) + SelectableCard(currentMode, NotificationsMode.OFF, stringResource(MR.strings.onboarding_notifications_mode_off), annotatedStringResource(MR.strings.onboarding_notifications_mode_off_desc)) { + currentMode.value = NotificationsMode.OFF + } + SelectableCard(currentMode, NotificationsMode.PERIODIC, stringResource(MR.strings.onboarding_notifications_mode_periodic), annotatedStringResource(MR.strings.onboarding_notifications_mode_periodic_desc)){ + currentMode.value = NotificationsMode.PERIODIC + } + SelectableCard(currentMode, NotificationsMode.SERVICE, stringResource(MR.strings.onboarding_notifications_mode_service), annotatedStringResource(MR.strings.onboarding_notifications_mode_service_desc)){ + currentMode.value = NotificationsMode.SERVICE + } } Spacer(Modifier.fillMaxHeight().weight(1f)) Box(Modifier.fillMaxWidth().padding(bottom = DEFAULT_PADDING_HALF), contentAlignment = Alignment.Center) { @@ -54,22 +61,22 @@ fun SetNotificationsMode(m: ChatModel) { expect fun SetNotificationsModeAdditions() @Composable -private fun NotificationButton(currentMode: MutableState, mode: NotificationsMode, title: StringResource, description: StringResource) { +fun SelectableCard(currentValue: State, newValue: T, title: String, description: AnnotatedString, onSelected: (T) -> Unit) { TextButton( - onClick = { currentMode.value = mode }, - border = BorderStroke(1.dp, color = if (currentMode.value == mode) MaterialTheme.colors.primary else MaterialTheme.colors.secondary.copy(alpha = 0.5f)), + onClick = { onSelected(newValue) }, + border = BorderStroke(1.dp, color = if (currentValue.value == newValue) MaterialTheme.colors.primary else MaterialTheme.colors.secondary.copy(alpha = 0.5f)), shape = RoundedCornerShape(35.dp), ) { - Column(Modifier.padding(horizontal = 10.dp).padding(top = 4.dp, bottom = 8.dp)) { + Column(Modifier.padding(horizontal = 10.dp).padding(top = 4.dp, bottom = 8.dp).fillMaxWidth()) { Text( - stringResource(title), + title, style = MaterialTheme.typography.h3, fontWeight = FontWeight.Medium, - color = if (currentMode.value == mode) MaterialTheme.colors.primary else MaterialTheme.colors.secondary, + color = if (currentValue.value == newValue) MaterialTheme.colors.primary else MaterialTheme.colors.secondary, modifier = Modifier.padding(bottom = 8.dp).align(Alignment.CenterHorizontally), textAlign = TextAlign.Center ) - Text(annotatedStringResource(description), + Text(description, Modifier.align(Alignment.CenterHorizontally), fontSize = 15.sp, color = MaterialTheme.colors.onBackground, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt index 8b5fbd523f..84fe333ba8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/Appearance.kt @@ -95,11 +95,13 @@ object AppearanceScope { val backgroundColor = backgroundColor ?: wallpaperType?.defaultBackgroundColor(theme, MaterialTheme.colors.background) val tintColor = tintColor ?: wallpaperType?.defaultTintColor(theme) Column(Modifier - .drawBehind { + .drawWithCache { if (wallpaperImage != null && wallpaperType != null && backgroundColor != null && tintColor != null) { chatViewBackground(wallpaperImage, wallpaperType, backgroundColor, tintColor) } else { - drawRect(themeBackgroundColor) + onDrawBehind { + drawRect(themeBackgroundColor) + } } } .padding(DEFAULT_PADDING_HALF) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt index d07fad8623..5898ccb657 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/NetworkAndServers.kt @@ -7,6 +7,7 @@ import SectionItemView import SectionItemWithValue import SectionView import SectionViewSelectable +import SectionViewSelectableCards import TextIconSpaced import androidx.compose.foundation.* import androidx.compose.foundation.layout.* @@ -555,7 +556,7 @@ private fun SMPProxyModePicker( Modifier.fillMaxWidth(), ) { AppBarTitle(stringResource(MR.strings.network_smp_proxy_mode_private_routing)) - SectionViewSelectable(null, smpProxyMode, values, updateSMPProxyMode) + SectionViewSelectableCards(null, smpProxyMode, values, updateSMPProxyMode) } } } @@ -592,7 +593,7 @@ private fun SMPProxyFallbackPicker( Modifier.fillMaxWidth(), ) { AppBarTitle(stringResource(MR.strings.network_smp_proxy_fallback_allow_downgrade)) - SectionViewSelectable(null, smpProxyFallback, values, updateSMPProxyFallback) + SectionViewSelectableCards(null, smpProxyFallback, values, updateSMPProxyFallback) } } } 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 1a63ceb87b..ef4edcf0cd 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -1835,4 +1835,25 @@ طبّق لِ ملء المقياس + لا شيء + توجيه الرسائل الخاصة 🚀 + اجعل محادثاتك تبدو مختلفة! + تلقي الملفات بأمان + واجهة المستخدم الفارسية + إعادة التعيين إلى سمة التطبيق + سمة التطبيق + تأكيد الملفات من خوادم غير معروفة. + إعادة التعيين إلى سمة المستخدم + معلومات قائمة انتظار الخادم: %1$s +\n +\nآخر رسالة تم استلامها: %2$s + تسليم التصحيح + معلومات قائمة انتظار الرسائل + احمِ عنوان IP الخاص بك من مُرحلات المُراسلة التي اختارتها جهات الاتصال الخاصة بك. +\nفعّل في إعدادات *الشبكة والخوادم*. + سمات دردشة جديدة + حدث خطأ أثناء تهيئة WebView. حدّث نظامك إلى الإصدار الجديد. يُرجى التواصل بالمطورين. +\nError: %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 d930a1b72b..df43d1459f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1401,6 +1401,7 @@ FOR CONSOLE Local name Database ID + Debug delivery Record updated at Sent at Created at @@ -1462,6 +1463,9 @@ Connection direct indirect (%1$s) + Message queue info + none + server queue info: %1$s\n\nlast received msg: %2$s Welcome message 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 7bb6aaa128..df264384a5 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -825,7 +825,7 @@ Protokollzeitüberschreitung PING-Intervall TCP-Keep-Alive aktivieren - Zurückkehren + Zurücksetzen Speichern Netzwerkeinstellungen aktualisieren? Die Aktualisierung der Einstellungen wird den Client wieder mit allen Servern verbinden. @@ -1385,7 +1385,7 @@ Nach ungelesenen und favorisierten Chats filtern. Das Senden von Empfangsbestätigungen an alle Kontakte in allen sichtbaren Chat-Profilen wird aktiviert. Das Senden von Bestätigungen an %d Kontakte ist deaktiviert - Diese Einstellungen gelten für Ihr aktuelles Profil + Diese Einstellungen gelten für Ihr aktuelles Chat-Profil Sie können in den Kontakt- und Gruppeneinstellungen überschrieben werden. Kontakte Bestätigungen deaktivieren\? @@ -1429,8 +1429,8 @@ An dieses Gruppenmitglied wird eine Verbindungsanfrage gesendet. Direkt verbinden\? Inkognito verbinden - Das aktuelle Profil nutzen - Ein neues Inkognito-Profil nutzen + Aktuelles Chat-Profil nutzen + Neues Inkognito-Profil nutzen App-Akkuverbrauch / Unbeschränkt , um Anrufe im Hintergrund zu führen.]]> Fügen Sie den erhaltenen Link ein, um sich mit Ihrem Kontakt zu verbinden… Es wird ein neues Zufallsprofil geteilt. @@ -1866,22 +1866,22 @@ Nie Unbekannte Relais Ungeschützt - Privates Routing mit unbekannten Servern nutzen. - Nutzen Sie kein privates Routing. + Sie nutzen privates Routing mit unbekannten Servern. + Sie nutzen KEIN privates Routing. Modus für das Nachrichten-Routing Ja Nein Wenn die IP-Adresse versteckt ist Fallback für das Nachrichten-Routing Nachrichtenstatus anzeigen - Herunterstufung erlauben - Immer privates Routing nutzen. - Senden Sie keine direkten Nachrichten, selbst wenn Ihr oder der Zielserver kein privates Routing unterstützt. + Herabstufung erlauben + Sie nutzen immer privates Routing. + Nachrichten werden nicht direkt versendet, selbst wenn Ihr oder der Zielserver kein privates Routing unterstützt. PRIVATES NACHRICHTEN-ROUTING - Nachrichten direkt versenden, wenn die IP-Adresse geschützt ist und Ihr oder der Zielserver kein privates Routing unterstützt. - Nachrichten direkt versenden, wenn Ihr oder der Zielserver kein privates Routing unterstützt. - Für die Auslieferung Ihrer Nachrichten wird privates Routing Ihrer SMP-Server genutzt, um Ihre IP-Adresse zu schützen. - Privates Routing mit unbekannten Servern nutzen, wenn die IP-Adresse nicht geschützt ist. + Nachrichten werden direkt versendet, wenn die IP-Adresse geschützt ist, und Ihr oder der Zielserver kein privates Routing unterstützt. + Nachrichten werden direkt versendet, wenn Ihr oder der Zielserver kein privates Routing unterstützt. + Zum Schutz Ihrer IP-Adresse, wird für die Nachrichten-Auslieferung privates Routing über Ihre konfigurierten SMP-Server genutzt. + Sie nutzen privates Routing mit unbekannten Servern, wenn Ihre IP-Adresse nicht geschützt ist. IP-Adresse schützen DATEIEN Die App wird bei unbekannten Datei-Servern nach einer Download-Bestätigung fragen (außer bei .onion oder wenn ein SOCKS-Proxy aktiviert ist). @@ -1918,4 +1918,25 @@ Guten Nachmittag! Guten Morgen! Farben für die dunkle Variante + App-Design + Persische Bedienoberfläche + Auf das Benutzer-spezifische Design zurücksetzen + Fehler bei der Initialisierung von Webview. Aktualisieren Sie Ihr System auf die neue Version. Bitte kontaktieren Sie die Entwickler. +\nFehler: %s + Auf das App-Design zurücksetzen + Dateien von unbekannten Servern bestätigen. + Verbesserte Zustellung von Nachrichten + Gestalten Sie Ihre Chats unterschiedlich! + Neue Chat-Designs + Privates Nachrichten-Routing 🚀 + Schützen Sie Ihre IP-Adresse vor den Nachrichten-Relais , die Ihr Kontakt ausgewählt hat. +\nAktivieren Sie es in den *Netzwerk & Server* Einstellungen. + Dateien sicher empfangen + Mit reduziertem Akkuverbrauch. + Keine Information + Debugging-Zustellung + Nachrichten-Warteschlangen-Information + Server-Warteschlangen-Information: %1$s +\n +\nZuletzt empfangene Nachricht: %2$s \ 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 3bf05bf793..0c013f0bbc 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -964,7 +964,7 @@ Guardar contraseña de perfil Contraseña para hacerlo visible Error al guardar contraseña de usuario - El retransmisor sólo se usa en caso de necesidad. Un tercero podría ver tu IP. + El servidor de retransmisión sólo se usa en caso de necesidad. Un tercero podría ver tu IP. El servidor de retransmisión protege tu IP pero puede ver la duración de la llamada. Introduce la contraseña Ocultar @@ -1769,7 +1769,7 @@ Forma de los perfiles Dar forma a las imágenes de perfil Cuadrada, circular o cualquier forma intermedia. - Capacidad excedida - el destinatario no ha recibido el mensaje previo. + Capacidad excedida - el destinatario no ha recibido los mensajes previos. Error del servidor de destino: %1$s Error: %1$s Servidor de reenvío: %1$s @@ -1784,13 +1784,13 @@ Enrutamiento de mensajes alternativo Modo de enrutamiento de mensajes No - Mostrar estado del mensaje + Estado del mensaje Usar enrutamiento privado con servidores desconocidos cuando la dirección IP no está protegida. Con IP oculta Si - Enviar los mensajes directamente cuando tu servidor o el de destino no soporten enrutamiento privado - Para proteger tu dirección IP, el enrutamiento privado usa tu servidor SMP para enviar mensajes. - NO enviar mensajes directos incluso si tu servidor o el de destino no soportan enrutamiento privado. + Enviar mensajes directamente cuando tu servidor o el de destino no admitan enrutamiento privado. + Para proteger tu dirección IP, el enrutamiento privado usa tus servidores SMP para enviar mensajes. + NO enviar mensajes directamente incluso si tu servidor o el de destino no soportan enrutamiento privado. Siempre Permitir versión anterior Usar siempre enrutamiento privado. @@ -1801,8 +1801,8 @@ Desprotegido Clave incorrecta o conexión desconocida - probablemente esta conexión fue eliminada Usar enrutamiento privado con servidores desconocidos. - Enviar los mensajes directamente cuando tu dirección IP está protegida y tu servidor o el de destino no soporten enrutamiento privado. - Servidores desconocidos! + Enviar mensajes directamente cuando tu dirección IP está protegida y tu servidor o el de destino no admitan enrutamiento privado. + ¡Servidores desconocidos! Sin Tor o VPN, tu dirección IP será visible para estos relés XFTP: \n%1$s. Proteger dirección IP @@ -1838,4 +1838,25 @@ Tema del perfil Listado del chat en ventana nueva Color imagen de fondo + información cola del servidor: %1$s +\n +\núltimo mensaje recibido: %2$s + Restablecer al tema de la app + Enrutamiento privado de mensajes 🚀 + Recibe archivos de forma segura + Mejora del envío de mensajes + Con uso reducido de la batería. + Tema de la app + Confirma archivos de servidores desconocidos. + Entrega de debug + ¡Cambia el aspecto de tus chats! + Nuevos temas de chat + Información cola de mensajes + ninguno + Protege tu dirección IP de los servidores de retransmisión elegidos por tus contactos. +\nActívalo en ajustes de *Servidores y Redes*. + Restablecer al tema del usuario + Error al inicializar WebView. Actualiza tu sistema a la última versión. Por favor, ponte en contacto con los desarrolladores. +\nError: %s + Interfaz en persa \ 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 4e15bb27f8..10daae4c52 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml @@ -613,7 +613,7 @@ استفاده از میزبان‌های onion. را روی «خیر» تنظیم کنید اگر پروکسی SOCKS از آنها پشتیبانی نمی‌کند.]]> سفارشی کردن تم نسخه برنامه - رنگ‌های تم + رنگ‌های رابط کاربری نسخه هسته: v%s simplexmq: v%s (%2s) اعلان‌ها از کار خواهند افتاد تا زمانی که برنامه را دوباره راه‌اندازی کنید @@ -1803,4 +1803,54 @@ بدون تور یا VPN، نشانی IP شما برای سرورهای پرونده قابل رویت خواهد بود. بدون تور یا VPN، نشانی IP شما برای این واسطه‌های XFTP قابل رویت خواهد بود: \n%1$s. + هیچ + تحویل پیام بهبود یافته + رابط کاربری فارسی + با استفاده باتری کاهش یافته. + اشکال‌زدایی تحویل + اطلاعات صف پیام + تم برنامه + تایید پرونده‌ها از سرورهای ناشناخته. + اطلاعات صف سرور: %1$s +\n +\nآخرین پیام دریافتی: %2$s + نمایش فهرست گپ در پنجره جدید + حالت تاریک + سیاه + حالت رنگ + تاریک + رنگ‌های حالت تاریک + روشن + بازنشاندن رنگ + سیستم + خطا در مقداردهی اولیه WebView. سیستم خود را به نسخه جدید به روز کنید. لطفا با توسعه‌دهنگان تماس بگیرید. +\nخطا: 9%s + رنگ‌های گپ + تم گپ + تم نمایه + پس‌زمینه کاغذدیواری + ابتدایی اضافی ۲ + تنظیمات پیشرفته + پر کردن + گنجاندن + عصر به خیر! + صبح به خیر! + پاسخ دریافتی + حذف تصویر + تکرار + مقیاس + پاسخ ارسالی + ابتدایی کاغذدیواری + تعیین تم پیش‌فرض + بازنشاندن به تم برنامه + بازنشاندن به تم کاربر + تمام حالت‌های رنگ + اعمال بر + حالت روشن + مسیریابی پیام خصوصی 🚀 + ظاهر گپ‌های خود را متمایز کنید! + تم‌های جدید گپ + از نشانی IP خود در برابر واسطه‌های پیام‌رسانی انتخاب شده توسط مخاطبانتان محافظت کنید. +\nدر تنظیمات «شبکه و سرورها» فعال کنید. + دریافت امن پرونده‌ها \ No newline at end of file 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 2d279412cc..a9d9f0188b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -1120,7 +1120,7 @@ Vous ne perdrez pas vos contacts si vous supprimez votre adresse ultérieurement. Adresse SimpleX Vous pouvez accepter ou refuser les demandes de contacts. - COULEURS DU THÈME + COULEURS DE L\'INTERFACE Vos contacts resteront connectés. Partager l\'adresse avec vos contacts \? Partager avec vos contacts @@ -1808,4 +1808,54 @@ Utiliser le routage privé avec des serveurs inconnus. Sans Tor ou un VPN, votre adresse IP sera visible par ces relais XFTP : \n%1$s. + Accentuation supplémentaire 2 + Paramètres avancés + Noir + Appliquer à + Debug de la distribution + Remplir + Bonjour Alice ! + Amélioration de la transmission des messages + Donnez à vos discussions un style différent ! + Info sur la file des messages + Nouveaux thèmes de discussion + aucun + Routage privé des messages 🚀 + Protégez votre adresse IP des relais de messagerie choisis par vos contacts. +\nActivez-le dans les paramètres *Réseau et serveurs*. + Réinitialiser au thème de l\'utilisateur + Afficher la liste des chats dans une nouvelle fenêtre + Teinte du fond d\'écran + Fond d\'écran + info sur la file du serveur : %1$s +\n +\ndernier message reçu : %2$s + Thème de l\'app + Mode de couleur + Sombre + Couleurs du mode sombre + Salut Bob ! + Réponse reçue + Retirer l\'image + Réinitialiser la couleur + Réponse envoyée + Répéter + Dimension + Tous les modes de couleur + Mode sombre + Adapter + Mode clair + Réinitialiser au thème de l\'app + Définir le thème par défaut + Confirmer les fichiers provenant de serveurs inconnus. + UI en persan + Réception de fichiers en toute sécurité + Consommation réduite de la batterie. + Couleurs de la discussion + Thème de la discussion + Thème de profil + Clair + Système + Erreur d\'initialisation de WebView. Mettez votre système à jour avec la nouvelle version. Veuillez contacter les développeurs. +\nErreur : %s \ No newline at end of file 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 401d426b79..94db4f4618 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -348,9 +348,9 @@ Üzenet törlése? Függő kapcsolatfelvételi kérések törlése? Adatbázis titkosítva! - Üzenetek törlése? + Üzenetek kiürítése? Visszatérés a korábbi adatbázis verzióra - Üzenetek törlése + Üzenetek kiürítése Adatbázis titkosítási jelmondat frissítve lesz. Kapcsolódás automatikusan Adatbázis hiba @@ -813,7 +813,7 @@ Csak a csoporttulajdonosok módosíthatják a csoportbeállításokat. Nincsenek előzmények Érvénytelen QR-kód - Olvasottként jelölés + Olvasottnak jelölés ÉLŐ Olvasatlannak jelölés Több @@ -1360,7 +1360,7 @@ %1$s.]]> Profil felfedése Ez a hivatkozás nem érvényes kapcsolati hivatkozás! - A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy szkennelje be) az ismerőse eszközén lévő kódot. + A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal. A csevegési adatbázis legfrissebb verzióját CSAK egy eszközön kell használnia, ellenkező esetben előfordulhat, hogy az üzeneteket nem fogja megkapni valamennyi ismerősétől. Ez a beállítás a jelenlegi csevegési profilban lévő üzenetekre érvényes Meghívást kapott a csoportba. Csatlakozzon, hogy kapcsolatba léphessen a csoport tagjaival. @@ -1597,7 +1597,7 @@ Privát jegyzetek Hiba a privát jegyzetek törlésekor Hiba az üzenet létrehozásakor - Privát jegyzetek törlése? + Privát jegyzetek kiürítése? Létrehozva ekkor: Mentett üzenet Megosztva ekkor: %s @@ -1679,7 +1679,7 @@ Csevegés indítása Nem szabad ugyanazt az adatbázist használni egyszerre két eszközön.]]> Erősítse meg, hogy emlékszik az adatbázis jelmondatára az átköltöztetéshez. - Átköltöztetés egy másik eszközről opciót az új eszközön és szkennelje be a QR-kódot.]]> + Átköltöztetés egy másik eszközről opciót az új eszközön és olvassa be a QR-kódot.]]> Átköltöztetés véglegesítése Átköltöztetés véglegesítése egy másik eszközön. Letöltés előkészítése @@ -1707,8 +1707,8 @@ Ez a csevegés végpontok közötti titkosítással védett. Átköltöztetési párbeszédablak megnyitása Ez a csevegés végpontok közötti kvantumrezisztens tikosítással védett. - végpontok közötti titkosítással és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.]]> - végpontok közötti kvantumrezisztens titkosítással és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.]]> + végpontok közötti titkosítással, sérülés utáni titkosság-védelemmel és -helyreállítással, továbbá visszautasítással védi.]]> + végpontok közötti kvantumrezisztens titkosítással, sérülés utáni titkosság-védelemmel és -helyreállítással, továbbá visszautasítással védi.]]> Hiba az értesítés megjelenítésekor, lépjen kapcsolatba a fejlesztőkkel. Keresse meg ezt az engedélyt az Android beállításaiban, és adja meg kézzel. Engedélyezés a beállításokban @@ -1832,4 +1832,24 @@ Háttérkép kiemelés Háttérkép háttérszíne 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 üzenetküldő átjátszókkal szemben. +\nEngedélyezze a beállításokban a *Hálózat és kiszolgálók* menüpontban. + Ismeretlen kiszolgálókról származó fájlok jóváhagyása. + Javított üzenetkézbesítés + Alkalmazás témájának visszaállítása + Tegye egyedivé a csevegéseit! + Új csevegési témák + Privát üzenet útválasztás 🚀 + Fájlok biztonságos fogadása + Csökkentett akkumulátor-használattal. + Hiba a WebView inicializálásában. Frissítse rendszerét az új verzióra. Kérjük, lépjen kapcsolatba a fejlesztőkkel. +\nHiba: %s + Felhasználó által létrehozott téma visszaállítása + Üzenet várakoztatási információ + nincs + Hibakeresés kézbesítés + Kiszolgáló várakoztatási infó: %1$s +\nUtoljára kézbesített üzenet: %2$s \ 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 eb72c9b851..2ea3c53514 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -1837,4 +1837,25 @@ Buon pomeriggio! Buongiorno! Retro dello sfondo + Instradamento privato dei messaggi 🚀 + Proteggi il tuo indirizzo IP dai relay di messaggistica scelti dai tuoi contatti. +\nAttivalo nelle impostazioni *Rete e server*. + Errore di inizializzazione di WebView. Aggiorna il sistema ad una nuova versione. Contatta gli sviluppatori. +\nErrore: %s + Tema dell\'app + Ripristina al tema dell\'app + Ripristina al tema dell\'utente + Conferma i file da server sconosciuti. + Consegna dei messaggi migliorata + Cambia l\'aspetto delle tue chat! + Nuovi temi delle chat + Interfaccia in persiano + Ricevi i file in sicurezza + Con consumo di batteria ridotto. + Info coda messaggi + nessuna + info coda server: %1$s +\n +\nultimo msg ricevuto: %2$s + Debug della consegna \ No newline at end of file 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 ceb8ab1664..41f1d0d6a8 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -1778,4 +1778,22 @@ 常時プライベートルーティングを使用 プライベートメッセージルーティング メッセージステータスを表示 + システム + ブラック + 色設定 + ダーク + ダークモードカラー + ライト + アプリのテーマ + ダークモード + ライトモード + 適用先 + 追加のアクセント2 + 高度な設定 + こんにちは! + おはよう! + 壁紙のアクセント + 壁紙の背景 + チャットカラー + チャットテーマ \ 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 d741001717..4fa3ba4f51 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -1164,7 +1164,7 @@ Zorg ervoor dat het bestand de juiste YAML-syntaxis heeft. Exporteer het thema om een voorbeeld te hebben van de themabestandsstructuur. Database openen… Gebruikershandleiding.]]> - THEMA KLEUREN + INTERFACE KLEUREN U kunt uw adres delen als een link of QR-code - iedereen kan verbinding met u maken. Alle app-gegevens worden verwijderd. Er wordt een leeg chatprofiel met de opgegeven naam gemaakt en de app wordt zoals gewoonlijk geopend. @@ -1806,4 +1806,54 @@ BESTANDEN Bescherm het IP-adres De app vraagt om downloads van onbekende bestandsservers te bevestigen (behalve .onion of wanneer SOCKS-proxy is ingeschakeld). + Fout bij het initialiseren van WebView. Update uw systeem naar de nieuwe versie. Neem contact op met ontwikkelaars. +\nFout: %s + Achtergrond accent + Vullen + Passen + Goedemiddag! + Goedemorgen! + Verwijder afbeelding + Schaal + Alle kleurmodi + Toepassen op + Lichte modus + Laat uw chats er anders uitzien! + Nieuwe chatthema\'s + Routing van privéberichten🚀 + Bevestig bestanden van onbekende servers. + Verbeterde bezorging van berichten + Perzische gebruikersinterface + Veilig bestanden ontvangen + Met verminderd batterijgebruik. + App thema + Terugzetten naar app thema + Terugzetten naar gebruikersthema + Donkere modus + Geavanceerde instellingen + Bescherm uw IP-adres tegen de berichtenrelais die door uw contacten zijn gekozen. +\nSchakel dit in in *Netwerk en servers*-instellingen. + Herhalen + Chatkleuren + Profiel thema + Chat thema + Extra accent 2 + Zwart + Kleur mode + Donker + Kleuren in donkere modus + Licht + Antwoord ontvangen + Kleur opnieuw instellen + Antwoord verzonden + Systeem + Wallpaper achtergrond + Stel het standaard thema in + Toon chatlijst in nieuw venster + geen + Foutopsporing bezorging + Informatie over berichtenwachtrij + informatie over serverwachtrij: %1$s +\n +\nlaatst ontvangen bericht: %2$s \ 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 ea968cfb67..4853fdf127 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -1837,4 +1837,25 @@ Motyw czatu Tryb koloru Ciemny + Błąd inicjacji WebView. Zaktualizuj swój system do nowej wersji. Proszę skontaktować się z deweloperami. +\nBłąd: %s + nic + Nowy motywy czatu + Trasowanie prywatnych wiadomości🚀 + Bezpiecznie otrzymuj pliki + Ulepszona dostawa wiadomości + Perski interfejs użytkownika + Potwierdzaj pliki z nieznanych serwerów. + Dostarczenie debugowania + Zrób wygląd Twoich czatów inny! + Chroni Twój adres IP przed przekaźnikami wiadomości wybranych przez Twoje kontakty. +\nWłącz w ustawianiach *Sieć i serwery* . + Informacje kolejki wiadomości + Informacje kolejki serwera: %1$s +\n +\nostatnia otrzymana wiadomość: %2$s + Ze zredukowanym zużyciem baterii. + Motyw aplikacji + Zresetuj do motywu aplikacji + Zresetuj do motywu użytkownika \ No newline at end of file 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 cb6187ee85..ae03ebd1ae 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml @@ -171,4 +171,153 @@ Elimină Elimină membru Elimini membrul? + Resetează la implicit + Resetează culoarea + Resetează culorile + Elimină imagine + Repetă încărcarea + apel respins + Elimini fraza de acces din Keystore? + Elimini fraza de acces din setări? + Repetă cererea de conectare? + Necesar + Reîncearcă + Primește fișiere în siguranță + Grupuri mai sigure + Restabilește + Reîmprospătează + Revoci fișierul? + Revocă + Renegociezi criptarea? + Resetează + Respinge + Salvează fraza de acces în setări + Salvează și actualizează profilul grupului + Revenire + Repetă cererea de alăturare? + Repornește conversația + salvat + Salvat de la %s + Salvează + Salvat + Salvat de la + Renegociază + Salvează servere + Servere WebRTC ICE salvate vor fi eliminate. + Salvează parola profilului + Salvează fraza de acces și deschide conversația + %s și %s + Renegociază criptarea + Salvează și notifică contactul + Salvează și notifică contactele + Salvează și notifică membrii grupului + Rulează când aplicația este pornită + Răspunde + Revocă fișierul + Salvează + Salvezi setările? + Salvezi preferințe? + Repornire + Restabilește copia de rezervă a bazei de date + Restabilești copia de rezervă a bazei de date? + Eroare la restabilirea bazei de date + %1$s eliminat + %s și %s conectați + Rol + Salvează + Arată + Respinge + Salvezi servere? + Apel respins + Mesaj salvat + Salvează arhiva + Repornește aplicația pentru a crea un nou profil + Salvează fraza de acces în Keystore + Salvează profilul grupului + Repetă + Trimite previzualizări ale link-ului + Setează frază de acces + Distribuie adresă + Trimis la + Secundar + Mesaj trimis + Setează preferințele grupului + trimis + Adresa serverului este incompatibilă cu setările de rețea. + Versiunea serverului este incompatibilă cu setările de rețea. + Trimițând prin + trimiterea de fișiere nu este acceptată încă + Scanează codul de securitate din aplicația contactului tău + Selectează contacte + Autodistrugere + Răspuns trimis + Distribuie media… + Distribuie mesaj… + Arată lista conversațiilor într-o fereastră nouă + Arată consola într-o fereastră nouă + Setează fraza de acces a bazei de date + Setează fraza de acces a bazei de date + setează adresă de contact nouă + %s (actual) + Cod de sesiune + Expeditorul a anulat transferul de fișiere. + Serverul necesită autorizație pentru a crea cozi, verifică parola + Distribuie + trimitere eșuată + Caută sau lipește link SimpleX + Setează numele de contact + Salvezi mesajul de bun venit? + Evaluare de securitate + Scanează cod QR de pe desktop + Caută + Trimite un mesaj live - se va actualiza pentru destinatar(i) în timp ce îl tastezi + Distribuie fișier + Trimite până la ultimele 100 de mesaje membrilor noi. + Bara de căutare acceptă link-uri de invitație. + secunde + Scanează de pe mobil + Mesaj trimis + Scanează cod QR + Trimite + Trimite întrebări și idei + Arată opțiuni dezvoltator + sec + Mesajele trimise vor fi șterse după timpul setat. + Serverul necesită autorizație pentru a încărca, verifică parola + Arată contact și mesaje + Distribuie fișier… + Setează numele de contact… + Trimite mesaj + Trimite mesaj temporar + (scanează sau lipește din clipboard) + Arată cod QR + Test server eșuat! + Arată: + Arată erori interne + secret + SETĂRI + %s conectat + setează imagine de profil + Trimis către: %s + SERVERE + Trimite mesaj live + %s descărcat + Distribui adresa cu contactele? + Arată previzualizare + trimite mesaj direct + Trimite mesaj direct pentru a te conecta + Selectează + Trimiterea de fișiere va fi oprită. + Trimite + Setări + Scanează cod + Cod de securitate + Trimite-ne email + Scanează codul QR al serverului + Distribuie contactelor + Arată + cod de securitate schimbat + Arată ultimul mesaj + Trimite mesaj direct + Setează tema implicită \ No newline at end of file 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 33b511c1e5..88dd4c2783 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -1249,7 +1249,7 @@ Запретить реакции на сообщения. Запретить реакции на сообщения. секунд - ЦВЕТА ТЕМЫ + ЦВЕТА ИНТЕРФЕЙСА Поделиться адресом с контактами\? Обновлённый профиль будет отправлен Вашим контактам. Об адресе SimpleX @@ -1850,4 +1850,95 @@ Форма картинок профилей Квадрат, круг и все, что между ними. Будет включено в прямых разговорах! + ФАЙЛЫ + Новые темы чатов + нет + Светлая + Системная + Цвета тёмного режима + Получайте файлы безопасно + Конфиденциальная доставка сообщений 🚀 + Улучшенная доставка сообщений + Уменьшенный расход батареи. + Версия сервера несовместима с настройками сети. + Неверный ключ или неизвестное соединение - скорее всего, это соединение удалено. + Превышено количество сообщений - предыдущие сообщения не доставлены. + Ошибка сервера получателя: %1$s + Ошибка: %1$s + Пересылающий сервер: %1$s +\nОшибка сервера получателя: %2$s + Пересылающий сервер: %1$s +\nОшибка: %2$s + Предупреждение доставки сообщения + Ошибка сети - сообщение не было отправлено после многократных попыток. + Адрес сервера несовместим с настройками сети. + информация сервера об очереди: %1$s +\n +\nпоследнее полученное сообщение: %2$s + Показать список чатов в новом окне + Приложение будет запрашивать подтверждение загрузки с неизвестных серверов (за исключением .onion адресов или когда SOCKS-прокси включен). + Незащищённый + Без Тора или ВПН, Ваш IP адрес будет доступен серверам файлов. + Отправлять сообщения напрямую, когда IP адрес защищен, и Ваш сервер или сервер получателя не поддерживает конфиденциальную доставку. + Черная + Тёмный режим + Не отправлять сообщения напрямую, даже если сервер получателя не поддерживает конфиденциальную доставку. + Режим цветов + Разрешить прямую доставку + Всегда + Подтверждать файлы с неизвестных серверов. + Всегда использовать конфиденциальную доставку. + Тёмная + Отладка доставки + Ошибка инициализации WebView. Обновите Вашу систему до новой версии. Свяжитесь с разработчиками. +\nОшибка: %s + Светлый режим + Сделайте ваши чаты разными! + Информация об очереди сообщений + Персидский интерфейс + Защитить IP адрес + Защитите ваш IP адрес от серверов сообщений, выбранных Вашими контактами. +\nВключите в настройках Сеть и серверы. + Отправьте сообщения напрямую, когда Ваш сервер или сервер получателя не поддерживает конфиденциальную доставку. + Конфиденциальная доставка + Использовать конфиденциальную доставку с неизвестными серверами. + Использовать конфиденциальную доставку с неизвестными серверами, когда IP адрес не защищен. + Когда IP защищен + Да + Чтобы защитить ваш IP адрес, приложение использует Ваши SMP серверы для конфиденциальной доставки сообщений. + Изображения профилей + Все режимы + Тема приложения + Сбросить на тему приложения + Сбросить на тему пользователя + Неизвестные серверы! + Без Тора или ВПН, Ваш IP адрес будет доступен этим серверам файлов: +\n%1$s. + Не использовать конфиденциальную маршрутизацию. + Никогда + Неизвестные серверы + Нет + Показать статус сообщения + Прямая доставка сообщений + Режим доставки сообщений + КОНФИДЕНЦИАЛЬНАЯ ДОСТАВКА СООБЩЕНИЙ + Цвета чата + Тема чата + Тема профиля + Дополнительный акцент 2 + Дополнительные настройки + Обрезать + Полностью + Добрый день! + Доброе утро! + Полученный ответ + Удалить изображение + Повторить + Сбросить цвет + Масштаб + Отправленный ответ + Установить тему по умолчанию + Рисунок обоев + Фон обоев + Применить к \ No newline at end of file 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 dc9f488572..f25811fef7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml @@ -149,7 +149,7 @@ Yetki Sesli mesajlara izin verilsin mi? Profil ekle - Üyelere direkt mesaj gönderilmesine izin ver. + Üyelere doğrudan mesaj gönderilmesine izin ver. Kendiliğinden yok olan mesajlar göndermeye izin ver. Gönderilen mesajların kalıcı olarak silinmesine izin ver. (24 saat içinde) Dosya ve medya göndermeye izin ver. @@ -505,7 +505,7 @@ Kendiliğinden şu sürede yok olacak Kendiliğinden şu sürede yok olacak: %s etkin - Direkt mesaj + Doğrudan mesajlar Devre dışı bırak Görünen ad, boşluk gibi aralıklama türleri içeremez. İsmini gir: @@ -529,7 +529,7 @@ %s üyesi için şifreleme kabul edildi doğrudan Yeniden gösterme - Bu grupta üyeler arası direkt mesajlar 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 @@ -652,7 +652,7 @@ Grup adını gir: Grup tam adı: Dosya ve medya - Grup üyeleri direkt mesaj gönderebilir. + Grup üyeleri doğrudan mesaj gönderebilir. Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde) Grup üyeleri sesli mesaj gönderebilirler. Bu toplu konuşmada, dosya ve medya yasaklanmıştır. @@ -1006,7 +1006,7 @@ Mesaj tepkilerini yasakla. Sesli mesaj göndermeyi yasakla. Geri alınamaz mesaj silme işlemini yasakla. - Üyelere direkt mesaj göndermeyi yasakla. + Üyelere doğrudan mesaj göndermeyi yasakla. Dosya ve medya göndermeyi yasakla. Canlı mesajlar Arayüz geliştirildi @@ -1215,7 +1215,7 @@ Önceki mesajın hash\'i farklı. SimpleX Kilit aktif değil! SimpleX Kilit - Direkt bağlanılsın mı? + Doğrudan bağlanılsın mı? Bu ayarlar mevcut profiliniz içindir Sunucu testi başarısız! Bağlantıyı onayla @@ -1230,7 +1230,7 @@ Bluetooth desteği ve diğer iyileştirmeler. Ayarlar AYARLAR - Bağlanmak için direkt mesaj gönderin + Bağlanmak için doğrudan mesaj gönderin Güvenlik kodu Daha hızlı gruplara katılma ve daha güvenilir mesajlar. Sohbet profiliniz grup üyelerine gönderilecek @@ -1403,7 +1403,7 @@ Yapıştırdığın bağlantı bir SimpleX bağlantısı değil. Gönderilmiş mesaj Gruplar için alıcılar devre dışı bırakılsın mı? - Aktarıcı sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir. + Yönlendirici sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir. Dosya yükleniyor Masaüstüne bağlanıyor Eklenecek kişi yok @@ -1693,7 +1693,7 @@ Uyarı: Birden fazla cihazda sohbet başlatmak desteklenmez ve mesaj iletimi başarısızlıklara neden olabilir. Veritabanı parolasını doğrulayın Parolayı doğrulayın - Tüm kişileriniz, konuşmalarınız ve dosyalarınız güvenli bir şekilde şifrelenir ve yapılandırılmış XFTP rölelerine parçalar halinde yüklenir. + Tüm kişileriniz, konuşmalarınız ve dosyalarınız güvenli bir şekilde şifrelenir ve yapılandırılmış XFTP yönlendiricilerine parçalar halinde yüklenir. Arşivle ve yükle Uyarı: arşiv silinecektir.]]> Taşımak için veritabanı parolasını hatırladığınızı doğrulayın. @@ -1782,7 +1782,7 @@ Sunucu sürümü ağ ayarlarıyla uyumlu değil. Yanlış anahtar veya bilinmeyen bağlantı - büyük olasılıkla bu bağlantı silinmiştir. Gizli yönlendirme - Bilinmeyen röleler + Bilinmeyen yönlendiriciler Her zaman gizli yönlendirmeyi kullan. Gizli yönlendirmeyi KULLANMA. Mesaj yönlendirme modu @@ -1797,7 +1797,7 @@ Sizin veya hedef sunucunun özel yönlendirmeyi desteklemediği durumlarda mesajları doğrudan gönderin. GİZLİ MESAJ YÖNLENDİRME Mesaj durumunu göster - IP adresinizi korumak için,özel yönlendirme mesajları iletmek için SMP sunucularınızı kullanır. + IP adresinizi korumak için,gizli yönlendirme mesajları iletmek için SMP sunucularınızı kullanır. Korumasız IP adresi korunmadığında bilinmeyen sunucularla gizli yönlendirme kullan. IP gizliyken @@ -1832,10 +1832,25 @@ Rengi sıfırla Sohbet listesini yeni pencerede göster Bilinmeyen sunucular! - Tor veya VPN olmadan, IP adresiniz bu XFTP aktarıcıları tarafından görülebilir: + Tor veya VPN olmadan, IP adresiniz bu XFTP yönlendiricileri tarafından görülebilir: \n%1$s. Tor veya VPN olmadan, IP adresiniz dosya sunucularına görülebilir. Duvar kağıdı vurgusu Duvar kağıdı arkaplanı Uygulama, bilinmeyen dosya sunucularından indirmeleri onaylamanızı isteyecektir (.onion veya SOCKS vekilleri etkin değilse). + WebView başlatılırken hata oluştu. Sisteminizi yeni sürüme güncelleyin. Lütfen geliştiricilerle iletişime geçin. +\nHata: %s + Sohbetlerinizin farklı görünmesini sağlayın! + Farsça Arayüz + Kullanıcı temasına sıfırla + IP adresinizi kişileriniz tarafından seçilen mesajlaşma yönlendiricilerinden koruyun. +\n*Ağ ve sunucular* ayarlarında etkinleştirin. + Gizli mesaj yönlendirme 🚀 + Bilinmeyen sunuculardan gelen dosyaları onayla. + Geliştirilmiş mesaj iletimi + Yeni sohbet temaları + Dosyaları güvenle alın + Azaltılmış pil kullanımı ile. + Uygulama teması + Uygulama temasına sıfırla \ 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 8c2298afef..b8d802450d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -1789,4 +1789,65 @@ Доброго дня! Доброго ранку! Світлий + Видалити зображення + Помилка ініціалізації WebView. Оновіть систему до нової версії. Зверніться до розробників. +\nПомилка: %s + Підтвердити файли з невідомих серверів. + Покращена доставка повідомлень + Перський інтерфейс + Маршрутизація приватних повідомлень 🚀 + Захист IP-адреси + Захистіть свою IP-адресу від ретрансляторів повідомлень, обраних вашими контактами. +\nУвімкніть у налаштуваннях *Мережа та сервери*. + Отримано відповідь + Збережено + Програма попросить підтвердити завантаження з невідомих файлових серверів (крім .onion або коли ввімкнено SOCKS-проксі). + Надсилайте повідомлення напряму, якщо IP-адреса захищена, а ваш сервер або сервер призначення не підтримує приватну маршрутизацію. + Надсилайте повідомлення напряму, якщо ваш сервер або сервер призначення не підтримує приватну маршрутизацію. + Встановлення теми за замовчуванням + Надіслано відповідь + Показати список чату в новому вікні + Використовуйте приватну маршрутизацію з невідомими серверами. + Використовуйте приватну маршрутизацію з невідомими серверами, якщо IP-адреса не захищена. + Фон шпалер + Акцент на шпалерах + Повторити + Масштаб + Нехай ваші чати виглядають інакше! + Нові теми чату + Безпечне отримання файлів + З меншим споживанням заряду акумулятора. + Неправильний ключ або невідоме з\'єднання - швидше за все, це з\'єднання видалено. + Адреса сервера несумісна з налаштуваннями мережі. + Голосові повідомлення заборонені + WiFi + Спікер + Повернутися до теми програми + Повернутися до теми користувача + Посилання SimpleX + Квадрат, коло або щось середнє між ними. + Буде ввімкнено в прямих чатах! + збережено + збережено з %s + Дротова мережа Ethernet + Невідомі сервери! + Без Tor або VPN ваша IP-адреса буде видимою для цих XFTP-ретрансляторів: +\n%1$s. + Одержувач(и) не бачить, від кого це повідомлення. + Збережено з + Серверна версія несумісна з мережевими налаштуваннями. + Посилання SimpleX заборонені + Показати статус повідомлення + Щоб захистити вашу IP-адресу, приватна маршрутизація використовує ваші SMP-сервери для доставки повідомлень. + Невідомі реле + Незахищений + Коли IP приховано + Так + Отримання паралелізму + У цій групі заборонені посилання на SimpleX. + Сформуйте зображення профілю + При підключенні аудіо та відеодзвінків. + Скинути колір + Система + Без Tor або VPN ваша IP-адреса буде видимою для файлових серверів. \ 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 362d6a30f0..bd9c8fa5c2 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 @@ -1837,4 +1837,25 @@ 聊天主题 重置颜色 缩放 + Webview 初始化失败。更新你的系统到新版本。请联系开发者。 +\n错误:%s + 保护您的真实 IP 地址。不让你的联系人选择的消息中继看到它。 +\n在*网络&服务器*设置中开启。 + 确认来自未知服务器的文件。 + 安全地接收文件 + 改进了消息传递 + 让你的聊天看上去不同! + 私密消息路由🚀 + 新的聊天主题 + 波斯语用户界面 + 降低电池用量 + 主题 + 重置为应用主题 + 重置为用户主题 + 发送调试 + 消息队列信息 + 消息队列信息:%1$s +\n +\n上一则收到的信息:%2$s + \ No newline at end of file diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt index 36149c8248..4128982f78 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/DesktopApp.kt @@ -115,6 +115,7 @@ private fun ApplicationScope.AppWindow(closedByError: MutableState) { false } }, title = "SimpleX") { +// val hardwareAccelerationDisabled = remember { listOf(GraphicsApi.SOFTWARE_FAST, GraphicsApi.SOFTWARE_COMPAT, GraphicsApi.UNKNOWN).contains(window.renderApi) } simplexWindowState.window = window AppScreen() if (simplexWindowState.openDialog.isAwaiting) { diff --git a/apps/multiplatform/desktop/src/jvmMain/kotlin/chat/simplex/desktop/Main.kt b/apps/multiplatform/desktop/src/jvmMain/kotlin/chat/simplex/desktop/Main.kt index 9925a6346b..f69cf817e5 100644 --- a/apps/multiplatform/desktop/src/jvmMain/kotlin/chat/simplex/desktop/Main.kt +++ b/apps/multiplatform/desktop/src/jvmMain/kotlin/chat/simplex/desktop/Main.kt @@ -3,7 +3,6 @@ package chat.simplex.desktop import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.AnimationVector1D import androidx.compose.foundation.* -import androidx.compose.foundation.interaction.* import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.* import androidx.compose.ui.ExperimentalComposeUiApi @@ -17,6 +16,8 @@ import kotlinx.coroutines.* import java.io.File fun main() { + // Disable hardware acceleration + //System.setProperty("skiko.renderApi", "SOFTWARE") initHaskell() runMigrations() initApp() diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index 309369811f..6fa11a1bbc 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -26,11 +26,11 @@ android.enableJetifier=true kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.jvm.target=11 -android.version_name=5.8-beta.4 -android.version_code=215 +android.version_name=5.8-beta.5 +android.version_code=218 -desktop.version_name=5.8-beta.4 -desktop.version_code=50 +desktop.version_name=5.8-beta.5 +desktop.version_code=52 kotlin.version=1.9.23 gradle.plugin.version=8.2.0 diff --git a/blog/20240601-protecting-children-safety-requires-e2e-encryption.md b/blog/20240601-protecting-children-safety-requires-e2e-encryption.md new file mode 100644 index 0000000000..39a047f93f --- /dev/null +++ b/blog/20240601-protecting-children-safety-requires-e2e-encryption.md @@ -0,0 +1,32 @@ +--- +layout: layouts/article.html +title: "Protecting Children's Safety Requires End-to-End Encryption" +date: 2024-06-01 +previewBody: blog_previews/20240601.html +image: images/20240601-eu-privacy.png +permalink: "/blog/20240601-protecting-children-safety-requires-e2e-encryption.html" +--- + +# Protecting Children's Safety Requires End-to-End Encryption + +As lawmakers grapple with the serious issue of child exploitation online, some proposed solutions would fuel the very problem they aim to solve. Despite expert warnings, the Belgian Presidency persists in pushing for the implementation of client-side scanning on encrypted messaging services, rebranding the effort as "upload moderation". Their [latest proposal](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=COM%3A2022%3A209%3AFIN&qid=1652451192472) mandates that providers of private communication services obtain user consent for AI-based scanning of their private chats. If users do not consent, they will be prohibited from sharing images, videos, and URLs. + +Privacy critics have long pushed for measures like centralized scanning of private photos and messaging data, arguing it could detect illicit content. However, invasive monitoring of private communications would create detrimental risks that far outweigh any perceived benefits. + +## Why we’re taking action + +SimpleX Chat signed a [joint statement](https://www.globalencryption.org/2024/05/joint-statement-on-the-dangers-of-the-may-2024-council-of-the-eu-compromise-proposal-on-eu-csam/) about the dangers of the EU compromise proposal on EU CSAM because maintaining end-to-end encryption is crucial for protecting privacy and security for everyone, including and especially children.  + +We urge the Ministers in the Council of the EU to stand firm against any scanning proposals that undermine end-to-end encryption, which would enable mass surveillance and misuse by bad actors, whether framed as client-side scanning, upload moderation, or any other terminology. Compromising this basic principle opens the door to devastating privacy violations. We also urge any organizations or individuals reading this to write to their representatives and voice their concerns. European Digital Rights has [outlined these issues](https://edri.org/our-work/be-scanned-or-get-banned/) in greater detail for anyone seeking more information. + +## Why compromising privacy endangers children + +The core issue is that compromising encryption and privacy makes innocent people vulnerable to malicious hackers and criminals seeking to exploit users data. Centralized scanning systems become a tempting target, potentially exposing millions of private family photos when breached. This would easily open up avenues for blackmail, abuse, and victimization of children. A case in point is the recent [criminal charges](https://techcrunch.com/2024/01/17/unredacted-meta-documents-reveal-historical-reluctance-to-protect-children-new-mexico-lawsuit/) against Meta in New Mexico, which highlights how the tech giant's algorithms enabled child exploitation by encouraging connections between minors and sexual predators. Privacy-eroding initiatives like client-side scanning would play into the hands of malicious actors by making more sensitive information accessible and weaponized in the same way that it has been on Meta platforms. + +## What should be done + +Rather than undermining privacy, to achieve child safety online users should be empowered with high standards for encryption and data control. For example, adopting a model where children (and users in general) cannot be discovered or approached on networks unless they or their parents permit it, similar to the SimpleX network privacy model. Intelligent multi-device synchronization could enable this oversight without compromising end-to-end encryption overall. It’s always possible to protect children without opening everyone, especially children themselves, to greater vulnerabilities due to such proposals. + +However, some recent legislative efforts have bizarrely moved in the opposite direction by seeking to limit parental access. The chilling truth is that the least private platforms have been major enablers of child exploitation. Eroding privacy protections on other services will only aid criminals further, not protect children. Preserving strong encryption and user privacy must be the foundation for any credible effort to combat online child exploitation. Initiatives trading privacy for supposed safety are not just technically flawed, but would achieve the exact opposite of their stated intent. We must avoid being gaslighted by narratives that defy logic, and instead provide users with the highest possible standards for privacy protections as a core principle. + +Protecting end-to-end encryption without carving out backdoors or vulnerabilities should be non-negotiable for children's and everyone’s safety. It is critical to redirect the discourse to focus on taking genuine privacy further by protecting against [metadata hoarding](https://simplex.chat/blog/20240416-dangers-of-metadata-in-messengers.html) and other means by which people’s data can be abused or subjected to surveillance. diff --git a/blog/README.md b/blog/README.md index a5f3d60b2e..a040833712 100644 --- a/blog/README.md +++ b/blog/README.md @@ -1,5 +1,11 @@ # Blog +Jun 1, 2024 [Children's Safety Requires End-to-End Encryption](./20240601-children-safety-requires-e2e-encryption.md) + +As lawmakers grapple with the serious issue of child exploitation online, some proposed solutions would fuel the very problem they aim to solve. + +--- + May 16, 2024 [SimpleX: Redefining Privacy by Making Hard Choices](./20240516-simplex-redefining-privacy-hard-choices.md) When it comes to open source privacy tools, the status quo often dictates the limitations of existing protocols and structures. However, these norms need to be challenged to radically shift how we approach genuinely private communication. This requires doing some uncomfortable things, like making hard choices as it relates to funding, alternative decentralization models, doubling down on privacy over convenience, and more. diff --git a/blog/images/20240601-eu-privacy.png b/blog/images/20240601-eu-privacy.png new file mode 100644 index 0000000000..4ae1a17e30 Binary files /dev/null and b/blog/images/20240601-eu-privacy.png differ diff --git a/cabal.project b/cabal.project index ed7a151729..d8752937be 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: 54c80d67c87ab626c58d028f90c8421b340a2e67 + tag: 4248a00a14554522f973435fd1214df790482bed source-repository-package type: git diff --git a/docs/rfcs/2024-05-17-flexible-user-records.md b/docs/rfcs/2024-05-17-flexible-user-records.md new file mode 100644 index 0000000000..da56fe75b6 --- /dev/null +++ b/docs/rfcs/2024-05-17-flexible-user-records.md @@ -0,0 +1,158 @@ +# Flexible user records + +## Problem + +Currently user records work as rigid containers for conversations. New conversations can be created only for an active user. Users want to be able to select a user record for a new conversation right at the connection screen (i.e. when scanning QR code or pasting a link). A similar problem was previously solved regarding Incognito mode - initially it required changing a global setting, then it was moved as a toggle to the connection screen, then it was reworked to be offered after scanning the link. + +## Solution + +## UI + +Connection UI would offer to join connections as other users. + +Current options when joining: + +``` +- "Use current profile" +- "Use new incognito profile" +``` + +Will change to: + +If there're only 2 users: + +``` +- "Use current profile" +- "Use new incognito profile" +- "Use profile" +``` + +If there's more than 2 users: + +``` +- "Use current profile" +- "Use new incognito profile" +- "Use other profile" (opens sheet with list of users) +``` + +Things to consider: + +- hidden users should be excluded from this selection +- choosing different user should make it active and open chat list for this user, then create pending connection there +- should connection plan api take into account all users? + +## Other ideas + +### Incognito chats in a separate user "profile" + +Having incognito conversations interleaved with "main profile" conversations is another point of confusion, as incognito profile is offered as an alternative to main profile, but conversations are still "attached" to it and inherit some of its settings (e.g. servers). We could unite all incognito chats under a new dummy "incognito" user profile. It would have a special representation in UI, not as a regular user profile, but as an incognito mode. It would allow customizing a specific theme, servers, preferences and other settings for all incognito chats. + +``` haskell +-- Types + +data User = User + { ... + incognitoUser :: Bool, + ... + } + +-- Controller + +APIConnect UserId IncognitoEnabled (Maybe AConnectionRequestUri) +-- -> changed to -> +APIConnect UserId (Maybe AConnectionRequestUri) +-- since conversation being incognito would be defined by user +``` + +Considerations / problems: + +- migration of existing incognito conversations is non trivial, as it requires migrating both agent and chat connection records to a new user record, in addition to migrating other chat entities. + - some programmatic one-time migration on chat start would be required, e.g.: + - create new user in agent; + - create new user in chat with incognito_user set to true; + - for each (non hidden, see below) user read chat list, update user_id for all chat entities: + - contacts, + - groups, + - group_members, + - contact_profiles, + - chat_items, etc. + - this new user servers would include all servers from users that had incognito conversations (?). + - this seems quite complex error-prone. +- it may be more pragmatic to not migrate old conversations to new user record, but instead filter them out in their respective user chat lists, and filter them in incognito user profile. + - in this case "legacy" incognito conversations would be marked by their user record (avatar/name inside chat list; note inside chat view saying that such and such settings are inherited from user x). + - we could still make a hack to apply same incognito user theme for "legacy" incognito conversations. +- on the other hand the second approach requires loading all chats for the incognito user (this may be related to "All chats view", see below). +- when creating an incognito conversation for a hidden user, it should still be attached to that user. + - or we could create an "incognito hidden user". +- considering complexities, this all seems quite a rabbit hole and may be not worth it.. +- MVP may be to do nothing for legacy incognito contacts and just explain it in app. A-la "New incognito conversations will appear here, previously created incognito conversations will stay attached to user profiles they were created in". + +### Forward messages between users + +Should be somewhat easy in backend: + +``` haskell +APIForwardChatItem {toChatRef :: ChatRef, fromChatRef :: ChatRef, chatItemId :: ChatItemId, ttl :: Maybe Int} +-- -> changed to -> +APIForwardChatItem {toUserId :: UserId, toChatRef :: ChatRef, fromUserId :: UserId, fromChatRef :: ChatRef, chatItemId :: ChatItemId, ttl :: Maybe Int} +-- or include UserId into ChatRef +``` + +More complex in UI - requires "knowing" conversations for other / all users: +- either have all conversations for all users in model. +- or have other users expand in forward list, and request their chat lists at that point. + +### Per user network settings + +Requires changes in agent and in backend. + +In agent requires storing network settings in UserId to settings maps, similar to servers: + +``` haskell +data AgentClient = AgentClient + { ... + useNetworkConfig :: TVar (NetworkConfig, NetworkConfig), + -- -> changed to -> + useNetworkConfig :: TMap UserId (NetworkConfig, NetworkConfig), -- slow/fast per user + } +``` + +Chat APIs: + +``` haskell +APISetNetworkConfig NetworkConfig +APIGetNetworkConfig +-- -> changed to -> +APISetNetworkConfig UserId NetworkConfig +APIGetNetworkConfig UserId +``` + +### All chats in united list + +We could add a view where chats for all users could be viewed in a single list / filtered by users. + +We could: +- either always load all chats for all users (see Incognito user, Forward between users above) and have a single api, then filter conversations by user in UI +- or modify/duplicate APIGetChats api and queries. +- in any case may require some rework of pagination queries, as indexes might become inefficient. + +``` haskell +APIGetChats {userId :: UserId, pendingConnections :: Bool, pagination :: PaginationByTime, query :: ChatListQuery} +-- -> changed to -> +APIGetChats {pendingConnections :: Bool, pagination :: PaginationByTime, query :: ChatListQuery} +-- or +APIGetChats {userId :: Maybe UserId, pendingConnections :: Bool, pagination :: PaginationByTime, query :: ChatListQuery} +-- with Nothing meaning all +-- or +APIGetChats {userIds :: [UserId], pendingConnections :: Bool, pagination :: PaginationByTime, query :: ChatListQuery} +-- to filter for multiple users? or only filter in UI? +``` + +### Move chats between user profiles + +This would further deepen the illusion of user record being a conversation tag rather than a rigid container for conversations. + +There are some of the same issues as described in migration of incognito conversation settings. + +"Moved" conversation would still be using servers that were configured for the previous user. +Perhaps it makes more sense to implement after automated queue rotation. diff --git a/package.yaml b/package.yaml index accab5f0c4..2e73355d6f 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 5.8.0.4 +version: 5.8.0.5 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 8bdb039259..418ecc119c 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."54c80d67c87ab626c58d028f90c8421b340a2e67" = "1ggzvgja4ig43ap1334fsmk16f30zh4v6dfjzfkjashqy5nja5ws"; + "https://github.com/simplex-chat/simplexmq.git"."4248a00a14554522f973435fd1214df790482bed" = "0ra09p5nm60rm6k3qks54lmy9xzkjyjna419x6cj4hgf1fgxhkp5"; "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 22b121136a..3e942a1bcb 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: 5.8.0.4 +version: 5.8.0.5 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 54a75f3ec5..7c230b0e6d 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -94,7 +94,7 @@ import qualified Simplex.FileTransfer.Description as FD import Simplex.FileTransfer.Protocol (FileParty (..), FilePartyI) import qualified Simplex.FileTransfer.Transport as XFTP import Simplex.Messaging.Agent as Agent -import Simplex.Messaging.Agent.Client (AgentStatsKey (..), SubInfo (..), agentClientStore, getAgentQueuesInfo, getAgentWorkersDetails, getAgentWorkersSummary, ipAddressProtected, temporaryAgentError, withLockMap) +import Simplex.Messaging.Agent.Client (AgentStatsKey (..), SubInfo (..), agentClientStore, getAgentQueuesInfo, getAgentWorkersDetails, getAgentWorkersSummary, getNetworkConfig', ipAddressProtected, temporaryAgentError, withLockMap) import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), InitialAgentServers (..), createAgentStore, defaultAgentConfig) import Simplex.Messaging.Agent.Lock (withLock) import Simplex.Messaging.Agent.Protocol @@ -103,7 +103,7 @@ import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..), Migrati import Simplex.Messaging.Agent.Store.SQLite.DB (SlowQueryStats (..)) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import qualified Simplex.Messaging.Agent.Store.SQLite.Migrations as Migrations -import Simplex.Messaging.Client (ProxyClientError (..), defaultNetworkConfig) +import Simplex.Messaging.Client (ProxyClientError (..), NetworkConfig (..), defaultNetworkConfig) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Crypto.File (CryptoFile (..), CryptoFileArgs (..)) import qualified Simplex.Messaging.Crypto.File as CF @@ -218,7 +218,7 @@ newChatController ChatDatabase {chatStore, agentStore} user cfg@ChatConfig {agentConfig = aCfg, defaultServers, inlineFiles, deviceNameForRemote} - ChatOpts {coreOptions = CoreChatOpts {smpServers, xftpServers, networkConfig, logLevel, logConnections, logServerHosts, logFile, tbqSize, highlyAvailable}, deviceName, optFilesFolder, optTempDirectory, showReactions, allowInstantFiles, autoAcceptFileSize} + ChatOpts {coreOptions = CoreChatOpts {smpServers, xftpServers, simpleNetCfg, logLevel, logConnections, logServerHosts, logFile, tbqSize, highlyAvailable}, deviceName, optFilesFolder, optTempDirectory, showReactions, allowInstantFiles, autoAcceptFileSize} backgroundMode = do let inlineFiles' = if allowInstantFiles || autoAcceptFileSize > 0 then inlineFiles else inlineFiles {sendChunks = 0, receiveInstant = False} config = cfg {logLevel, showReactions, tbqSize, subscriptionEvents = logConnections, hostEvents = logServerHosts, defaultServers = configServers, inlineFiles = inlineFiles', autoAcceptFileSize, highlyAvailable} @@ -303,7 +303,7 @@ newChatController let DefaultAgentServers {smp = defSmp, xftp = defXftp} = defaultServers smp' = fromMaybe defSmp (nonEmpty smpServers) xftp' = fromMaybe defXftp (nonEmpty xftpServers) - in defaultServers {smp = smp', xftp = xftp', netCfg = networkConfig} + in defaultServers {smp = smp', xftp = xftp', netCfg = updateNetworkConfig defaultNetworkConfig simpleNetCfg} agentServers :: ChatConfig -> IO InitialAgentServers agentServers config@ChatConfig {defaultServers = defServers@DefaultAgentServers {ntf, netCfg}} = do users <- withTransaction chatStore getUsers @@ -321,6 +321,13 @@ newChatController userServers :: User -> IO (NonEmpty (ProtoServerWithAuth p)) userServers user' = activeAgentServers config protocol <$> withTransaction chatStore (`getProtocolServers` user') +updateNetworkConfig :: NetworkConfig -> SimpleNetCfg -> NetworkConfig +updateNetworkConfig cfg SimpleNetCfg {socksProxy, smpProxyMode_, smpProxyFallback_, tcpTimeout_, logTLSErrors} = + let cfg1 = maybe cfg (\smpProxyMode -> cfg {smpProxyMode}) smpProxyMode_ + cfg2 = maybe cfg1 (\smpProxyFallback -> cfg1 {smpProxyFallback}) smpProxyFallback_ + cfg3 = maybe cfg2 (\tcpTimeout -> cfg2 {tcpTimeout, tcpConnectTimeout = (tcpTimeout * 3) `div` 2}) tcpTimeout_ + in cfg3 {socksProxy, logTLSErrors} + withChatLock :: String -> CM a -> CM a withChatLock name action = asks chatLock >>= \l -> withLock l name action @@ -1342,7 +1349,11 @@ processChatCommand' vr = \case processChatCommand $ APIGetChatItemTTL userId APISetNetworkConfig cfg -> withUser' $ \_ -> lift (withAgent' (`setNetworkConfig` cfg)) >> ok_ APIGetNetworkConfig -> withUser' $ \_ -> - lift $ CRNetworkConfig <$> withAgent' getNetworkConfig + CRNetworkConfig <$> lift getNetworkConfig + SetNetworkConfig netCfg -> do + cfg <- lift getNetworkConfig + void . processChatCommand $ APISetNetworkConfig $ updateNetworkConfig cfg netCfg + pure $ CRNetworkConfig cfg APISetNetworkInfo info -> lift (withAgent' (`setUserNetworkInfo` info)) >> ok_ ReconnectAllServers -> withUser' $ \_ -> lift (withAgent' reconnectAllServers) >> ok_ APISetChatSettings (ChatRef cType chatId) chatSettings -> withUser $ \user -> case cType of @@ -1379,6 +1390,11 @@ processChatCommand' vr = \case forM customUserProfileId $ \profileId -> withStore (\db -> getProfileById db userId profileId) connectionStats <- mapM (withAgent . flip getConnectionServers) (contactConnId ct) pure $ CRContactInfo user ct connectionStats (fmap fromLocalProfile incognitoProfile) + APIContactQueueInfo contactId -> withUser $ \user -> do + ct@Contact {activeConn} <- withStore $ \db -> getContact db vr user contactId + case activeConn of + Just conn -> getConnQueueInfo user conn + Nothing -> throwChatError $ CEContactNotActive ct APIGroupInfo gId -> withUser $ \user -> do (g, s) <- withStore $ \db -> (,) <$> getGroupInfo db vr user gId <*> liftIO (getGroupSummary db user gId) pure $ CRGroupInfo user g s @@ -1386,6 +1402,11 @@ processChatCommand' vr = \case (g, m) <- withStore $ \db -> (,) <$> getGroupInfo db vr user gId <*> getGroupMember db vr user gId gMemberId connectionStats <- mapM (withAgent . flip getConnectionServers) (memberConnId m) pure $ CRGroupMemberInfo user g m connectionStats + APIGroupMemberQueueInfo gId gMemberId -> withUser $ \user -> do + GroupMember {activeConn} <- withStore $ \db -> getGroupMember db vr user gId gMemberId + case activeConn of + Just conn -> getConnQueueInfo user conn + Nothing -> throwChatError CEGroupMemberNotActive APISwitchContact contactId -> withUser $ \user -> do ct <- withStore $ \db -> getContact db vr user contactId case contactConnId ct of @@ -1497,6 +1518,8 @@ processChatCommand' vr = \case groupId <- withStore $ \db -> getGroupIdByName db user gName processChatCommand $ APIGroupInfo groupId GroupMemberInfo gName mName -> withMemberName gName mName APIGroupMemberInfo + ContactQueueInfo cName -> withContactName cName APIContactQueueInfo + GroupMemberQueueInfo gName mName -> withMemberName gName mName APIGroupMemberQueueInfo SwitchContact cName -> withContactName cName APISwitchContact SwitchGroupMember gName mName -> withMemberName gName mName APISwitchGroupMember AbortSwitchContact cName -> withContactName cName APIAbortSwitchContact @@ -2795,6 +2818,9 @@ processChatCommand' vr = \case pure CIFile {fileId, fileName = takeFileName filePath, fileSize, fileSource = Just cf, fileStatus = CIFSSndStored, fileProtocol = FPLocal} let ci = mkChatItem cd ciId content ciFile_ Nothing Nothing itemForwarded Nothing False createdAt Nothing createdAt pure . CRNewChatItem user $ AChatItem SCTLocal SMDSnd (LocalChat nf) ci + getConnQueueInfo user Connection {connId, agentConnId = AgentConnId acId} = do + msgInfo <- withStore' (`getLastRcvMsgInfo` connId) + CRQueueInfo user msgInfo <$> withAgent (`getConnectionQueueInfo` acId) contactCITimed :: Contact -> CM (Maybe CITimed) contactCITimed ct = sndContactCITimed False ct Nothing @@ -3179,7 +3205,7 @@ receiveViaCompleteFD user fileId RcvFileDescr {fileDescrText, fileDescrComplete} pure $ filter (`notElem` knownSrvs) srvs ipProtectedForSrvs :: [XFTPServer] -> CM Bool ipProtectedForSrvs srvs = do - netCfg <- lift $ withAgent' getNetworkConfig + netCfg <- lift getNetworkConfig pure $ all (ipAddressProtected netCfg) srvs relaysNotApproved :: [XFTPServer] -> CM () relaysNotApproved unknownSrvs = do @@ -3187,6 +3213,9 @@ receiveViaCompleteFD user fileId RcvFileDescr {fileDescrText, fileDescrComplete} forM_ aci_ $ \aci -> toView $ CRChatItemUpdated user aci throwChatError $ CEFileNotApproved fileId unknownSrvs +getNetworkConfig :: CM' NetworkConfig +getNetworkConfig = withAgent' $ liftIO . getNetworkConfig' + resetRcvCIFileStatus :: User -> FileTransferId -> CIFileStatus 'MDRcv -> CM (Maybe AChatItem) resetRcvCIFileStatus user fileId ciFileStatus = do vr <- chatVersionRange @@ -7320,7 +7349,7 @@ chatCommandP = "/ttl" $> GetChatItemTTL, "/_network info " *> (APISetNetworkInfo <$> jsonP), "/_network " *> (APISetNetworkConfig <$> jsonP), - ("/network " <|> "/net ") *> (APISetNetworkConfig <$> netCfgP), + ("/network " <|> "/net ") *> (SetNetworkConfig <$> netCfgP), ("/network" <|> "/net") $> APIGetNetworkConfig, "/reconnect" $> ReconnectAllServers, "/_settings " *> (APISetChatSettings <$> chatRefP <* A.space <*> jsonP), @@ -7331,6 +7360,10 @@ chatCommandP = ("/info #" <|> "/i #") *> (GroupMemberInfo <$> displayName <* A.space <* char_ '@' <*> displayName), ("/info #" <|> "/i #") *> (ShowGroupInfo <$> displayName), ("/info " <|> "/i ") *> char_ '@' *> (ContactInfo <$> displayName), + "/_queue info #" *> (APIGroupMemberQueueInfo <$> A.decimal <* A.space <*> A.decimal), + "/_queue info @" *> (APIContactQueueInfo <$> A.decimal), + ("/queue info #" <|> "/qi #") *> (GroupMemberQueueInfo <$> displayName <* A.space <* char_ '@' <*> displayName), + ("/queue info " <|> "/qi ") *> char_ '@' *> (ContactQueueInfo <$> displayName), "/_switch #" *> (APISwitchGroupMember <$> A.decimal <* A.space <*> A.decimal), "/_switch @" *> (APISwitchContact <$> A.decimal), "/_abort switch #" *> (APIAbortSwitchGroupMember <$> A.decimal <* A.space <*> A.decimal), @@ -7629,10 +7662,12 @@ chatCommandP = <|> ("no" $> TMEDisableKeepTTL) netCfgP = do socksProxy <- "socks=" *> ("off" $> Nothing <|> "on" $> Just defaultSocksProxy <|> Just <$> strP) + smpProxyMode_ <- optional $ " smp-proxy=" *> strP + smpProxyFallback_ <- optional $ " smp-proxy-fallback=" *> strP t_ <- optional $ " timeout=" *> A.decimal - logErrors <- " log=" *> onOffP <|> pure False - let tcpTimeout = 1000000 * fromMaybe (maybe 5 (const 10) socksProxy) t_ - pure $ fullNetworkConfig socksProxy tcpTimeout logErrors + logTLSErrors <- " log=" *> onOffP <|> pure False + let tcpTimeout_ = (1000000 *) <$> t_ + pure $ SimpleNetCfg {socksProxy, smpProxyMode_, smpProxyFallback_, tcpTimeout_, logTLSErrors} 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} diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 0e1afe5774..43e75eca52 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -75,6 +75,7 @@ import Simplex.Messaging.Agent.Protocol import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation, SQLiteStore, UpMigration, withTransaction) import Simplex.Messaging.Agent.Store.SQLite.DB (SlowQueryStats (..)) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB +import Simplex.Messaging.Client (SMPProxyMode (..), SMPProxyFallback (..)) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Crypto.File (CryptoFile (..)) import qualified Simplex.Messaging.Crypto.File as CF @@ -83,9 +84,10 @@ import Simplex.Messaging.Encoding.String import Simplex.Messaging.Notifications.Protocol (DeviceToken (..), NtfTknStatus) import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, enumJSON, parseAll, parseString, sumTypeJSON) import Simplex.Messaging.Protocol (AProtoServerWithAuth, AProtocolType (..), CorrId, NtfServer, ProtoServerWithAuth, ProtocolTypeI, QueueId, SMPMsgMeta (..), SProtocolType, SubscriptionMode (..), UserProtocol, XFTPServer, XFTPServerWithAuth, userProtocol) +import Simplex.Messaging.Server.QueueStore.QueueInfo import Simplex.Messaging.TMap (TMap) import Simplex.Messaging.Transport (TLS, simplexMQVersion) -import Simplex.Messaging.Transport.Client (TransportHost) +import Simplex.Messaging.Transport.Client (SocksProxy, TransportHost) import Simplex.Messaging.Util (allFinally, catchAllErrors, catchAllErrors', tryAllErrors, tryAllErrors', (<$$>)) import Simplex.RemoteControl.Client import Simplex.RemoteControl.Invitation (RCSignedInvitation, RCVerifiedInvitation) @@ -350,6 +352,7 @@ data ChatCommand | GetChatItemTTL | APISetNetworkConfig NetworkConfig | APIGetNetworkConfig + | SetNetworkConfig SimpleNetCfg | APISetNetworkInfo UserNetworkInfo | ReconnectAllServers | APISetChatSettings ChatRef ChatSettings @@ -357,6 +360,8 @@ data ChatCommand | APIContactInfo ContactId | APIGroupInfo GroupId | APIGroupMemberInfo GroupId GroupMemberId + | APIContactQueueInfo ContactId + | APIGroupMemberQueueInfo GroupId GroupMemberId | APISwitchContact ContactId | APISwitchGroupMember GroupId GroupMemberId | APIAbortSwitchContact ContactId @@ -375,6 +380,8 @@ data ChatCommand | ContactInfo ContactName | ShowGroupInfo GroupName | GroupMemberInfo GroupName ContactName + | ContactQueueInfo ContactName + | GroupMemberQueueInfo GroupName ContactName | SwitchContact ContactName | SwitchGroupMember GroupName ContactName | AbortSwitchContact ContactName @@ -569,6 +576,7 @@ data ChatResponse | CRContactInfo {user :: User, contact :: Contact, connectionStats_ :: Maybe ConnectionStats, customUserProfile :: Maybe Profile} | CRGroupInfo {user :: User, groupInfo :: GroupInfo, groupSummary :: GroupSummary} | CRGroupMemberInfo {user :: User, groupInfo :: GroupInfo, member :: GroupMember, connectionStats_ :: Maybe ConnectionStats} + | CRQueueInfo {user :: User, rcvMsgInfo :: Maybe RcvMsgInfo, queueInfo :: QueueInfo} | CRContactSwitchStarted {user :: User, contact :: Contact, connectionStats :: ConnectionStats} | CRGroupMemberSwitchStarted {user :: User, groupInfo :: GroupInfo, member :: GroupMember, connectionStats :: ConnectionStats} | CRContactSwitchAborted {user :: User, contact :: Contact, connectionStats :: ConnectionStats} @@ -954,6 +962,18 @@ data AppFilePathsConfig = AppFilePathsConfig } deriving (Show) +data SimpleNetCfg = SimpleNetCfg + { socksProxy :: Maybe SocksProxy, + smpProxyMode_ :: Maybe SMPProxyMode, + smpProxyFallback_ :: Maybe SMPProxyFallback, + tcpTimeout_ :: Maybe Int, + logTLSErrors :: Bool + } + deriving (Show) + +defaultSimpleNetCfg :: SimpleNetCfg +defaultSimpleNetCfg = SimpleNetCfg Nothing Nothing Nothing Nothing False + data ContactSubStatus = ContactSubStatus { contact :: Contact, contactError :: Maybe ChatError diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index 6c0e93e017..ea79161e06 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -962,6 +962,15 @@ data RcvMsgDelivery = RcvMsgDelivery } deriving (Show) +data RcvMsgInfo = RcvMsgInfo + { msgId :: Int64, + msgDeliveryId :: Int64, + msgDeliveryStatus :: Text, + agentMsgId :: AgentMsgId, + agentMsgMeta :: Text + } + deriving (Show) + data MsgMetaJSON = MsgMetaJSON { integrity :: Text, rcvId :: Int64, @@ -1332,3 +1341,5 @@ $(JQ.deriveJSON defaultJSON ''MsgMetaJSON) msgMetaJson :: MsgMeta -> Text msgMetaJson = decodeLatin1 . LB.toStrict . J.encode . msgMetaToJson + +$(JQ.deriveJSON defaultJSON ''RcvMsgInfo) diff --git a/src/Simplex/Chat/Mobile.hs b/src/Simplex/Chat/Mobile.hs index 5883c6042c..486e0d62f3 100644 --- a/src/Simplex/Chat/Mobile.hs +++ b/src/Simplex/Chat/Mobile.hs @@ -48,7 +48,6 @@ import Simplex.Chat.Types import Simplex.Messaging.Agent.Client (agentClientStore) import Simplex.Messaging.Agent.Env.SQLite (createAgentStore) import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..), MigrationError, closeSQLiteStore, reopenSQLiteStore) -import Simplex.Messaging.Client (defaultNetworkConfig) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, sumTypeJSON) @@ -192,7 +191,7 @@ mobileChatOpts dbFilePrefix = dbKey = "", -- for API database is already opened, and the key in options is not used smpServers = [], xftpServers = [], - networkConfig = defaultNetworkConfig, + simpleNetCfg = defaultSimpleNetCfg, logLevel = CLLImportant, logConnections = False, logServerHosts = True, diff --git a/src/Simplex/Chat/Options.hs b/src/Simplex/Chat/Options.hs index 871e3358ec..747414af37 100644 --- a/src/Simplex/Chat/Options.hs +++ b/src/Simplex/Chat/Options.hs @@ -13,7 +13,6 @@ module Simplex.Chat.Options coreChatOptsP, getChatOpts, protocolServersP, - fullNetworkConfig, ) where @@ -22,15 +21,17 @@ import qualified Data.Attoparsec.ByteString.Char8 as A import Data.ByteArray (ScrubbedBytes) import qualified Data.ByteString.Char8 as B import Data.Text (Text) +import qualified Data.Text as T +import Data.Text.Encoding (encodeUtf8) import Numeric.Natural (Natural) import Options.Applicative -import Simplex.Chat.Controller (ChatLogLevel (..), updateStr, versionNumber, versionString) +import Simplex.Chat.Controller (ChatLogLevel (..), SimpleNetCfg (..), updateStr, versionNumber, versionString) import Simplex.FileTransfer.Description (mb) -import Simplex.Messaging.Client (NetworkConfig (..), defaultNetworkConfig) +import Simplex.Messaging.Client (SMPProxyMode (..), SMPProxyFallback (..)) import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (parseAll) import Simplex.Messaging.Protocol (ProtoServerWithAuth, ProtocolTypeI, SMPServerWithAuth, XFTPServerWithAuth) -import Simplex.Messaging.Transport.Client (SocksProxy, defaultSocksProxy) +import Simplex.Messaging.Transport.Client (defaultSocksProxy) import System.FilePath (combine) data ChatOpts = ChatOpts @@ -55,7 +56,7 @@ data CoreChatOpts = CoreChatOpts dbKey :: ScrubbedBytes, smpServers :: [SMPServerWithAuth], xftpServers :: [XFTPServerWithAuth], - networkConfig :: NetworkConfig, + simpleNetCfg :: SimpleNetCfg, logLevel :: ChatLogLevel, logConnections :: Bool, logServerHosts :: Bool, @@ -123,18 +124,34 @@ coreChatOptsP appDir defaultDbFileName = do socksProxy <- flag' (Just defaultSocksProxy) (short 'x' <> help "Use local SOCKS5 proxy at :9050") <|> option - parseSocksProxy + strParse ( long "socks-proxy" <> metavar "SOCKS5" <> help "Use SOCKS5 proxy at `ipv4:port` or `:port`" <> value Nothing ) + smpProxyMode_ <- + optional $ + option + strParse + ( long "smp-proxy" + <> metavar "SMP_PROXY_MODE" + <> help "Use private message routing: always, unknown, unprotected, never (default)" + ) + smpProxyFallback_ <- + optional $ + option + strParse + ( long "smp-proxy-fallback" + <> metavar "SMP_PROXY_FALLBACK_MODE" + <> help "Allow downgrade and connect directly: no, [when IP address is] protected, yes (default)" + ) t <- option auto ( long "tcp-timeout" <> metavar "TIMEOUT" - <> help "TCP timeout, seconds (default: 5/10 without/with SOCKS5 proxy)" + <> help "TCP timeout, seconds (default: 7/15 without/with SOCKS5 proxy)" <> value 0 ) logLevel <- @@ -149,7 +166,7 @@ coreChatOptsP appDir defaultDbFileName = do logTLSErrors <- switch ( long "log-tls-errors" - <> help "Log TLS errors (also enabled with `-l debug`)" + <> help "Log TLS errors" ) logConnections <- switch @@ -194,7 +211,7 @@ coreChatOptsP appDir defaultDbFileName = do dbKey, smpServers, xftpServers, - networkConfig = fullNetworkConfig socksProxy (useTcpTimeout socksProxy t) (logTLSErrors || logLevel == CLLDebug), + simpleNetCfg = SimpleNetCfg {socksProxy, smpProxyMode_, smpProxyFallback_, tcpTimeout_ = Just $ useTcpTimeout socksProxy t, logTLSErrors}, logLevel, logConnections = logConnections || logLevel <= CLLInfo, logServerHosts = logServerHosts || logLevel <= CLLInfo, @@ -204,7 +221,7 @@ coreChatOptsP appDir defaultDbFileName = do highlyAvailable } where - useTcpTimeout p t = 1000000 * if t > 0 then t else maybe 5 (const 10) p + useTcpTimeout p t = 1000000 * if t > 0 then t else maybe 7 (const 15) p defaultDbFilePath = combine appDir defaultDbFileName chatOptsP :: FilePath -> FilePath -> Parser ChatOpts @@ -321,16 +338,11 @@ chatOptsP appDir defaultDbFileName = do maintenance } -fullNetworkConfig :: Maybe SocksProxy -> Int -> Bool -> NetworkConfig -fullNetworkConfig socksProxy tcpTimeout logTLSErrors = - let tcpConnectTimeout = (tcpTimeout * 3) `div` 2 - in defaultNetworkConfig {socksProxy, tcpTimeout, tcpConnectTimeout, logTLSErrors} - parseProtocolServers :: ProtocolTypeI p => ReadM [ProtoServerWithAuth p] parseProtocolServers = eitherReader $ parseAll protocolServersP . B.pack -parseSocksProxy :: ReadM (Maybe SocksProxy) -parseSocksProxy = eitherReader $ parseAll strP . B.pack +strParse :: StrEncoding a => ReadM a +strParse = eitherReader $ parseAll strP . encodeUtf8 . T.pack parseServerPort :: ReadM (Maybe String) parseServerPort = eitherReader $ parseAll serverPortP . B.pack diff --git a/src/Simplex/Chat/Remote.hs b/src/Simplex/Chat/Remote.hs index 5b98ea119c..064fcc561e 100644 --- a/src/Simplex/Chat/Remote.hs +++ b/src/Simplex/Chat/Remote.hs @@ -72,11 +72,11 @@ import UnliftIO.Directory (copyFile, createDirectoryIfMissing, doesDirectoryExis -- when acting as host minRemoteCtrlVersion :: AppVersion -minRemoteCtrlVersion = AppVersion [5, 8, 0, 2] +minRemoteCtrlVersion = AppVersion [5, 8, 0, 4] -- when acting as controller minRemoteHostVersion :: AppVersion -minRemoteHostVersion = AppVersion [5, 8, 0, 2] +minRemoteHostVersion = AppVersion [5, 8, 0, 4] currentAppVersion :: AppVersion currentAppVersion = AppVersion SC.version diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 84b2536380..853d34995a 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -23,6 +23,7 @@ module Simplex.Chat.Store.Messages createNewSndMessage, createSndMsgDelivery, createNewMessageAndRcvMsgDelivery, + getLastRcvMsgInfo, createNewRcvMessage, updateSndMsgDeliveryStatus, createPendingGroupMessage, @@ -226,6 +227,23 @@ createNewMessageAndRcvMsgDelivery db connOrGroupId newMessage sharedMsgId_ RcvMs (msgId, connId, agentMsgId, msgMetaJson agentMsgMeta, snd $ broker agentMsgMeta, currentTs, currentTs, MDSRcvAgent) pure msg +getLastRcvMsgInfo :: DB.Connection -> Int64 -> IO (Maybe RcvMsgInfo) +getLastRcvMsgInfo db connId = + maybeFirstRow rcvMsgInfo $ + DB.query + db + [sql| + SELECT message_id, msg_delivery_id, delivery_status, agent_msg_id, agent_msg_meta + FROM msg_deliveries + WHERE connection_id = ? AND delivery_status IN (?, ?) + ORDER BY created_at DESC, msg_delivery_id DESC + LIMIT 1 + |] + (connId, MDSRcvAgent, MDSRcvAcknowledged) + where + rcvMsgInfo (msgId, msgDeliveryId, msgDeliveryStatus, agentMsgId, agentMsgMeta) = + RcvMsgInfo {msgId, msgDeliveryId, msgDeliveryStatus, agentMsgId, agentMsgMeta} + createNewRcvMessage :: forall e. MsgEncodingI e => DB.Connection -> ConnOrGroupId -> NewRcvMessage e -> Maybe SharedMsgId -> Maybe GroupMemberId -> Maybe GroupMemberId -> ExceptT StoreError IO RcvMessage createNewRcvMessage db connOrGroupId NewRcvMessage {chatMsgEvent, msgBody} sharedMsgId_ authorMember forwardedByMember = case connOrGroupId of diff --git a/src/Simplex/Chat/Terminal/Main.hs b/src/Simplex/Chat/Terminal/Main.hs index 2b26bb1d66..3e7d933669 100644 --- a/src/Simplex/Chat/Terminal/Main.hs +++ b/src/Simplex/Chat/Terminal/Main.hs @@ -6,15 +6,16 @@ module Simplex.Chat.Terminal.Main where import Control.Concurrent (forkIO, threadDelay) import Control.Concurrent.STM import Control.Monad +import Data.Maybe (fromMaybe) import Data.Time.Clock (getCurrentTime) import Data.Time.LocalTime (getCurrentTimeZone) import Network.Socket -import Simplex.Chat.Controller (ChatConfig, ChatController (..), ChatResponse (..), currentRemoteHost, versionNumber, versionString) +import Simplex.Chat.Controller (ChatConfig, ChatController (..), ChatResponse (..), SimpleNetCfg (..), currentRemoteHost, versionNumber, versionString) import Simplex.Chat.Core import Simplex.Chat.Options import Simplex.Chat.Terminal -import Simplex.Chat.View (serializeChatResponse) -import Simplex.Messaging.Client (NetworkConfig (..)) +import Simplex.Chat.View (serializeChatResponse, smpProxyModeStr) +import Simplex.Messaging.Client (NetworkConfig (..), defaultNetworkConfig) import System.Directory (getAppUserDataDirectory) import System.Exit (exitFailure) import System.Terminal (withTerminal) @@ -51,7 +52,7 @@ simplexChatCLI cfg server_ = do putStrLn $ serializeChatResponse (rh, Just user) ts tz rh r welcome :: ChatOpts -> IO () -welcome ChatOpts {coreOptions = CoreChatOpts {dbFilePrefix, networkConfig}} = +welcome ChatOpts {coreOptions = CoreChatOpts {dbFilePrefix, simpleNetCfg = SimpleNetCfg {socksProxy, smpProxyMode_, smpProxyFallback_}}} = mapM_ putStrLn [ versionString versionNumber, @@ -59,6 +60,9 @@ welcome ChatOpts {coreOptions = CoreChatOpts {dbFilePrefix, networkConfig}} = maybe "direct network connection - use `/network` command or `-x` CLI option to connect via SOCKS5 at :9050" (("using SOCKS5 proxy " <>) . show) - (socksProxy networkConfig), + socksProxy, + smpProxyModeStr + (fromMaybe (smpProxyMode defaultNetworkConfig) smpProxyMode_) + (fromMaybe (smpProxyFallback defaultNetworkConfig) smpProxyFallback_), "type \"/help\" or \"/h\" for usage info" ] diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 04c5aab175..527386864a 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -13,7 +13,6 @@ module Simplex.Chat.View where import qualified Data.Aeson as J import qualified Data.Aeson.TH as JQ -import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Lazy.Char8 as LB import Data.Char (isSpace, toUpper) @@ -56,6 +55,7 @@ import Simplex.Messaging.Agent.Client (ProtocolTestFailure (..), ProtocolTestSte import Simplex.Messaging.Agent.Env.SQLite (NetworkConfig (..)) import Simplex.Messaging.Agent.Protocol import Simplex.Messaging.Agent.Store.SQLite.DB (SlowQueryStats (..)) +import Simplex.Messaging.Client (SMPProxyMode (..), SMPProxyFallback) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Crypto.File (CryptoFile (..), CryptoFileArgs (..)) import qualified Simplex.Messaging.Crypto.Ratchet as CR @@ -65,7 +65,7 @@ import Simplex.Messaging.Parsers (dropPrefix, taggedObjectJSON) import Simplex.Messaging.Protocol (AProtoServerWithAuth (..), AProtocolType, ProtoServerWithAuth, ProtocolServer (..), ProtocolTypeI, SProtocolType (..)) import qualified Simplex.Messaging.Protocol as SMP import Simplex.Messaging.Transport.Client (TransportHost (..)) -import Simplex.Messaging.Util (bshow, tshow) +import Simplex.Messaging.Util (bshow, safeDecodeUtf8, tshow) import Simplex.Messaging.Version hiding (version) import Simplex.RemoteControl.Types (RCCtrlAddress (..)) import System.Console.ANSI.Types @@ -90,10 +90,10 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRChatRunning -> ["chat is running"] CRChatStopped -> ["chat stopped"] CRChatSuspended -> ["chat suspended"] - CRApiChats u chats -> ttyUser u $ if testView then testViewChats chats else [plain . bshow $ J.encode chats] + CRApiChats u chats -> ttyUser u $ if testView then testViewChats chats else [viewJSON chats] CRChats chats -> viewChats ts tz chats - CRApiChat u chat -> ttyUser u $ if testView then testViewChat chat else [plain . bshow $ J.encode chat] - CRApiParsedMarkdown ft -> [plain . bshow $ J.encode ft] + CRApiChat u chat -> ttyUser u $ if testView then testViewChat chat else [viewJSON chat] + CRApiParsedMarkdown ft -> [viewJSON ft] CRUserProtoServers u userServers -> ttyUser u $ viewUserServers userServers testView CRServerTestResult u srv testFailure -> ttyUser u $ viewServerTestResult srv testFailure CRChatItemTTL u ttl -> ttyUser u $ viewChatItemTTL ttl @@ -101,6 +101,10 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRContactInfo u ct cStats customUserProfile -> ttyUser u $ viewContactInfo ct cStats customUserProfile CRGroupInfo u g s -> ttyUser u $ viewGroupInfo g s CRGroupMemberInfo u g m cStats -> ttyUser u $ viewGroupMemberInfo g m cStats + CRQueueInfo _ msgInfo qInfo -> + [ "last received msg: " <> maybe "none" viewJSON msgInfo, + "server queue info: " <> viewJSON qInfo + ] CRContactSwitchStarted {} -> ["switch started"] CRGroupMemberSwitchStarted {} -> ["switch started"] CRContactSwitchAborted {} -> ["switch aborted"] @@ -220,7 +224,7 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRSndFileError u (Just ci) _ e -> ttyUser u $ uploadingFile "error" ci <> [plain e] CRSndFileRcvCancelled u _ ft@SndFileTransfer {recipientDisplayName = c} -> ttyUser u [ttyContact c <> " cancelled receiving " <> sndFile ft] - CRStandaloneFileInfo info_ -> maybe ["no file information in URI"] (\j -> [plain . LB.toStrict $ J.encode j]) info_ + CRStandaloneFileInfo info_ -> maybe ["no file information in URI"] (\j -> [viewJSON j]) info_ CRContactConnecting u _ -> ttyUser u [] CRContactConnected u ct userCustomProfile -> ttyUser u $ viewContactConnected ct userCustomProfile testView CRContactAnotherClient u c -> ttyUser u [ttyContact' c <> ": contact is connected to another client"] @@ -314,7 +318,7 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe ] CRRemoteFileStored rhId (CryptoFile filePath cfArgs_) -> [plain $ "file " <> filePath <> " stored on remote host " <> show rhId] - <> maybe [] ((: []) . plain . cryptoFileArgsStr testView) cfArgs_ + <> maybe [] ((: []) . cryptoFileArgsStr testView) cfArgs_ CRRemoteCtrlList cs -> viewRemoteCtrls cs CRRemoteCtrlFound {remoteCtrl = RemoteCtrlInfo {remoteCtrlId, ctrlDeviceName}, ctrlAppInfo_, appVersion, compatible} -> [ ("remote controller " <> sShow remoteCtrlId <> " found: ") @@ -346,8 +350,8 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe in ("Chat queries" : map viewQuery chatQueries) <> [""] <> ("Agent queries" : map viewQuery agentQueries) CRDebugLocks {chatLockName, chatEntityLocks, agentLocks} -> [ maybe "no chat lock" (("chat lock: " <>) . plain) chatLockName, - plain $ "chat entity locks: " <> LB.unpack (J.encode chatEntityLocks), - plain $ "agent locks: " <> LB.unpack (J.encode agentLocks) + "chat entity locks: " <> viewJSON chatEntityLocks, + "agent locks: " <> viewJSON agentLocks ] CRAgentStats stats -> map (plain . intercalate ",") stats CRAgentSubs {activeSubs, pendingSubs, removedSubs} -> @@ -362,12 +366,12 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe ("active subscriptions:" : map sShow activeSubscriptions) <> ("pending subscriptions: " : map sShow pendingSubscriptions) <> ("removed subscriptions: " : map sShow removedSubscriptions) - CRAgentWorkersSummary {agentWorkersSummary} -> ["agent workers summary: " <> plain (LB.unpack $ J.encode agentWorkersSummary)] + CRAgentWorkersSummary {agentWorkersSummary} -> ["agent workers summary: " <> viewJSON agentWorkersSummary] CRAgentWorkersDetails {agentWorkersDetails} -> [ "agent workers details:", - plain . LB.unpack $ J.encode agentWorkersDetails -- this would be huge, but copypastable when has its own line + viewJSON agentWorkersDetails -- this would be huge, but copypastable when has its own line ] - CRAgentMsgCounts {msgCounts} -> ["received messages (total, duplicates):", plain . LB.unpack $ J.encode msgCounts] + CRAgentMsgCounts {msgCounts} -> ["received messages (total, duplicates):", viewJSON msgCounts] CRAgentQueuesInfo {agentQueuesInfo} -> [ "agent queues info:", plain . LB.unpack $ J.encode agentQueuesInfo @@ -389,7 +393,7 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRChatError u e -> ttyUser' u $ viewChatError False logLevel testView e CRChatErrors u errs -> ttyUser' u $ concatMap (viewChatError False logLevel testView) errs CRArchiveImported archiveErrs -> if null archiveErrs then ["ok"] else ["archive import errors: " <> plain (show archiveErrs)] - CRAppSettings as -> ["app settings: " <> plain (LB.unpack $ J.encode as)] + CRAppSettings as -> ["app settings: " <> viewJSON as] CRTimedAction _ _ -> [] CRCustomChatResponse u r -> ttyUser' u $ [plain r] where @@ -1202,12 +1206,17 @@ viewChatItemTTL = \case deletedAfter ttlStr = ["old messages are set to be deleted after: " <> ttlStr] viewNetworkConfig :: NetworkConfig -> [StyledString] -viewNetworkConfig NetworkConfig {socksProxy, tcpTimeout} = +viewNetworkConfig NetworkConfig {socksProxy, tcpTimeout, smpProxyMode, smpProxyFallback} = [ plain $ maybe "direct network connection" (("using SOCKS5 proxy " <>) . show) socksProxy, "TCP timeout: " <> sShow tcpTimeout, - "use " <> highlight' "/network socks=[ timeout=]" <> " to change settings" + plain $ smpProxyModeStr smpProxyMode smpProxyFallback, + "use " <> highlight' "/network socks=[ timeout=][ smp-proxy=always/unknown/unprotected/never][ smp-proxy-fallback=no/protected/yes]" <> " to change settings" ] +smpProxyModeStr :: SMPProxyMode -> SMPProxyFallback -> String +smpProxyModeStr SPMNever _ = "private message routing disabled." +smpProxyModeStr mode fallback = T.unpack $ safeDecodeUtf8 $ "private message routing mode: " <> strEncode mode <> ", fallback: " <> strEncode fallback + viewContactInfo :: Contact -> Maybe ConnectionStats -> Maybe Profile -> [StyledString] viewContactInfo ct@Contact {contactId, profile = LocalProfile {localAlias, contactLink}, activeConn, uiThemes, customData} stats incognitoProfile = ["contact ID: " <> sShow contactId] @@ -1233,10 +1242,10 @@ viewGroupInfo GroupInfo {groupId, uiThemes, customData} s = <> viewCustomData customData viewUITheme :: Maybe UIThemeEntityOverrides -> [StyledString] -viewUITheme = maybe [] (\uiThemes -> ["UI themes: " <> plain (LB.toStrict $ J.encode uiThemes)]) +viewUITheme = maybe [] (\uiThemes -> ["UI themes: " <> viewJSON uiThemes]) viewCustomData :: Maybe CustomData -> [StyledString] -viewCustomData = maybe [] (\(CustomData v) -> ["custom data: " <> plain (LB.toStrict . J.encode $ J.Object v)]) +viewCustomData = maybe [] (\(CustomData v) -> ["custom data: " <> viewJSON (J.Object v)]) viewGroupMemberInfo :: GroupInfo -> GroupMember -> Maybe ConnectionStats -> [StyledString] viewGroupMemberInfo GroupInfo {groupId} m@GroupMember {groupMemberId, memberProfile = LocalProfile {localAlias, contactLink}, activeConn} stats = @@ -1678,7 +1687,7 @@ receivingFile_' :: (Maybe RemoteHostId, Maybe User) -> Bool -> String -> AChatIt receivingFile_' hu testView status (AChatItem _ _ chat ChatItem {file = Just CIFile {fileId, fileName, fileSource = Just f@(CryptoFile _ cfArgs_)}, chatDir}) = [plain status <> " receiving " <> fileTransferStr fileId fileName <> fileFrom chat chatDir] <> cfArgsStr cfArgs_ <> getRemoteFileStr where - cfArgsStr (Just cfArgs) = [plain (cryptoFileArgsStr testView cfArgs) | status == "completed"] + cfArgsStr (Just cfArgs) = [cryptoFileArgsStr testView cfArgs | status == "completed"] cfArgsStr _ = [] getRemoteFileStr = case hu of (Just rhId, Just User {userId}) @@ -1699,10 +1708,10 @@ viewLocalFile to CIFile {fileId, fileSource} ts tz = case fileSource of Just (CryptoFile fPath _) -> sentWithTime_ ts tz [to <> fileTransferStr fileId fPath] _ -> const [] -cryptoFileArgsStr :: Bool -> CryptoFileArgs -> ByteString +cryptoFileArgsStr :: Bool -> CryptoFileArgs -> StyledString cryptoFileArgsStr testView cfArgs@(CFArgs key nonce) - | testView = LB.toStrict $ J.encode cfArgs - | otherwise = "encryption key: " <> strEncode key <> ", nonce: " <> strEncode nonce + | testView = viewJSON cfArgs + | otherwise = plain $ "encryption key: " <> strEncode key <> ", nonce: " <> strEncode nonce fileFrom :: ChatInfo c -> CIDirection c d -> StyledString fileFrom (DirectChat ct) CIDirectRcv = " from " <> ttyContact' ct @@ -1820,7 +1829,7 @@ viewCallAnswer ct WebRTCSession {rtcSession = answer, rtcIceCandidates = iceCand [ ttyContact' ct <> " continued the WebRTC call", "To connect, please paste the data below in your browser window you opened earlier and click Connect button", "", - plain . LB.toStrict . J.encode $ WCCallAnswer {answer, iceCandidates} + viewJSON WCCallAnswer {answer, iceCandidates} ] callMediaStr :: CallType -> StyledString @@ -2078,6 +2087,9 @@ viewConnectionEntityInactive entity inactive | inactive = ["[" <> connEntityLabel entity <> "] connection is marked as inactive"] | otherwise = ["[" <> connEntityLabel entity <> "] inactive connection is marked as active"] +viewJSON :: J.ToJSON a => a -> StyledString +viewJSON = plain . LB.toStrict . J.encode + connEntityLabel :: ConnectionEntity -> StyledString connEntityLabel = \case RcvDirectMsgConnection _ (Just Contact {localDisplayName = c}) -> plain c diff --git a/tests/ChatClient.hs b/tests/ChatClient.hs index dfe7387372..589d880e8f 100644 --- a/tests/ChatClient.hs +++ b/tests/ChatClient.hs @@ -25,7 +25,7 @@ import Data.Maybe (isNothing) import qualified Data.Text as T import Network.Socket import Simplex.Chat -import Simplex.Chat.Controller (ChatCommand (..), ChatConfig (..), ChatController (..), ChatDatabase (..), ChatLogLevel (..)) +import Simplex.Chat.Controller (ChatCommand (..), ChatConfig (..), ChatController (..), ChatDatabase (..), ChatLogLevel (..), defaultSimpleNetCfg) import Simplex.Chat.Core import Simplex.Chat.Options import Simplex.Chat.Protocol (currentChatVersion, pqEncryptionCompressionVersion) @@ -44,7 +44,7 @@ import Simplex.Messaging.Agent.Protocol (currentSMPAgentVersion, duplexHandshake import Simplex.Messaging.Agent.RetryInterval import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..), closeSQLiteStore) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB -import Simplex.Messaging.Client (ProtocolClientConfig (..), defaultNetworkConfig) +import Simplex.Messaging.Client (ProtocolClientConfig (..)) import Simplex.Messaging.Client.Agent (defaultSMPClientAgentConfig) import Simplex.Messaging.Crypto.Ratchet (supportedE2EEncryptVRange) import qualified Simplex.Messaging.Crypto.Ratchet as CR @@ -94,7 +94,7 @@ testCoreOpts = -- dbKey = "this is a pass-phrase to encrypt the database", smpServers = ["smp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=:server_password@localhost:7001"], xftpServers = ["xftp://LcJUMfVhwD8yxjAiSaDzzGF3-kLG4Uh0Fl_ZIjrRwjI=:server_password@localhost:7002"], - networkConfig = defaultNetworkConfig, + simpleNetCfg = defaultSimpleNetCfg, logLevel = CLLImportant, logConnections = False, logServerHosts = False, @@ -473,7 +473,8 @@ xftpServerConfig = serverStatsLogFile = "tests/tmp/xftp-server-stats.daily.log", serverStatsBackupFile = Nothing, controlPort = Nothing, - transportConfig = defaultTransportServerConfig + transportConfig = defaultTransportServerConfig, + responseDelay = 0 } withXFTPServer :: IO () -> IO () diff --git a/website/langs/ar.json b/website/langs/ar.json index 7b087aab42..3551ffd31f 100644 --- a/website/langs/ar.json +++ b/website/langs/ar.json @@ -240,7 +240,7 @@ "signing-key-fingerprint": "توقيع مفتاح البصمة (SHA-256)", "f-droid-org-repo": "مستودع F-Droid.org", "stable-versions-built-by-f-droid-org": "الإصدارات الثابتة التي تم إنشاؤها بواسطة F-Droid.org", - "releases-to-this-repo-are-done-1-2-days-later": "يتم إصدار الإصدارات إلى هذا المستودع بعد يوم أو يومين", + "releases-to-this-repo-are-done-1-2-days-later": "تتم الإصدارات إلى هذا المستودع بعد عِدة أيام", "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 لا يمكنها أن تتنازل عن تعمية بين الطرفين. تحقق من رمز الأمان للتخفيف من الهجوم على القناة خارج النطاق", diff --git a/website/langs/hu.json b/website/langs/hu.json new file mode 100644 index 0000000000..1c860fa023 --- /dev/null +++ b/website/langs/hu.json @@ -0,0 +1,259 @@ +{ + "home": "Főoldal", + "developers": "Fejlesztők", + "reference": "Referencia", + "blog": "Blog", + "features": "Funkciók", + "why-simplex": "Miért válassza a SimpleX-t", + "simplex-privacy": "SimpleX adatvédelem", + "simplex-network": "SimpleX hálózat", + "simplex-explained": "Simplex bemutatása", + "simplex-explained-tab-1-text": "1. Felhasználói élmény", + "simplex-explained-tab-2-text": "2. Hogyan működik", + "simplex-explained-tab-3-text": "3. Mit látnak a kiszolgálók", + "simplex-explained-tab-1-p-1": "Létrehozhat kapcsolatokat és csoportokat, valamint kétirányú beszélgetéseket folytathat, mint bármely más üzenetküldőben.", + "simplex-explained-tab-1-p-2": "Hogyan működhet egyirányú üzenet várakoztatással és felhasználói profil azonosítók nélkül?", + "simplex-explained-tab-2-p-1": "Minden kapcsolathoz két különböző üzenetküldési várakoztatást használ a különböző kiszolgálókon keresztül történő üzenetküldéshez és -fogadáshoz.", + "simplex-explained-tab-2-p-2": "A kiszolgálók csak egyirányú üzeneteket továbbítanak, anélkül, hogy teljes képet kapnának a felhasználók beszélgetéseiről vagy kapcsolatairól.", + "simplex-explained-tab-3-p-1": "A kiszolgálók minden egyes üzenet várakoztatáshoz külön névtelen hitelesítő adatokkal rendelkeznek, és nem tudják, hogy melyik felhasználóhoz tartoznak.", + "simplex-explained-tab-3-p-2": "A felhasználók tovább fokozhatják a metaadatok adatvédelmét, ha a Tor segítségével férnek hozzá a kiszolgálókhoz, megakadályozva az IP-cím szerinti korrelációt.", + "smp-protocol": "SMP protokoll", + "chat-protocol": "Csevegés protokoll", + "donate": "Támogatás", + "copyright-label": "© 2020-2023 SimpleX | Nyílt forráskódú projekt", + "simplex-chat-protocol": "SimpleX Chat protokoll", + "terminal-cli": "Terminál CLI", + "terms-and-privacy-policy": "Adatvédelmi irányelvek", + "hero-header": "Újradefiniált adatvédelem", + "hero-subheader": "Az első üzenetküldő
felhasználói azonosítók nélkül", + "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ámok 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-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álatos QR-kód segítségével, személyesen vagy videokapcsolaton keresztül. Ugyanakkor egy meghívó 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", + "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", + "feature-4-title": "E2E-titkosított hangüzenetek", + "feature-5-title": "Eltűnő üzenetek", + "feature-6-title": "E2E-titkosított
hang- és videohívások", + "feature-7-title": "Hordozható titkosított alkalmazás-adattárolás — profil áthelyezése egy másik eszközre", + "feature-8-title": "Az inkognitó mód —
egyedülálló a SimpleX Chat-ben", + "simplex-network-overlay-1-title": "Összehasonlítás más P2P üzenetküldő protokollokkal", + "simplex-private-1-title": "2 rétegű végpontok közötti titkosítás", + "simplex-private-2-title": "További rétege a
kiszolgáló titkosítás", + "simplex-private-4-title": "Opcionális
hozzáférés Tor-on keresztül", + "simplex-private-5-title": "Több rétegű
tartalom kitöltés", + "simplex-private-6-title": "Sávon kívüli
kulcscsere", + "simplex-private-7-title": "Üzenetintegritás
hitelesítés", + "simplex-private-8-title": "Üzenetek keverése
a korreláció csökkentése érdekében", + "simplex-private-9-title": "Egyirányú
üzenet várakoztatás", + "simplex-private-10-title": "Ideiglenes névtelen páronkénti azonosítók", + "simplex-private-card-1-point-1": "Dupla-ratchet protokoll —
OTR üzenetküldés, sérülés utáni titkosság-védelemmel és -helyreállítással.", + "simplex-private-card-1-point-2": "NaCL cryptobox minden egyes üzenet várakoztatáshoz, hogy megakadályozza a forgalom korrelációját az üzenet várakoztatások között, ha a TLS veszélybe kerül.", + "simplex-private-card-2-point-1": "Kiegészítő kiszolgáló titkosítási réteg a címzettnek történő kézbesítéshez, hogy megakadályozza a fogadott és az elküldött kiszolgálóforgalom közötti korrelációt, ha a TLS veszélybe kerül.", + "simplex-private-card-3-point-1": "Az ügyfél-kiszolgáló kapcsolatokhoz csak az erős algoritmusokkal rendelkező TLS 1.2/1.3 protokollt használ.", + "simplex-private-card-3-point-2": "A kiszolgáló ujjlenyomata és a csatornakötés megakadályozza a MITM- és a visszajátszási támadásokat.", + "simplex-private-card-3-point-3": "Az újrakapcsolódás le van tiltva a munkamenet elleni támadások megelőzése érdekében.", + "simplex-private-card-4-point-1": "Az IP-címe védelme érdekében a kiszolgálókat a Tor-on vagy más átviteli fedett hálózaton keresztül érheti el.", + "simplex-private-card-6-point-1": "Számos kommunikációs platform sebezhető a kiszolgálók vagy a hálózati szolgáltatók MITM-támadásaival szemben.", + "simplex-private-card-6-point-2": "Ennek megakadályozása érdekében a SimpleX-alkalmazások egyszeri kulcsokat adnak át sávon kívül, amikor egy címet hivatkozásként vagy QR-kódként oszt meg.", + "simplex-private-card-7-point-1": "Az integritás garantálása érdekében az üzenetek sorszámozással vannak ellátva, és tartalmazzák az előző üzenet hash-ét.", + "simplex-private-card-7-point-2": "Ha bármilyen üzenetet hozzáadnak, eltávolítanak vagy módosítanak, a címzett értesítést kap róla.", + "simplex-private-card-8-point-1": "A SimpleX-kiszolgálók alacsony késleltetésű keverési csomópontokként működnek — a bejövő és kimenő üzenetek sorrendje eltérő.", + "simplex-private-card-9-point-1": "Minden üzenetet egyetlen irányba várakoztat, a különböző küldési és vételi címekkel.", + "simplex-private-card-9-point-2": "A hagyományos üzenetküldőkhöz képest csökkenti a támadási vektorokat és a rendelkezésre álló metaadatokat.", + "simplex-private-card-10-point-1": "A SimpleX ideiglenes névtelen páros címeket és hitelesítő adatokat használ minden egyes felhasználói kapcsolat vagy csoporttag számára.", + "simplex-private-card-10-point-2": "Lehetővé teszi az üzenetek felhasználói profilazonosítók nélküli kézbesítését, ami az alternatíváknál jobb metaadat-védelmet biztosít.", + "privacy-matters-1-overlay-1-title": "Az adatvédelemmel pénzt spórol meg", + "privacy-matters-1-overlay-1-linkText": "Az adatvédelemmel pénzt spórol meg", + "privacy-matters-2-title": "A választások manipulálása", + "privacy-matters-2-overlay-1-title": "Az adatvédelem hatalmat ad", + "privacy-matters-2-overlay-1-linkText": "Az adatvédelem hatalmat ad", + "privacy-matters-3-title": "Ártatlan összefüggés miatti vádemelés", + "privacy-matters-3-overlay-1-title": "Az adatvédelem szabaddá tesz", + "privacy-matters-3-overlay-1-linkText": "Az adatvédelem szabaddá tesz", + "simplex-unique-1-title": "Teljes magánéletet élvezhet", + "simplex-unique-1-overlay-1-title": "Személyazonosságának, profiljának, kapcsolatainak és metaadatainak teljes körű védelme", + "simplex-unique-2-title": "Véd
a spamektől és a visszaélésektől", + "simplex-unique-2-overlay-1-title": "A legjobb védelem a spam és a visszaélések ellen", + "simplex-unique-3-title": "Az ön adatai fölött csak ön rendelkezik", + "simplex-unique-3-overlay-1-title": "Az ön adatai fölött csak ön rendelkezik", + "simplex-unique-4-title": "Öné a SimpleX hálózat", + "simplex-unique-4-overlay-1-title": "Teljesen decentralizált — a SimpleX hálózat a felhasználóké", + "hero-overlay-card-1-p-1": "Sok felhasználó kérdezte: ha a SimpleX-nek nincsenek felhasználói azonosítói, honnan tudja, hová kell eljuttatni az üzeneteket?", + "hero-overlay-card-1-p-2": "Az üzenetek kézbesítéséhez az összes többi platform által használt felhasználói azonosítók helyett a SimpleX az üzenetek várakoztatásához ideiglenes, névtelen, páros azonosítókat használ, külön-külön minden egyes kapcsolathoz — nincsenek hosszú távú azonosítók.", + "hero-overlay-card-1-p-4": "Ez a kialakítás megakadályozza a felhasználók metaadatainak kiszivárgását az alkalmazás szintjén. Az adatvédelem további javítása és az IP-cím védelme érdekében az üzenetküldő kiszolgálókhoz Tor hálózaton keresztül is kapcsolódhat.", + "hero-overlay-card-1-p-5": "Csak a kliensek tárolják a felhasználói profilokat, kapcsolatokat és csoportokat; az üzenetek küldése 2 rétegű végpontok közötti titkosítással történik.", + "hero-overlay-card-1-p-6": "További leírást a SimpleX ismertetőben olvashat.", + "hero-overlay-card-2-p-1": "Ha a felhasználók állandó azonosítóval rendelkeznek, még akkor is, ha ez csak egy véletlenszerű szám, például egy munkamenet-azonosító, fennáll annak a veszélye, hogy a szolgáltató vagy egy támadó megfigyelheti, hogyan kapcsolódnak a felhasználók, és hány üzenetet küldenek.", + "hero-overlay-card-2-p-2": "Ezt az információt aztán összefüggésbe hozhatják a meglévő nyilvános közösségi hálózatokkal, és meghatározhatnak néhány valódi személyazonosságot.", + "hero-overlay-card-2-p-3": "Még a Tor v3 szolgáltatásokat használó, legprivátabb alkalmazások esetében is, ha két különböző kapcsolattartóval beszél ugyanazon a profilon keresztül, bizonyítani tudják, hogy ugyanahhoz a személyhez kapcsolódnak.", + "hero-overlay-card-2-p-4": "A SimpleX úgy védekezik ezek ellen a támadások ellen, hogy nem tartalmaz felhasználói azonosítókat. Ha pedig használja az inkognitó módot, akkor minden egyes létrejött kapcsolatban más-más felhasználó név jelenik meg, így elkerülhető a közöttük lévő összefüggések bizonyítása.", + "hero-overlay-card-3-p-1": "Trail of Bits egy vezető biztonsági és technológiai tanácsadó cég, amelynek ügyfelei közé tartoznak a nagy technológiai cégek, kormányzati ügynökségek és jelentős blokklánc projektek.", + "hero-overlay-card-3-p-2": "A Trail of Bits 2022 novemberében áttekintette a SimpleX platform kriptográfiai és hálózati komponenseit.", + "simplex-network-overlay-card-1-li-1": "A P2P-hálózatok az üzenetek továbbítására a DHT valamelyik változatát használják. A DHT kialakításakor egyensúlyt kell teremteni a kézbesítési garancia és a késleltetés között. A SimpleX jobb kézbesítési garanciával és alacsonyabb késleltetéssel rendelkezik, mint a P2P, mivel az üzenet redundánsan, a címzett által kiválasztott kiszolgálók segítségével több kiszolgálón keresztül párhuzamosan továbbítható. A P2P-hálózatokban az üzenet O(log N) csomóponton halad át szekvenciálisan, az algoritmus által kiválasztott csomópontok segítségével.", + "simplex-network-overlay-card-1-li-2": "A SimpleX kialakítása a legtöbb P2P-hálózattól eltérően nem rendelkezik semmiféle globális felhasználói azonosítóval, még ideiglenesen sem, és csak ideiglenes páros azonosítókat használ, ami jobb névtelenséget és metaadatvédelmet biztosít.", + "simplex-network-overlay-card-1-li-3": "A P2P nem oldja meg a MITM-támadás problémát, és a legtöbb létező implementáció nem használ sávon kívüli üzeneteket a kezdeti kulcscseréhez. A SimpleX a kezdeti kulcscseréhez sávon kívüli üzeneteket, vagy bizonyos esetekben már meglévő biztonságos és megbízható kapcsolatokat használ.", + "simplex-network-overlay-card-1-li-5": "Minden ismert P2P-hálózat sebezhető Sybil támadással, mert minden egyes csomópont felderíthető, és a hálózat egészként működik. A támadások enyhítésére szolgáló ismert intézkedés lehet egy központi kiszolgáló (pl.: tracker), vagy egy drága tanúsítvány. A SimpleX hálózat nem ismeri fel a kiszolgálókat, töredezett és több elszigetelt alhálózatként működik, ami lehetetlenné teszi az egész hálózatra kiterjedő támadásokat.", + "simplex-network-overlay-card-1-li-6": "A P2P-hálózatok sebezhetőek lehetnek a DRDoS-támadással szemben, amikor a kliensek képesek a forgalmat újraközvetíteni és felerősíteni, ami az egész hálózatra kiterjedő szolgáltatásmegtagadást eredményez. A SimpleX kliensek csak az ismert kapcsolatból származó forgalmat továbbítják, és a támadó nem használhatja őket arra, hogy az egész hálózatban felerősítse a forgalmat.", + "privacy-matters-overlay-card-1-p-1": "Sok nagyvállalat arra használja fel az önnel kapcsolatban álló személyek adatait, hogy megbecsülje az ön jövedelmét, hogy olyan termékeket adjon el önnek, amelyekre valójában nincs is szüksége, és hogy meghatározza az árakat.", + "privacy-matters-overlay-card-1-p-2": "Az online kiskereskedők tudják, hogy az alacsonyabb jövedelműek nagyobb valószínűséggel vásárolnak azonnal, ezért magasabb árakat számíthatnak fel, vagy eltörölhetik a kedvezményeket.", + "privacy-matters-overlay-card-1-p-3": "Egyes pénzügyi és biztosítótársaságok szociális grafikonokat használnak a kamatlábak és a díjak meghatározásához. Ez gyakran arra készteti az alacsonyabb jövedelmű embereket, hogy többet fizessenek — ez az úgynevezett „szegénységi prémium”.", + "privacy-matters-overlay-card-1-p-4": "A SimpleX platform minden alternatívánál jobban védi a kapcsolatainak adatait, teljes mértékben megakadályozva, hogy a ismeretségi-hálója bármilyen vállalat vagy szervezet számára elérhetővé váljon. Még ha az emberek a SimpleX Chat által biztosított kiszolgálókat is használják, sem a felhasználók számát, sem a kapcsolataikat nem ismerjük.", + "privacy-matters-overlay-card-2-p-1": "Nem is olyan régen megfigyelhettük, hogy a nagy választásokat manipulálta egy neves tanácsadó cég, amely az ismeretségi-háló segítségével eltorzította a valós világról alkotott képünket, és manipulálta a szavazatainkat.", + "privacy-matters-overlay-card-2-p-2": "Ahhoz, hogy objektív legyen és független döntéseket tudjon hozni, az információs terét is kézben kell tartania. Ez csak akkor lehetséges, ha privát kommunikációs platformot használ, amely nem fér hozzá az ismeretségi-hálójához.", + "privacy-matters-overlay-card-2-p-3": "A SimpleX az első olyan platform, amely eleve nem rendelkezik felhasználói azonosítókkal, így jobban védi az ismeretségi-hálóját, mint bármely ismert alternatíva.", + "privacy-matters-overlay-card-3-p-1": "Mindenkinek törődnie kell a magánélet és a kommunikáció biztonságával — az ártalmatlan beszélgetések veszélybe sodorhatják, még akkor is, ha nincs semmi rejtegetnivalója.", + "privacy-matters-overlay-card-3-p-2": "Az egyik legmegdöbbentőbb a Mohamedou Ould Salahi memoárjában leírt és az „A mauritániai” c. filmben bemutatott történet. Őt bírósági tárgyalás nélkül a guantánamói táborba zárták, és ott kínozták 15 éven át, miután egy afganisztáni rokonát telefonon felhívta, akit azzal gyanúsítottak a hatóságok, hogy köze van a 9/11-es merényletekhez, holott Salahi az előző 10 évben Németországban élt.", + "privacy-matters-overlay-card-3-p-3": "Átlagos embereket letartóztatnak azért, amit online megosztanak, még „névtelen” fiókjaikon keresztül is, még demokratikus országokban is.", + "privacy-matters-overlay-card-3-p-4": "Nem elég, ha csak egy végpontok között titkosított üzenetküldőt használunk, mindannyiunknak olyan üzenetküldőket kell használnunk, amelyek védik személyes ismerőseink magánéletét — akikkel kapcsolatban állunk.", + "simplex-unique-overlay-card-1-p-1": "Más üzenetküldő platformoktól eltérően a SimpleX nem rendel azonosítókat a felhasználókhoz. Nem támaszkodik telefonszámokra, tartomány-alapú címekre (mint az e-mail, XMPP vagy a Matrix), felhasználónevekre, nyilvános kulcsokra vagy akár véletlenszerű számokra a felhasználók azonosításához — nem tudjuk, hogy hányan használják a SimpleX-kiszolgálóinkat.", + "simplex-unique-overlay-card-1-p-2": "Az üzenetek kézbesítéséhez a SimpleX az egyirányú üzenet várakoztatást használ páronkénti névtelen címekkel, külön a fogadott és külön az elküldött üzenetek számára, általában különböző kiszolgálókon keresztül. A SimpleX használata olyan, mintha minden egyes kapcsolatnak más-más “eldobható” e-mail címe vagy telefonja lenne és nem kell ezeket gondosan kezelni.", + "simplex-unique-overlay-card-1-p-3": "Ez a kialakítás megvédi annak titkosságát, hogy kivel kommunikál, elrejtve azt a SimpleX platform kiszolgálói és a megfigyelők elől. IP-címének a kiszolgálók elől való elrejtéséhez azt teheti meg, hogy Tor-on keresztül kapcsolódik a SimpleX kiszolgálókhoz.", + "simplex-unique-overlay-card-2-p-1": "Mivel ön nem rendelkezik azonosítóval a SimpleX platformon, senki sem tud kapcsolatba lépni önnel, hacsak nem oszt meg egy egyszeri vagy ideiglenes felhasználói címet, például QR-kódot vagy hivatkozást.", + "simplex-unique-overlay-card-2-p-2": "Még az opcionális felhasználói cím esetében is, bár spam kapcsolatfelvételi kérések küldésére használható, megváltoztathatja vagy teljesen törölheti azt anélkül, hogy elveszítené a meglévő kapcsolatait.", + "simplex-unique-overlay-card-3-p-1": "A SimpleX Chat az összes felhasználói adatot kizárólag a klienseken tárolja egy hordozható titkosított adatbázis-formátumban, amely exportálható és átvihető bármely más támogatott eszközre.", + "simplex-unique-overlay-card-3-p-2": "A végpontok között titkosított üzenetek átmenetileg a SimpleX átjátszó-kiszolgálókon tartózkodnak, amíg be nem érkeznek a címzetthez, majd véglegesen törlődnek onnan.", + "simplex-unique-overlay-card-3-p-3": "A föderált hálózatok kiszolgálóitól (e-mail, XMPP vagy Matrix) eltérően a SimpleX kiszolgálók nem tárolják a felhasználói fiókokat, csak továbbítják az üzeneteket, így védve mindkét fél magánéletét.", + "simplex-unique-overlay-card-3-p-4": "A küldött és a fogadott kiszolgálóforgalom között nincsenek közös azonosítók vagy titkosított szövegek — ha bárki megfigyeli, nem tudja könnyen megállapítani, hogy ki kivel kommunikál, még akkor sem, ha a TLS-t kompromittálják.", + "simplex-unique-overlay-card-4-p-1": "Használhatja a SimpleX-et saját kiszolgálóival, és továbbra is kommunikálhat azokkal, akik az általunk biztosított, előre konfigurált kiszolgálókat használják.", + "simplex-unique-overlay-card-4-p-2": "A SimpleX platform nyitott protokollt használ és SDK-t biztosít a chatbotok létrehozásához, lehetővé téve olyan szolgáltatások megvalósítását, amelyekkel a felhasználók a SimpleX Chat alkalmazásokon keresztül léphetnek kapcsolatba — mi már nagyon várjuk, hogy milyen SimpleX szolgáltatásokat készítenek a lelkes közreműködők.", + "simplex-unique-overlay-card-4-p-3": "Ha a SimpleX platformra való fejlesztést fontolgatja, például a SimpleX-alkalmazások felhasználóinak szánt chatbotot, vagy a SimpleX Chat Jegyzék bot integrálását más mobilalkalmazásba, lépjen velünk kapcsolatba, ha bármilyen tanácsot vagy támogatást szeretne kapni.", + "simplex-unique-card-1-p-1": "A SimpleX védi az ön profiljához tartozó kapcsolatait és metaadatait, elrejtve azokat a SimpleX platform kiszolgálói és a megfigyelők elől.", + "simplex-unique-card-1-p-2": "Minden más létező üzenetküldő platformtól eltérően a SimpleX nem rendelkezik a felhasználókhoz rendelt azonosítókkal — még véletlenszerű számokkal sem.", + "simplex-unique-card-2-p-1": "Mivel a SimpleX platformon nincs azonosítója vagy állandó címe, senki sem tud kapcsolatba lépni önnel, hacsak nem oszt meg egy egyszeri vagy ideiglenes felhasználói címet, például QR-kódot vagy hivatkozást.", + "simplex-unique-card-3-p-1": "A SimpleX Chat az összes felhasználói adatot kizárólag az klienseken tárolja egy hordozható titkosított adatbázis-formátumban —, amely exportálható és átvihető bármely más támogatott eszközre.", + "simplex-unique-card-3-p-2": "A végpontok között titkosított üzenetek átmenetileg a SimpleX átjátszó-kiszolgálókon tartózkodnak, amíg be nem érkeznek a címzetthez, majd végleges törlésre kerülnek.", + "simplex-unique-card-4-p-1": "A SimpleX hálózat teljesen decentralizált és független bármely kriptopénztől vagy bármely más platformtól, kivéve az internetet.", + "simplex-unique-card-4-p-2": "Használhatja a SimpleX-et saját kiszolgálóival vagy az általunk biztosított kiszolgálókkal, és továbbra is kapcsolódhat bármely felhasználóhoz.", + "join": "Csatlakozás", + "we-invite-you-to-join-the-conversation": "Meghívjuk önt, hogy csatlakozzon a beszélgetéshez", + "join-the-REDDIT-community": "Csatlakozzon a REDDIT közösséghez", + "join-us-on-GitHub": "Csatlakozzon hozzánk a GitHubon", + "donate-here-to-help-us": "Adományozzon itt, hogy segítsen nekünk", + "sign-up-to-receive-our-updates": "Regisztráljon az oldalra, hogy megkapja frissítéseinket", + "enter-your-email-address": "Adja meg az e-mail címét", + "get-simplex": "SimpleX Desktop alkalmazás letöltése", + "why-simplex-is": "A SimpleX mitől", + "unique": "egyedülálló", + "learn-more": "Tudjon meg többet", + "more-info": "További információ", + "hide-info": "Információ elrejtése", + "contact-hero-subheader": "Szkennelje be a QR-kódot a SimpleX Chat alkalmazással telefonján vagy táblagépén.", + "contact-hero-p-1": "A hivatkozásban szereplő nyilvános kulcsokat és az üzenetek várakoztatási címét NEM küldi el a hálózaton keresztül az oldal megtekintésekor — ezeket a hivatkozás URL-jének hash-töredéke tartalmazza.", + "contact-hero-p-2": "Még nem töltötte le a SimpleX Chatet?", + "contact-hero-p-3": "Az alkalmazás letöltéséhez használja az alábbi linkeket.", + "scan-qr-code-from-mobile-app": "QR-kód beolvasása mobilalkalmazásból", + "to-make-a-connection": "A kapcsolat létrehozásához:", + "install-simplex-app": "Telepítse a SimpleX alkalmazást", + "open-simplex-app": "Simplex alkalmazás megnyitása", + "tap-the-connect-button-in-the-app": "Koppintson a „kapcsolódás” gombra az alkalmazásban", + "scan-the-qr-code-with-the-simplex-chat-app": "A QR-kód beolvasása a SimpleX Chat alkalmazással", + "scan-the-qr-code-with-the-simplex-chat-app-description": "A hivatkozásban szereplő nyilvános kulcsokat és az üzenetek várakoztatási címét NEM küldjük el a hálózaton keresztül, amikor ezt az oldalt megtekinti —
ezek a hivatkozás URL-jének hash-töredékében szerepelnek.", + "installing-simplex-chat-to-terminal": "A SimpleX chat telepítése terminálba", + "use-this-command": "Használja ezt a parancsot:", + "see-simplex-chat": "Lásd SimpleX Chat", + "connect-in-app": "Kapcsolódás az alkalmazásban", + "the-instructions--source-code": "az utasításokat, hogyan töltse le vagy fordítsa le a forráskódból.", + "if-you-already-installed-simplex-chat-for-the-terminal": "Ha már telepítette a SimpleX Chat-et a terminálba", + "if-you-already-installed": "Ha már telepítette a", + "simplex-chat-for-the-terminal": "SimpleX Chat-et a terminálba", + "copy-the-command-below-text": "másolja be az alábbi parancsot, és használja a csevegésben:", + "privacy-matters-section-header": "Miért számít az adatvédelem", + "privacy-matters-section-subheader": "A metaadatok védelmének megőrzése — kivel beszélget — megvédi a következőktől:", + "privacy-matters-section-label": "Győződjön meg róla, hogy az üzenetküldő amit használ nem fér hozzá az adataidhoz!", + "simplex-private-section-header": "Mitől lesz a SimpleX privát", + "simplex-network-section-header": "SimpleX hálózat", + "simplex-network-section-desc": "A Simplex Chat a P2P és a föderált hálózatok előnyeinek kombinálásával biztosítja a legjobb adatvédelmet.", + "simplex-network-1-desc": "Minden üzenet a kiszolgálókon keresztül kerül elküldésre, ami jobb metaadat-védelmet és megbízható aszinkron üzenetkézbesítést biztosít, miközben elkerülhető a sok", + "simplex-network-2-header": "A föderált hálózatokkal ellentétben", + "simplex-network-2-desc": "A SimpleX átjátszó kiszolgálók NEM tárolnak felhasználói profilokat, kapcsolatokat és kézbesített üzeneteket, NEM csatlakoznak egymáshoz, és NINCS kiszolgáló könyvtár.", + "simplex-network-3-header": "SimpleX hálózat", + "simplex-network-3-desc": "a kiszolgálók egyirányú üzenet várakoztatásokat biztosítanak a felhasználók összekapcsolásához, de nem látják a hálózati kapcsolati gráfot; azt csak a felhasználók látják.", + "comparison-section-header": "Összehasonlítás más protokollokkal", + "protocol-1-text": "Signal, nagy platformok", + "protocol-2-text": "XMPP, Matrix", + "protocol-3-text": "P2P protokollok", + "comparison-point-1-text": "Globális személyazonosságot igényel", + "comparison-point-2-text": "MITM lehetősége", + "comparison-point-4-text": "Egyetlen vagy központosított hálózat", + "comparison-point-5-text": "Központi komponens vagy más hálózati szintű támadás", + "no": "Nem", + "no-private": "Nem - privát", + "no-secure": "Nem - biztonságos", + "no-resilient": "Nem - ellenálló", + "no-decentralized": "Nem - decentralizált", + "no-federated": "Nem - föderált", + "comparison-section-list-point-1": "Általában telefonszám alapján, néhány esetben felhasználónév alapján", + "comparison-section-list-point-2": "DNS-alapú címek", + "comparison-section-list-point-3": "Nyilvános kulcs vagy más globális egyedi azonosító", + "comparison-section-list-point-4a": "A SimpleX átjátszók nem veszélyeztethetik az e2e titkosítást. Biztonsági kód ellenőrzése a sávon kívüli csatorna elleni támadás mérséklésére", + "comparison-section-list-point-4": "Ha az üzemeltető kiszolgálói veszélybe kerülnek. Ellenőrizze a biztonsági kódot a Signal-ban és néhány más alkalmazásban, hogy csökkentse a veszélyt", + "comparison-section-list-point-5": "Nem védi a felhasználók metaadatait", + "comparison-section-list-point-6": "Bár a P2P elosztott, de nem föderált - egyetlen hálózatként működnek", + "comparison-section-list-point-7": "A P2P-hálózatoknak vagy van egy központi hitelesítője, vagy az egész hálózat kompromittálódhat", + "see-here": "lásd itt", + "guide-dropdown-1": "Gyors indítás", + "guide-dropdown-2": "Üzenetek küldése", + "guide-dropdown-3": "Titkos csoportok", + "guide-dropdown-4": "Csevegő profilok", + "guide-dropdown-5": "Adatkezelés", + "guide-dropdown-6": "Hang- és videó hívások", + "guide-dropdown-7": "Adatvédelem és biztonság", + "guide-dropdown-8": "Alkalmazás beállításai", + "guide": "Útmutató", + "docs-dropdown-1": "SimpleX platform", + "docs-dropdown-2": "Android fájlok elérése", + "docs-dropdown-3": "Hozzáférés a csevegő adatbázishoz", + "docs-dropdown-8": "SimpleX jegyzék szolgáltatás", + "docs-dropdown-9": "Letöltések", + "f-droid-page-simplex-chat-repo-section-text": "Ha hozzá szeretné adni az F-Droid klienséhez, olvassa be a QR-kódot, vagy használja ezt az URL-t:", + "signing-key-fingerprint": "Aláíró kulcs ujjlenyomata (SHA-256)", + "f-droid-org-repo": "F-Droid.org tároló", + "stable-versions-built-by-f-droid-org": "F-Droid.org által készített stabil verziók", + "releases-to-this-repo-are-done-1-2-days-later": "A kiadások ebben a tárolóban néhány napot késnek", + "f-droid-page-f-droid-org-repo-section-text": "A SimpleX Chat és az F-Droid.org tárolók különböző kulcsokkal írják alá az összeállításokat. A váltáshoz exportálja a csevegési adatbázist és telepítse újra az alkalmazást.", + "jobs": "Csatlakozzon a csapathoz", + "please-enable-javascript": "Engedélyezze a JavaScriptet a QR-kód megjelenítéséhez.", + "please-use-link-in-mobile-app": "Használja a mobilalkalmazásban található hivatkozást", + "contact-hero-header": "Kapott egy címet a SimpleX Chat-en való kapcsolódáshoz", + "invitation-hero-header": "Kapott egy egyszer használatos hivatkozást a SimpleX Chat-en való kapcsolódáshoz", + "simplex-network-overlay-card-1-li-4": "A P2P-megvalósításokat egyes internetszolgáltatók blokkolhatják (mint például a BitTorrent). A SimpleX átvitel-független - a szabványos webes protokollokon, pl. WebSockets-en keresztül is működik.", + "simplex-private-card-4-point-2": "A SimpleX Tor-on keresztüli használatához telepítse az Orbot alkalmazást és engedélyezze a SOCKS5 proxy-t (vagy a VPN-t az iOS-ban).", + "simplex-private-card-5-point-1": "A SimpleX minden titkosítási réteghez tartalomkitöltést használ, hogy meghiúsítsa az üzenetméret ellen irányuló támadásokat.", + "simplex-private-card-5-point-2": "A kiszolgálók és a hálózatot megfigyelők számára a különböző méretű üzenetek egyformának tűnnek.", + "privacy-matters-1-title": "Hirdetés és árdiszkrimináció", + "hero-overlay-card-1-p-3": "Ön határozza meg, hogy melyik kiszolgáló(ka)t használja az üzenetek fogadására, a kapcsolatokhoz — azokat a kiszolgálókat, amelyeket az üzenetek küldésére használ. Minden beszélgetés két különböző kiszolgálót használ.", + "hero-overlay-card-3-p-3": "További információk a közleményben.", + "simplex-network-overlay-card-1-p-1": "A P2P üzenetküldő protokollok és alkalmazások számos problémával küzdenek, amelyek miatt kevésbé megbízhatóak, mint a SimpleX, bonyolultabb az elemzésük és többféle támadással szemben sebezhetőek.", + "chat-bot-example": "Chat bot példa", + "simplex-private-3-title": "Biztonságos, hitelesített
TLS adatátvitel", + "github-repository": "GitHub tároló", + "tap-to-close": "Koppintson a bezáráshoz", + "simplex-network-1-header": "A P2P hálózatokkal ellentétben", + "simplex-network-1-overlay-linktext": "a P2P hálózat problémái", + "comparison-point-3-text": "Függés a DNS-től", + "yes": "Igen", + "guide-dropdown-9": "Kapcsolatok létrehozása", + "docs-dropdown-4": "SMP-kiszolgáló üzemeltetése", + "docs-dropdown-5": "XFTP-kiszolgáló üzemeltetése", + "docs-dropdown-6": "WebRTC kiszolgálók", + "docs-dropdown-7": "SimpleX Chat honosítása", + "docs-dropdown-10": "Átláthatóság", + "docs-dropdown-11": "GY.I.K.", + "docs-dropdown-12": "Biztonság", + "newer-version-of-eng-msg": "Ennek az oldalnak van egy újabb angol nyelvű változata.", + "click-to-see": "Kattintson a megtekintéséhez", + "menu": "Menü", + "on-this-page": "Ezen az oldalon", + "back-to-top": "Vissza a tetejére", + "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" +} \ No newline at end of file diff --git a/website/langs/nl.json b/website/langs/nl.json index 15729fbfe9..4f6724e3ff 100644 --- a/website/langs/nl.json +++ b/website/langs/nl.json @@ -240,7 +240,7 @@ "f-droid-org-repo": "F-Droid.org repo", "signing-key-fingerprint": "Signing key fingerprint (SHA-256)", "stable-versions-built-by-f-droid-org": "Stabiele versies gebouwd door F-Droid.org", - "releases-to-this-repo-are-done-1-2-days-later": "De releases voor deze repository vinden 1-2 dagen later plaats", + "releases-to-this-repo-are-done-1-2-days-later": "De releases voor deze repository vinden enkele dagen later plaats", "f-droid-page-f-droid-org-repo-section-text": "SimpleX Chat- en F-Droid.org-repository's ondertekenen builds met de verschillende sleutels. Om over te stappen, alstublieft exporteer de chatdatabase en installeer de app opnieuw.", "docs-dropdown-8": "SimpleX Directory Service", "comparison-section-list-point-4a": "SimpleX relais kunnen de e2e-versleuteling niet in gevaar brengen. Controleer de beveiligingscode om aanvallen op out-of-band kanalen te beperken", diff --git a/website/langs/pl.json b/website/langs/pl.json index bbfb2dd9b7..510915831d 100644 --- a/website/langs/pl.json +++ b/website/langs/pl.json @@ -242,7 +242,7 @@ "signing-key-fingerprint": "Odcisk klucza podpisu (SHA-256)", "f-droid-org-repo": "Repo F-Droid.org", "stable-versions-built-by-f-droid-org": "Wersje stabilne zbudowane przez F-Droid.org", - "releases-to-this-repo-are-done-1-2-days-later": "Wydania na tym repo są 1-2 dni później", + "releases-to-this-repo-are-done-1-2-days-later": "Wydania na tym repo są kilka dni później", "comparison-section-list-point-4a": "Przekaźniki SimpleX nie mogą skompromitować szyfrowania e2e. Zweryfikuj kody bezpieczeństwa aby złagodzić atak na kanał pozapasmowy", "hero-overlay-3-title": "Ocena bezpieczeństwa", "hero-overlay-card-3-p-2": "Trail of Bits przejrzał komponenty kryptograficzne i sieciowe platformy SimpleX w listopadzie 2022.", diff --git a/website/langs/uk.json b/website/langs/uk.json index 6289b44ca8..f37feb55ef 100644 --- a/website/langs/uk.json +++ b/website/langs/uk.json @@ -1,7 +1,7 @@ { "features": "Особливості", "simplex-explained-tab-3-text": "3. Що бачать сервери", - "terms-and-privacy-policy": "Умови та політика конфіденційності", + "terms-and-privacy-policy": "Політика конфіденційності", "feature-4-title": "Голосові повідомлення з шифруванням від кінця до кінця", "feature-5-title": "Зникнення повідомлень", "simplex-private-card-3-point-3": "Відновлення з'єднання вимкнено для запобігання атакам на сесію.", @@ -240,7 +240,7 @@ "stable-versions-built-by-f-droid-org": "Стабільні версії, побудовані F-Droid.org", "simplex-chat-repo": "Репозитарій SimpleX Chat", "f-droid-org-repo": "Репозитарій F-Droid.org", - "releases-to-this-repo-are-done-1-2-days-later": "Релізи в цей репозитарій робляться за 1-2 дні пізніше", + "releases-to-this-repo-are-done-1-2-days-later": "Релізи в це репо відбуваються на кілька днів пізніше", "stable-and-beta-versions-built-by-developers": "Стабільні та бета-версії, побудовані розробниками", "f-droid-page-f-droid-org-repo-section-text": "SimpleX Chat та репозитарії F-Droid.org підписують збірки різними ключами. Щоб переключитися, будь ласка, експортуйте базу даних чату та перевстановіть додаток.", "hero-overlay-3-title": "Оцінка безпеки", @@ -252,5 +252,8 @@ "comparison-section-list-point-4a": "Ретранслятори SimpleX не можуть порушити e2e-шифрування. Перевірте безпековий код для зменшення ризику атаки на зовнішньобандовий канал", "docs-dropdown-9": "Завантаження", "please-enable-javascript": "Будь ласка, увімкніть JavaScript, щоб побачити QR-код.", - "please-use-link-in-mobile-app": "Будь ласка, скористайтеся посиланням у мобільному додатку" + "please-use-link-in-mobile-app": "Будь ласка, скористайтеся посиланням у мобільному додатку", + "docs-dropdown-11": "ПОШИРЕНІ ЗАПИТАННЯ", + "docs-dropdown-10": "Прозорість", + "docs-dropdown-12": "Безпека" } diff --git a/website/src/_includes/blog_previews/20240601.html b/website/src/_includes/blog_previews/20240601.html new file mode 100644 index 0000000000..5e0ca2de49 --- /dev/null +++ b/website/src/_includes/blog_previews/20240601.html @@ -0,0 +1,2 @@ +

As lawmakers grapple with the serious issue of child exploitation online, + some proposed solutions would fuel the very problem they aim to solve.

\ No newline at end of file