From aeb28400e9e814ead4e7be3da482f80e9f71c72a Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:32:53 +0400 Subject: [PATCH 01/19] core: take entity lock before processing file (#4105) --- src/Simplex/Chat.hs | 18 +++++++++--- src/Simplex/Chat/Store/Files.hs | 44 ++++++++++++++++++++++-------- src/Simplex/Chat/Store/Messages.hs | 1 - 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 7b82d997cd..f8285770e0 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -3577,14 +3577,19 @@ processAgentMessageNoConn = \case processAgentMsgSndFile :: ACorrId -> SndFileId -> ACommand 'Agent 'AESndFile -> CM () processAgentMsgSndFile _corrId aFileId msg = do - fileId <- withStore (`getXFTPSndFileDBId` AgentSndFileId aFileId) - withFileLock "processAgentMsgSndFile" fileId $ + (cRef_, fileId) <- withStore (`getXFTPSndFileDBIds` AgentSndFileId aFileId) + withEntityLock_ cRef_ $ withFileLock "processAgentMsgSndFile" fileId $ withStore' (`getUserByASndFileId` AgentSndFileId aFileId) >>= \case Just user -> process user fileId `catchChatError` (toView . CRChatError (Just user)) _ -> do lift $ withAgent' (`xftpDeleteSndFileInternal` aFileId) throwChatError $ CENoSndFileUser $ AgentSndFileId aFileId where + withEntityLock_ :: Maybe ChatRef -> CM a -> CM a + withEntityLock_ cRef_ = case cRef_ of + Just (ChatRef CTDirect contactId) -> withContactLock "processAgentMsgSndFile" contactId + Just (ChatRef CTGroup groupId) -> withGroupLock "processAgentMsgSndFile" groupId + _ -> id process :: User -> FileTransferId -> CM () process user fileId = do (ft@FileTransferMeta {xftpRedirectFor, cancelled}, sfts) <- withStore $ \db -> getSndFileTransfer db user fileId @@ -3699,14 +3704,19 @@ splitFileDescr rfdText = do processAgentMsgRcvFile :: ACorrId -> RcvFileId -> ACommand 'Agent 'AERcvFile -> CM () processAgentMsgRcvFile _corrId aFileId msg = do - fileId <- withStore (`getXFTPRcvFileDBId` AgentRcvFileId aFileId) - withFileLock "processAgentMsgRcvFile" fileId $ + (cRef_, fileId) <- withStore (`getXFTPRcvFileDBIds` AgentRcvFileId aFileId) + withEntityLock_ cRef_ $ withFileLock "processAgentMsgRcvFile" fileId $ withStore' (`getUserByARcvFileId` AgentRcvFileId aFileId) >>= \case Just user -> process user fileId `catchChatError` (toView . CRChatError (Just user)) _ -> do lift $ withAgent' (`xftpDeleteRcvFile` aFileId) throwChatError $ CENoRcvFileUser $ AgentRcvFileId aFileId where + withEntityLock_ :: Maybe ChatRef -> CM a -> CM a + withEntityLock_ cRef_ = case cRef_ of + Just (ChatRef CTDirect contactId) -> withContactLock "processAgentMsgRcvFile" contactId + Just (ChatRef CTGroup groupId) -> withGroupLock "processAgentMsgRcvFile" groupId + _ -> id process :: User -> FileTransferId -> CM () process user fileId = do ft <- withStore $ \db -> getRcvFileTransfer db user fileId diff --git a/src/Simplex/Chat/Store/Files.hs b/src/Simplex/Chat/Store/Files.hs index 81a5897c89..528290aa59 100644 --- a/src/Simplex/Chat/Store/Files.hs +++ b/src/Simplex/Chat/Store/Files.hs @@ -29,8 +29,8 @@ module Simplex.Chat.Store.Files createExtraSndFTDescrs, updateSndFTDeliveryXFTP, setSndFTAgentDeleted, - getXFTPSndFileDBId, - getXFTPRcvFileDBId, + getXFTPSndFileDBIds, + getXFTPRcvFileDBIds, updateFileCancelled, updateCIFileStatus, getSharedMsgIdByFileId, @@ -109,7 +109,7 @@ import Simplex.Chat.Store.Shared import Simplex.Chat.Types import Simplex.Chat.Util (week) import Simplex.Messaging.Agent.Protocol (AgentMsgId, ConnId, UserId) -import Simplex.Messaging.Agent.Store.SQLite (firstRow, maybeFirstRow) +import Simplex.Messaging.Agent.Store.SQLite (firstRow, firstRow', maybeFirstRow) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Crypto.File (CryptoFile (..), CryptoFileArgs (..)) @@ -336,15 +336,37 @@ setSndFTAgentDeleted db User {userId} fileId = do "UPDATE files SET agent_snd_file_deleted = 1, updated_at = ? WHERE user_id = ? AND file_id = ?" (currentTs, userId, fileId) -getXFTPSndFileDBId :: DB.Connection -> AgentSndFileId -> ExceptT StoreError IO FileTransferId -getXFTPSndFileDBId db aSndFileId = - ExceptT . firstRow fromOnly (SESndFileNotFoundXFTP aSndFileId) $ - DB.query db "SELECT file_id FROM files WHERE agent_snd_file_id = ?" (Only aSndFileId) +getXFTPSndFileDBIds :: DB.Connection -> AgentSndFileId -> ExceptT StoreError IO (Maybe ChatRef, FileTransferId) +getXFTPSndFileDBIds db aSndFileId = + ExceptT . firstRow' toFileRef (SESndFileNotFoundXFTP aSndFileId) $ + DB.query + db + [sql| + SELECT file_id, contact_id, group_id, note_folder_id + FROM files + WHERE agent_snd_file_id = ? + |] + (Only aSndFileId) -getXFTPRcvFileDBId :: DB.Connection -> AgentRcvFileId -> ExceptT StoreError IO FileTransferId -getXFTPRcvFileDBId db aRcvFileId = - ExceptT . firstRow fromOnly (SERcvFileNotFoundXFTP aRcvFileId) $ - DB.query db "SELECT file_id FROM rcv_files WHERE agent_rcv_file_id = ?" (Only aRcvFileId) +getXFTPRcvFileDBIds :: DB.Connection -> AgentRcvFileId -> ExceptT StoreError IO (Maybe ChatRef, FileTransferId) +getXFTPRcvFileDBIds db aRcvFileId = + ExceptT . firstRow' toFileRef (SERcvFileNotFoundXFTP aRcvFileId) $ + DB.query + db + [sql| + SELECT rf.file_id, f.contact_id, f.group_id, f.note_folder_id + FROM rcv_files rf + JOIN files f ON f.file_id = rf.file_id + WHERE rf.agent_rcv_file_id = ? + |] + (Only aRcvFileId) + +toFileRef :: (FileTransferId, Maybe Int64, Maybe Int64, Maybe Int64) -> Either StoreError (Maybe ChatRef, FileTransferId) +toFileRef = \case + (fileId, Just contactId, Nothing, Nothing) -> Right (Just $ ChatRef CTDirect contactId, fileId) + (fileId, Nothing, Just groupId, Nothing) -> Right (Just $ ChatRef CTGroup groupId, fileId) + (fileId, Nothing, Nothing, Just folderId) -> Right (Just $ ChatRef CTLocal folderId, fileId) + (fileId, _, _, _) -> Right (Nothing, fileId) updateFileCancelled :: MsgDirectionI d => DB.Connection -> User -> Int64 -> CIFileStatus d -> IO () updateFileCancelled db User {userId} fileId ciFileStatus = do diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 0d6592a311..8163bd336c 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -146,7 +146,6 @@ import Simplex.Messaging.Agent.Store.SQLite (firstRow, firstRow', maybeFirstRow) import qualified Simplex.Messaging.Agent.Store.SQLite.DB as DB import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Crypto.File (CryptoFile (..), CryptoFileArgs (..)) -import Simplex.Messaging.Crypto.Ratchet (PQSupport) import Simplex.Messaging.Util (eitherToMaybe) import UnliftIO.STM From 37e03a838cbdeb47d7f361cf951886e5865a51bf Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:49:04 +0400 Subject: [PATCH 02/19] core: forward group message before ack (fixes forwarding message that deleted connection causing error in ackMsg) (#4108) --- src/Simplex/Chat.hs | 45 ++++++++++++++++++++------------------- tests/ChatTests/Groups.hs | 13 +++++++++++ 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index f8285770e0..e13dbfcbff 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -2932,7 +2932,7 @@ callTimed ct aciContent = case aciContentCallStatus aciContent of Just callStatus | callComplete callStatus -> do - contactCITimed ct + contactCITimed ct _ -> pure Nothing where aciContentCallStatus :: ACIContent -> Maybe CICallStatus @@ -4269,12 +4269,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = Right (ACMsg _ chatMsg) -> processEvent chatMsg `catchChatError` \e -> toView $ CRChatError (Just user) e Left e -> toView $ CRChatError (Just user) (ChatError . CEException $ "error parsing chat message: " <> e) + forwardMsg_ `catchChatError` \_ -> pure () checkSendRcpt $ rights aChatMsgs - -- currently only a single message is forwarded - let GroupMember {memberRole = membershipMemRole} = membership - when (membershipMemRole >= GRAdmin && not (blockedByAdmin m)) $ case aChatMsgs of - [Right (ACMsg _ chatMsg)] -> forwardMsg_ chatMsg - _ -> pure () where aChatMsgs = parseChatMessages msgBody brokerTs = metaBrokerTs msgMeta @@ -4322,22 +4318,27 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = where aChatMsgHasReceipt (ACMsg _ ChatMessage {chatMsgEvent}) = hasDeliveryReceipt (toCMEventTag chatMsgEvent) - forwardMsg_ :: MsgEncodingI e => ChatMessage e -> CM () - forwardMsg_ chatMsg = - forM_ (forwardedGroupMsg chatMsg) $ \chatMsg' -> do - ChatConfig {highlyAvailable} <- asks config - -- members introduced to this invited member - introducedMembers <- - if memberCategory m == GCInviteeMember - then withStore' $ \db -> getForwardIntroducedMembers db vr user m highlyAvailable - else pure [] - -- invited members to which this member was introduced - invitedMembers <- withStore' $ \db -> getForwardInvitedMembers db vr user m highlyAvailable - let GroupMember {memberId} = m - ms = forwardedToGroupMembers (introducedMembers <> invitedMembers) chatMsg' - msg = XGrpMsgForward memberId chatMsg' brokerTs - unless (null ms) . void $ - sendGroupMessage' user gInfo ms msg + forwardMsg_ :: CM () + forwardMsg_ = do + let GroupMember {memberRole = membershipMemRole} = membership + when (membershipMemRole >= GRAdmin && not (blockedByAdmin m)) $ case aChatMsgs of + -- currently only a single message is forwarded + [Right (ACMsg _ chatMsg)] -> + forM_ (forwardedGroupMsg chatMsg) $ \chatMsg' -> do + ChatConfig {highlyAvailable} <- asks config + -- members introduced to this invited member + introducedMembers <- + if memberCategory m == GCInviteeMember + then withStore' $ \db -> getForwardIntroducedMembers db vr user m highlyAvailable + else pure [] + -- invited members to which this member was introduced + invitedMembers <- withStore' $ \db -> getForwardInvitedMembers db vr user m highlyAvailable + let GroupMember {memberId} = m + ms = forwardedToGroupMembers (introducedMembers <> invitedMembers) chatMsg' + msg = XGrpMsgForward memberId chatMsg' brokerTs + unless (null ms) . void $ + sendGroupMessage' user gInfo ms msg + _ -> pure () RCVD msgMeta msgRcpt -> withAckMessage' agentConnId msgMeta $ groupMsgReceived gInfo m conn msgMeta msgRcpt diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index ff577dc737..4d9d94e24d 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -120,6 +120,7 @@ chatGroupTests = do it "forward file (x.msg.file.descr)" testGroupMsgForwardFile it "forward role change (x.grp.mem.role)" testGroupMsgForwardChangeRole it "forward new member announcement (x.grp.mem.new)" testGroupMsgForwardNewMember + it "forward member leaving (x.grp.leave)" testGroupMsgForwardLeave describe "group history" $ do it "text messages" testGroupHistory it "history is sent when joining via group link" testGroupHistoryGroupLink @@ -4437,6 +4438,18 @@ testGroupMsgForwardNewMember = "dan (Daniel): member" ] +testGroupMsgForwardLeave :: HasCallStack => FilePath -> IO () +testGroupMsgForwardLeave = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + setupGroupForwarding3 "team" alice bob cath + + bob ##> "/leave #team" + bob <## "#team: you left the group" + bob <## "use /d #team to delete the group" + alice <## "#team: bob left the group" + cath <## "#team: bob left the group" + testGroupHistory :: HasCallStack => FilePath -> IO () testGroupHistory = testChat3 aliceProfile bobProfile cathProfile $ From 19fc44efae82a9cb299df6a30b566a607ef932fc Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Tue, 30 Apr 2024 07:53:27 +0100 Subject: [PATCH 03/19] rfc: commercial model for infrastructure operators (#4102) --- docs/rfcs/2024-04-26-commercial-model.md | 68 ++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 docs/rfcs/2024-04-26-commercial-model.md diff --git a/docs/rfcs/2024-04-26-commercial-model.md b/docs/rfcs/2024-04-26-commercial-model.md new file mode 100644 index 0000000000..841d800715 --- /dev/null +++ b/docs/rfcs/2024-04-26-commercial-model.md @@ -0,0 +1,68 @@ +# Commercial model for SimpleX communication network + +## Problem + +SimpleX two-tier network design provides a _potential_ for a much higher degree of decentralization and privacy than a p2p network can achieve even theoretically. This is a very strong statement, and its formal proof is out of scope of this document, please see the old comparison of SimpleX network and p2p network designs [here](../SIMPLEX.md#comparison-with-p2p-messaging-protocols). + +The main downside of most, if not all, p2p networks is the lack of (or very limited) asynchronous message delivery that is critically important both for the network usability and for privacy and protection against traffic correlation attacks. + +But while two-tier network design has a _potential_ for higher privacy, this potential is hard to realize as it does not have an in-built mechanism for network operator incentives. All SimpleX network relays preset in the app are operated by SimpleX Chat Ltd., and while there are probably over 1000 self-hosted and community-hosted messaging relays - not having a single register of such relays is important for true decentralization, so we cannot know the exact number - it is probably a valid argument that a substantial part of SimpleX network traffic is provided by preset relays. Again, while we don't know the exact share, it is probably not much less than 40-50% and probably not much more than 65-75% - which is a very large share in any case for a single entity. + +For SimpleX network to achieve the level of decentralization that is designed, the applications have to be able to offer multiple network operators via the app who have commercial incentives to operate these relays. + +Traditional commercial models for consumer Internet products rely on some of these ideas: +1. Offer service for free, sell users' data. We obviously had enough of such Internet and can't wait to see it implode, lose all users, and become illegal. +2. Create a cryptocurrency or issue cryptocurrency tokens, sell them for real money, and use this money to fund service operation. While many people believe that this is the future of the Web, calling it Web3, we see it as a technological dead end, that although it provides a great platform for speculation and a playground to test such ideas as smart contracts and consensus algorithms, all of which can be used outside of the context of cryptocurrency blockchains, is not a sustainable technological foundation for a general purpose communication or information management system due to its inherent regulatory risks and distorted commercial incentives. Moxie Marlinspike wrote [a good critique of Web3](https://moxie.org/2022/01/07/web3-first-impressions.html). +3. Freemium models where some users pay for the service and, effectively, sponsor the users of the free tier. This model is free from the downsides of the previous two options, and there are many commercial services operated on this model, but this model is suboptimal for privacy in the worst case, and in the best case it still does not achieve decentralization, as whoever charges the money (the app provider) should also provide the infrastructure. + +In the mentioned critique of Web3 Moxie wrote: _We should accept the premise that people will not run their own servers by designing systems that can distribute trust without having to distribute infrastructure_. + +This statement is interesting, as it contains the correct premise - that most people do not want to and won't run their own servers - but it reaches an incorrect and limited conclusion, that the only way to provide value is by figuring out how to decentralize the trust without decentralizing infrastructure. I completely disagree that this conclusion is the only one possible, and the offered solution actually offers a way for extreme infrastructure decentralization - when not just users are distributed across providers, as happens with federated designs, but each conversation between two users is supported by infrastructure of 4-6 different independent operators - and also provides commercial incentives for these operators. + +## Solution design requirements + +So, we want to find a solution that will: +1. Offer extreme decentralization, without any kind of central authority (unlike Tor that has central authority, and unlike p2p networks that have a single addressing space) or any kind of centralized state (unlike cryptocurrency blockchains that have a centralized single state that the whole network should reach consensus about). +2. Offer low barrier for entry for infrastructure operators. +3. Offer extreme data and infrastructure portability, when infrastructure operators offer standardized primitives used by client applications - such as messaging queues and file chunks in SimpleX network. Migrating from one operator to another should not be just possible or simple, it should happen continuously and automatically, all the time, without any user action, when files and conversations move from one set of operators to another, similarly to how data moves around on SSD drives - to balance the load on the whole network, to provide reliability and redundancy, and to ensure that infrastructure operators have zero control of users and their data, and have very limited knowledge of users activity. This limited knowledge both achieves users' privacy and reduces the legal responsibility of infrastructure operators to the level of network operators. +4. Offer commercially profitable model for infrastructure operators. + +If these requirements are satisfied it would achieve a radical shift of control from infrastructure operators of today (that is achieved via SaaS model, when infrastructure operators are also software vendors, and software is provided as a service, which seems to be the root cause of corruption of Internet services - the process that Cory Doctorow refers to as [enshittification](https://www.youtube.com/watch?v=q118B_QdP2k)) to the software users, who use client software to directly consume low level infrastructure primitives of commoditized infrastructure operators that have zero control of how these primitives are used, other than pricing, that can be determined in a competitive process (e.g., via the real-time reverse auction). + +## Solution concept + +There are three types of participants in the network: +- software vendors (e.g., SimpleX Chat ltd.). +- infrastructure operators - commercial entities that have agreement with software vendors - they run server software provided by software vendors. +- users - they run client software. + +These roles can obviously overlap, but strategically it is better if they don't, e.g. we would benefit from not operating infrastructure, and users would also achieve better metadata privacy by not running the servers. + +To use SimpleX network client software needs to provision simple infrastructure resources - such as, create a messaging queue to receive the messages, create or use a session from a sending proxy to a particular destination relay, or to upload a file chunk that will be stored for a defined number of days. These resources are very cheap to provide, their price could be a very tiny fraction of a cent. + +For the users' client software to be able to provision these resources, the software vendor will issue infrastructure certificates to the users. Some number of them can be provided for free, a larger number can be sold for a monetary payment (can be in-app purchase, or cryptocurrency payment, or any other process). Software vendor will keep a private record of issued certificates. Technically, certificates can be usual cryptographic certificates that sign a public key presented by the client (while the client holds the private key). + +These certificates cannot be used as a cryptocurrency, as there is no public record of all issued certificates, and they can only be "spent" once with the infrastructure operator that has a commercial agreement with a software vendor. + +When the client wants to provision infrastructure resource it signs the request using the private key (a public counterpart of which was signed by the vendor's root certificate) and present this signed request together with the client's certificate to infrastructure operator. Operator validates the signature and certificate using vendor's root certificate and immediately provisions the resource. + +Operator then within a limited time presents its own signed request for payment to the software vendor - it would include the original request, without specifying which resource was provisioned, but only confirming that it was to this vendor. Software vendor can either confirm the acceptance and void the certificate or inform the vendor that this certificate was previously used (double spend), in which case the operator will stop provisioning the resource. + +Pros: +- this design decouples payments from resource allocation, providing better privacy, and decentralizes the infrastructure. +- this design achieves extreme provider portability and lack of control of user and user data. + +Cons: +- this design creates a strong dependence on software vendor's payment infrastructure availability - even though there can be many software vendors using this approach in a compatible way, it still creates a strong dependence of client software functioning on a single vendor. +- as described, this design allows software vendor to correlate payments of a given software user to specific infrastructure operators. + +Problem 2 can be solved by using some sort of [zero-knowledge proofs](https://en.wikipedia.org/wiki/Non-interactive_zero-knowledge_proof), where infrastructure operator can prove to software vendor that 1) they received a valid request 2) software vendor can also prove that the same certificate was not presented before, but cannot determine which certificate it was. + +Problem 1 can possibly be solved by delegating the right to issue a limited number of certificate to infrastructure operators, and making all records in the private blockchain accessible and writable by the operators using the agreements with the vendor that would also be visible on this chain, so that the operators cannot issue more certificates than agreed. In this case the payments will be made not by the software vendor to the operators but by the operators to the vendor, by compensating the buy/sell price difference. + +This is a concept of design, rather than the actual design, and the details of cryptographic primitives and consensus algorithms for this chain are out of scope. It is important that this design limits the number of operations with each certificate to three: +1. certificate issued to the user, based on the rules agreed with the software vendor. +2. certificate is used as a micro-payment for infrastructure resource (it cannot be transferred to any other user without risks of double spend). +3. certificate can only be voided by software vendor (or delegate who issued it), so it cannot be used directly as a payment. + +If we see cryptocurrency as similar to money, with similar regulations, this cryptographic primitive is close to gift cards, that have zero monetary value and can be only exchanged to a specific resource/service, thus avoiding the usual regulatory risks, and also avoiding speculative hype that could decouple the value of the certificates from the price of the infrastructure. From 7cc86574fe61cb7fad329da223cf0dd5153ea765 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 2 May 2024 16:43:08 +0100 Subject: [PATCH 04/19] core: update simplexmq to 5.7.1.0 --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cabal.project b/cabal.project index 04e92734c8..e3a7628eb2 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: 935d2e25df80eed7761c48a01529b6c0da0d3baa + tag: 8d8010a62aef2241fec3876fcfe57d51456b2bc0 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index badbf49541..0b37e0eb20 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."935d2e25df80eed7761c48a01529b6c0da0d3baa" = "1gyis2zvxm6352x3myaxdifr9sy4fkhygwqmzgxvn669gmf4gx2n"; + "https://github.com/simplex-chat/simplexmq.git"."8d8010a62aef2241fec3876fcfe57d51456b2bc0" = "0x7fq33c0x7i9jjp42la3zkha1wk6s3bv7dkz9z39a02s9rfkfla"; "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"; From 5f501f1cb9f638ebcf57939b758d647dfbf28e95 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 2 May 2024 22:47:52 +0700 Subject: [PATCH 05/19] android, desktop: fix android video calls (#4118) --- .../src/commonMain/resources/assets/www/call.js | 14 ++++++++++++-- packages/simplex-chat-webrtc/src/call.ts | 13 +++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js index 218fe0c660..571c494c7c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js @@ -453,7 +453,11 @@ const processCommand = (function () { // For opus (where encodedFrame.type is not set) this is the TOC byte from // https://tools.ietf.org/html/rfc6716#section-3.1 var _a; - const capabilities = RTCRtpSender.getCapabilities("video"); + // Using RTCRtpReceiver instead of RTCRtpSender, see these lines: + // - if (!is_recv_codec && !is_send_codec) { + // + if (!is_recv_codec) { + // https://webrtc.googlesource.com/src.git/+/db2f52ba88cf9f98211df2dabb3f8aca9251c4a2%5E%21/ + const capabilities = RTCRtpReceiver.getCapabilities("video"); if (capabilities) { const { codecs } = capabilities; const selectedCodecIndex = codecs.findIndex((c) => c.mimeType === "video/VP8"); @@ -464,7 +468,13 @@ const processCommand = (function () { // Firefox doesn't have this function implemented: // https://bugzilla.mozilla.org/show_bug.cgi?id=1396922 if (((_a = t.sender.track) === null || _a === void 0 ? void 0 : _a.kind) === "video" && t.setCodecPreferences) { - t.setCodecPreferences(codecs); + try { + t.setCodecPreferences(codecs); + } + catch (error) { + // Shouldn't be here but in case something goes wrong, it will allow to make a call with auto-selected codecs + console.log("Failed to set codec preferences, trying without any preferences: " + error); + } } } } diff --git a/packages/simplex-chat-webrtc/src/call.ts b/packages/simplex-chat-webrtc/src/call.ts index e7788ac723..19682249e9 100644 --- a/packages/simplex-chat-webrtc/src/call.ts +++ b/packages/simplex-chat-webrtc/src/call.ts @@ -657,7 +657,11 @@ const processCommand = (function () { // For opus (where encodedFrame.type is not set) this is the TOC byte from // https://tools.ietf.org/html/rfc6716#section-3.1 - const capabilities = RTCRtpSender.getCapabilities("video") + // Using RTCRtpReceiver instead of RTCRtpSender, see these lines: + // - if (!is_recv_codec && !is_send_codec) { + // + if (!is_recv_codec) { + // https://webrtc.googlesource.com/src.git/+/db2f52ba88cf9f98211df2dabb3f8aca9251c4a2%5E%21/ + const capabilities = RTCRtpReceiver.getCapabilities("video") if (capabilities) { const {codecs} = capabilities const selectedCodecIndex = codecs.findIndex((c) => c.mimeType === "video/VP8") @@ -668,7 +672,12 @@ const processCommand = (function () { // Firefox doesn't have this function implemented: // https://bugzilla.mozilla.org/show_bug.cgi?id=1396922 if (t.sender.track?.kind === "video" && t.setCodecPreferences) { - t.setCodecPreferences(codecs) + try { + t.setCodecPreferences(codecs) + } catch (error) { + // Shouldn't be here but in case something goes wrong, it will allow to make a call with auto-selected codecs + console.log("Failed to set codec preferences, trying without any preferences: " + error) + } } } } From fb0718adacf969b0e43166758458a2996117b7d1 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 2 May 2024 21:40:08 +0100 Subject: [PATCH 06/19] core: forward agent errors without connections to UI (to show CRITICAL alerts) (#4120) --- src/Simplex/Chat.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index e13dbfcbff..a186649f72 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -3532,6 +3532,8 @@ processAgentMessage _ connId (DEL_RCVQ srv qId err_) = toView $ CRAgentRcvQueueDeleted (AgentConnId connId) srv (AgentQueueId qId) err_ processAgentMessage _ connId DEL_CONN = toView $ CRAgentConnDeleted (AgentConnId connId) +processAgentMessage _ "" (ERR e) = + toView $ CRChatError Nothing $ ChatErrorAgent e Nothing processAgentMessage corrId connId msg = do lockEntity <- critical (withStore (`getChatLockEntity` AgentConnId connId)) withEntityLock "processAgentMessage" lockEntity $ do From 535ff1d8361942162b9c031295830e7c462fb159 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 3 May 2024 03:41:15 +0700 Subject: [PATCH 07/19] actions: add macos aarch64 build and fix openssl include path (#4107) --- .github/workflows/build.yml | 41 +++++++++++++++++++++++++-------- scripts/ci/build-desktop-mac.sh | 2 +- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5a07a8722..c41fb4646a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -65,6 +65,11 @@ jobs: asset_name: simplex-chat-ubuntu-22_04-x86-64 desktop_asset_name: simplex-desktop-ubuntu-22_04-x86_64.deb - os: macos-latest + ghc: "9.6.3" + cache_path: ~/.cabal/store + asset_name: simplex-chat-macos-aarch64 + desktop_asset_name: simplex-desktop-macos-aarch64.dmg + - os: macos-13 ghc: "9.6.3" cache_path: ~/.cabal/store asset_name: simplex-chat-macos-x86-64 @@ -107,18 +112,36 @@ jobs: if: matrix.os == 'macos-latest' shell: bash run: | - echo "ignore-project: False" >> cabal.project.local - echo "package direct-sqlcipher" >> cabal.project.local - echo " extra-include-dirs: /usr/local/opt/openssl@1.1/include" >> cabal.project.local - echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local - echo " flags: +openssl" >> cabal.project.local + echo "ignore-project: False" >> cabal.project.local + echo "package simplexmq" >> cabal.project.local + echo " extra-include-dirs: /opt/homebrew/opt/openssl@1.1/include" >> cabal.project.local + echo " extra-lib-dirs: /opt/homebrew/opt/openssl@1.1/lib" >> cabal.project.local + echo "" >> cabal.project.local + echo "package direct-sqlcipher" >> cabal.project.local + echo " extra-include-dirs: /opt/homebrew/opt/openssl@1.1/include" >> cabal.project.local + echo " extra-lib-dirs: /opt/homebrew/opt/openssl@1.1/lib" >> cabal.project.local + echo " flags: +openssl" >> cabal.project.local + + - name: Unix prepare cabal.project.local for Mac + if: matrix.os == 'macos-13' + shell: bash + run: | + echo "ignore-project: False" >> cabal.project.local + echo "package simplexmq" >> cabal.project.local + echo " extra-include-dirs: /usr/local/opt/openssl@1.1/include" >> cabal.project.local + echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local + echo "" >> cabal.project.local + echo "package direct-sqlcipher" >> cabal.project.local + echo " extra-include-dirs: /usr/local/opt/openssl@1.1/include" >> cabal.project.local + echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local + echo " flags: +openssl" >> cabal.project.local - name: Install AppImage dependencies if: startsWith(github.ref, 'refs/tags/v') && matrix.asset_name && matrix.os == 'ubuntu-20.04' run: sudo apt install -y desktop-file-utils - name: Install pkg-config for Mac - if: matrix.os == 'macos-latest' + if: matrix.os == 'macos-latest' || matrix.os == 'macos-13' run: brew install pkg-config - name: Unix prepare cabal.project.local for Ubuntu @@ -190,7 +213,7 @@ jobs: - name: Mac build desktop id: mac_desktop_build - if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest' + if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'macos-latest' || matrix.os == 'macos-13') shell: bash env: APPLE_SIMPLEX_SIGNING_KEYCHAIN: ${{ secrets.APPLE_SIMPLEX_SIGNING_KEYCHAIN }} @@ -241,7 +264,7 @@ jobs: ${{ steps.linux_appimage_build.outputs.appimage_hash }} - name: Mac upload desktop package to release - if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest' + if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'macos-latest' || matrix.os == 'macos-13') uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} @@ -250,7 +273,7 @@ jobs: tag: ${{ github.ref }} - name: Mac update desktop package hash - if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest' + if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'macos-latest' || matrix.os == 'macos-13') uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/scripts/ci/build-desktop-mac.sh b/scripts/ci/build-desktop-mac.sh index 259b946228..9adea013b4 100755 --- a/scripts/ci/build-desktop-mac.sh +++ b/scripts/ci/build-desktop-mac.sh @@ -8,7 +8,7 @@ echo "desktop.mac.signing.keychain=/tmp/simplex.keychain" >> apps/multiplatform/ echo "desktop.mac.notarization.apple_id=$APPLE_SIMPLEX_NOTARIZATION_APPLE_ID" >> apps/multiplatform/local.properties echo "desktop.mac.notarization.password=$APPLE_SIMPLEX_NOTARIZATION_PASSWORD" >> apps/multiplatform/local.properties echo "desktop.mac.notarization.team_id=5NN7GUYB6T" >> apps/multiplatform/local.properties -echo "$APPLE_SIMPLEX_SIGNING_KEYCHAIN" | base64 --decode - > /tmp/simplex.keychain +echo "$APPLE_SIMPLEX_SIGNING_KEYCHAIN" | base64 --decode -o /tmp/simplex.keychain security unlock-keychain -p "" /tmp/simplex.keychain # Adding keychain to the list of keychains. From 15a226cfd1b0955900017e25ace408fa5c7eb5c4 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 3 May 2024 15:34:15 +0400 Subject: [PATCH 08/19] ui: limit length of member names in chat view (#4122) --- apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift | 5 ++++- apps/ios/Shared/Views/Chat/ChatView.swift | 1 + .../kotlin/chat/simplex/common/views/chat/ChatView.kt | 3 ++- .../chat/simplex/common/views/chat/item/FramedItemView.kt | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index ed724599be..95c3347f90 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -248,7 +248,10 @@ struct FramedItemView: View { Group { if let sender = qi.getSender(membership()) { VStack(alignment: .leading, spacing: 2) { - Text(sender).font(.caption).foregroundColor(.secondary) + Text(sender) + .font(.caption) + .foregroundColor(.secondary) + .lineLimit(1) ciQuotedMsgTextView(qi, lines: 2) } } else { diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 5ec69412a6..4055ca2b28 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -593,6 +593,7 @@ struct ChatView: View { Text(memberNames(member, prevMember, memCount)) .font(.caption) .foregroundStyle(.secondary) + .lineLimit(2) .padding(.leading, memberImageSize + 14) .padding(.top, 7) } 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 ff5364adc2..e6f90c1599 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 @@ -1003,7 +1003,8 @@ fun BoxWithConstraintsScope.ChatItemsList( Text( memberNames(member, prevMember, memCount), Modifier.padding(start = MEMBER_IMAGE_SIZE + 10.dp), - style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary) + style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary), + maxLines = 2 ) } Row( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt index a3b70e65ec..2ac97321c6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt @@ -76,7 +76,8 @@ fun FramedItemView( ) { Text( sender, - style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary) + style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary), + maxLines = 1 ) ciQuotedMsgTextView(qi, lines = 2) } From b6e57c0fa26b0bcda3d622d10f52b8acaf1a8bd0 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 5 May 2024 13:11:30 +0100 Subject: [PATCH 09/19] core: fix connection failure because of race condition when connecting via link or joining group via invitation (#4133) * core: fix connection failure because of race condition when connecting via link or joining group via invitation * fix race for connection via contact address * simplexmq --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat.hs | 37 ++++++++++++++++++++++++------------- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/cabal.project b/cabal.project index e3a7628eb2..8e1335028f 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: 8d8010a62aef2241fec3876fcfe57d51456b2bc0 + tag: ee8e4067b02c520a41b82ab972e262b24f58cd69 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 0b37e0eb20..6a0b2a5cff 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."8d8010a62aef2241fec3876fcfe57d51456b2bc0" = "0x7fq33c0x7i9jjp42la3zkha1wk6s3bv7dkz9z39a02s9rfkfla"; + "https://github.com/simplex-chat/simplexmq.git"."ee8e4067b02c520a41b82ab972e262b24f58cd69" = "1r59dpmb16gg5cc4kdxv1dfpl64ia093ki6mlfrdx6hz1bi01k02"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index a186649f72..8a3541af0a 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -1494,8 +1494,9 @@ processChatCommand' vr = \case Just (agentV, pqSup') -> do let chatV = agentToChatVersion agentV dm <- encodeConnInfoPQ pqSup' chatV $ XInfo profileToSend - connId <- withAgent $ \a -> joinConnection a (aUserId user) True cReq dm pqSup' subMode + connId <- withAgent $ \a -> prepareConnectionToJoin a (aUserId user) True cReq pqSup' conn <- withStore' $ \db -> createDirectConnection db user connId cReq ConnJoined (incognitoProfile $> profileToSend) subMode chatV pqSup' + void . withAgent $ \a -> joinConnection a (aUserId user) (Just connId) True cReq dm pqSup' subMode pure $ CRSentConfirmation user conn APIConnect userId incognito (Just (ACR SCMContact cReq)) -> withUserId userId $ \user -> connectViaContact user incognito cReq APIConnect _ _ Nothing -> throwChatError CEInvalidConnReq @@ -1748,12 +1749,13 @@ processChatCommand' vr = \case Just Connection {peerChatVRange} -> do subMode <- chatReadVar subscriptionMode dm <- encodeConnInfo $ XGrpAcpt membershipMemId - agentConnId <- withAgent $ \a -> joinConnection a (aUserId user) True connRequest dm PQSupportOff subMode + agentConnId <- withAgent $ \a -> prepareConnectionToJoin a (aUserId user) True connRequest PQSupportOff let chatV = vr `peerConnChatVersion` peerChatVRange withStore' $ \db -> do createMemberConnection db userId fromMember agentConnId chatV peerChatVRange subMode updateGroupMemberStatus db userId fromMember GSMemAccepted updateGroupMemberStatus db userId membership GSMemAccepted + void . withAgent $ \a -> joinConnection a (aUserId user) (Just agentConnId) True connRequest dm PQSupportOff subMode updateCIGroupInvitationStatus user g CIGISAccepted `catchChatError` \_ -> pure () pure $ CRUserAcceptedGroupSent user g {membership = membership {memberStatus = GSMemAccepted}} Nothing Nothing -> throwChatError $ CEContactNotActive ct @@ -2278,23 +2280,28 @@ processChatCommand' vr = \case where connect' groupLinkId cReqHash xContactId inGroup = do let pqSup = if inGroup then PQSupportOff else PQSupportOn - (connId, incognitoProfile, subMode, chatV) <- requestContact user incognito cReq xContactId inGroup pqSup + (connId, chatV) <- prepareContact user cReq pqSup + -- [incognito] generate profile to send + incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing + subMode <- chatReadVar subscriptionMode conn <- withStore' $ \db -> createConnReqConnection db userId connId cReqHash xContactId incognitoProfile groupLinkId subMode chatV pqSup + joinContact user connId cReq incognitoProfile xContactId inGroup pqSup chatV pure $ CRSentInvitation user conn incognitoProfile connectContactViaAddress :: User -> IncognitoEnabled -> Contact -> ConnectionRequestUri 'CMContact -> CM ChatResponse connectContactViaAddress user incognito ct cReq = withInvitationLock "connectContactViaAddress" (strEncode cReq) $ do newXContactId <- XContactId <$> drgRandomBytes 16 let pqSup = PQSupportOn - (connId, incognitoProfile, subMode, chatV) <- requestContact user incognito cReq newXContactId False pqSup + (connId, chatV) <- prepareContact user cReq pqSup let cReqHash = ConnReqUriHash . C.sha256Hash $ strEncode cReq + -- [incognito] generate profile to send + incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing + subMode <- chatReadVar subscriptionMode ct' <- withStore $ \db -> createAddressContactConnection db vr user ct connId cReqHash newXContactId incognitoProfile subMode chatV pqSup + joinContact user connId cReq incognitoProfile newXContactId False pqSup chatV pure $ CRSentInvitationToContact user ct' incognitoProfile - requestContact :: User -> IncognitoEnabled -> ConnectionRequestUri 'CMContact -> XContactId -> Bool -> PQSupport -> CM (ConnId, Maybe Profile, SubscriptionMode, VersionChat) - requestContact user incognito cReq xContactId inGroup pqSup = do - -- [incognito] generate profile to send - incognitoProfile <- if incognito then Just <$> liftIO generateRandomProfile else pure Nothing - let profileToSend = userProfileToSend user incognitoProfile Nothing inGroup + prepareContact :: User -> ConnectionRequestUri 'CMContact -> PQSupport -> CM (ConnId, VersionChat) + prepareContact user cReq pqSup = do -- 0) toggle disabled - PQSupportOff -- 1) toggle enabled, address supports PQ (connRequestPQSupport returns Just True) - PQSupportOn, enable support with compression -- 2) toggle enabled, address doesn't support PQ - PQSupportOn but without compression, with version range indicating support @@ -2302,10 +2309,14 @@ processChatCommand' vr = \case Nothing -> throwChatError CEInvalidConnReq Just (agentV, _) -> do let chatV = agentToChatVersion agentV - dm <- encodeConnInfoPQ pqSup chatV (XContact profileToSend $ Just xContactId) - subMode <- chatReadVar subscriptionMode - connId <- withAgent $ \a -> joinConnection a (aUserId user) True cReq dm pqSup subMode - pure (connId, incognitoProfile, subMode, chatV) + connId <- withAgent $ \a -> prepareConnectionToJoin a (aUserId user) True cReq pqSup + pure (connId, chatV) + joinContact :: User -> ConnId -> ConnectionRequestUri 'CMContact -> Maybe Profile -> XContactId -> Bool -> PQSupport -> VersionChat -> CM () + joinContact user connId cReq incognitoProfile xContactId inGroup pqSup chatV = do + let profileToSend = userProfileToSend user incognitoProfile Nothing inGroup + dm <- encodeConnInfoPQ pqSup chatV (XContact profileToSend $ Just xContactId) + subMode <- chatReadVar subscriptionMode + void . withAgent $ \a -> joinConnection a (aUserId user) (Just connId) True cReq dm pqSup subMode contactMember :: Contact -> [GroupMember] -> Maybe GroupMember contactMember Contact {contactId} = find $ \GroupMember {memberContactId = cId, memberStatus = s} -> From 2e18b97077593a926184010770d284c503ca9a7b Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Sun, 5 May 2024 22:30:17 +0700 Subject: [PATCH 10/19] android: enable Android 8 support (API 26) (#4132) --- apps/multiplatform/android/build.gradle.kts | 2 +- apps/multiplatform/common/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/multiplatform/android/build.gradle.kts b/apps/multiplatform/android/build.gradle.kts index e2a5b49d0b..4e279d3ccb 100644 --- a/apps/multiplatform/android/build.gradle.kts +++ b/apps/multiplatform/android/build.gradle.kts @@ -13,7 +13,7 @@ android { defaultConfig { applicationId = "chat.simplex.app" namespace = "chat.simplex.app" - minSdk = 28 + minSdk = 26 //noinspection OldTargetApi targetSdk = 33 // !!! diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index 42e4ac2591..1f55a7195c 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -113,7 +113,7 @@ android { compileSdk = 34 sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") defaultConfig { - minSdk = 28 + minSdk = 26 } testOptions.targetSdk = 33 lint.targetSdk = 33 From d832afa7e86ecf18d76cde754f4ab28119433b9f Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 5 May 2024 16:56:34 +0100 Subject: [PATCH 11/19] docs: calls without e2e encryption (#4134) --- docs/FAQ.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/FAQ.md b/docs/FAQ.md index 2484738808..a9f94b49eb 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -23,6 +23,7 @@ revision: 23.04.2024 - [I see image preview but cannot open the image](#i-see-image-preview-but-cannot-open-the-image) - [I cannot play a voice message](#i-cannot-play-a-voice-message) - [Audio or video calls do not connect](#audio-or-video-calls-do-not-connect) +- [Audio or video calls without e2e encryption](#audio-or-video-calls-without-e2e-encryption) - [I clicked the link to connect, but could not connect](#i-clicked-the-link-to-connect-but-could-not-connect) [Privacy and security](#privacy-and-security) @@ -161,6 +162,21 @@ If you can connect to the server, please report this issue to us privately, incl Thank you for helping us debug and improve calls. +### Audio or video calls without e2e encryption + +During the call, the app indicates whether or not the call has end-to-end encryption. + +If one of the call parties uses Android (or desktop) app, the call would use Android system webview (or browser). Some older systems do not support media stream encryption, in which case the call will connect without it. + +To determine whether it is the limitation of your, your contact's or both devices: +- if some of your calls have e2e encryption but some don't, then it's certainly the old webview version or browser of your contacts - please ask them to upgrade. +- if you are not sure, you can check at what point "no e2e encryption" appears: + - if it is shown when the call rings on your device, then your contact's device does not support call encryption. + - if it is shown on your screen as soon as you start the call, then your device does not support call encryption. + - if in the beginning of the call your device shows "e2e encryption" but when your contact accepts the call it changes to "no e2e encryption", then it is only your contact's device that does not support it. + +You need to upgrade webview (some Android systems allow it), Android system or the device to have support for e2e encryption in the calls - all modern webviews (and browsers) support it. + ### I clicked the link to connect, but could not connect If you confirmed the connection in the app, pending connection will be shown in the list of chats - you can assign the name to it, so you know who it was when your contact is connected (e.g., if they choose some name you don't recognize). From 26c5ed4caf4a36829893b5d4a06b352902217d4e Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 5 May 2024 17:43:09 +0100 Subject: [PATCH 12/19] core: 5.7.1.0 (simplexmq 5.7.2.0: reduce "ping" traffic, remove TLS timeouts) --- cabal.project | 2 +- package.yaml | 2 +- scripts/nix/sha256map.nix | 2 +- simplex-chat.cabal | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cabal.project b/cabal.project index 8e1335028f..a8d751d4b8 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: ee8e4067b02c520a41b82ab972e262b24f58cd69 + tag: 93fd424f86086c6f378b50e343f32ec47f8b0c3f source-repository-package type: git diff --git a/package.yaml b/package.yaml index 054cddd9be..7201b664ac 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 5.7.0.5 +version: 5.7.1.0 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 6a0b2a5cff..995d096223 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."ee8e4067b02c520a41b82ab972e262b24f58cd69" = "1r59dpmb16gg5cc4kdxv1dfpl64ia093ki6mlfrdx6hz1bi01k02"; + "https://github.com/simplex-chat/simplexmq.git"."93fd424f86086c6f378b50e343f32ec47f8b0c3f" = "1jijzj8k4pxv4ri76n1m1c576w0g78vl39z8x2mhyyfip7zcal4i"; "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 a72b51b82a..e9e1a4a723 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.7.0.5 +version: 5.7.1.0 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat From 156e41950a1101580e29f300d42303868dc46c63 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 5 May 2024 18:01:14 +0100 Subject: [PATCH 13/19] ios: update library --- apps/ios/SimpleX.xcodeproj/project.pbxproj | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index c5d3665824..cec89e8eea 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -68,11 +68,6 @@ 5C9329412929248A0090FFF9 /* ScanProtocolServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9329402929248A0090FFF9 /* ScanProtocolServer.swift */; }; 5C971E1D27AEBEF600C8A3CE /* ChatInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C971E1C27AEBEF600C8A3CE /* ChatInfoView.swift */; }; 5C971E2127AEBF8300C8A3CE /* ChatInfoImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C971E2027AEBF8300C8A3CE /* ChatInfoImage.swift */; }; - 5C9731F72BDC0C4F000538F2 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F22BDC0C4F000538F2 /* libffi.a */; }; - 5C9731F82BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F32BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a */; }; - 5C9731F92BDC0C4F000538F2 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F42BDC0C4F000538F2 /* libgmpxx.a */; }; - 5C9731FA2BDC0C4F000538F2 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F52BDC0C4F000538F2 /* libgmp.a */; }; - 5C9731FB2BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F62BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a */; }; 5C9A5BDB2871E05400A5B906 /* SetNotificationsMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9A5BDA2871E05400A5B906 /* SetNotificationsMode.swift */; }; 5C9C2DA52894777E00CC63B1 /* GroupProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9C2DA42894777E00CC63B1 /* GroupProfileView.swift */; }; 5C9C2DA7289957AE00CC63B1 /* AdvancedNetworkSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9C2DA6289957AE00CC63B1 /* AdvancedNetworkSettings.swift */; }; @@ -120,6 +115,11 @@ 5CD67B8F2B0E858A00C510B1 /* hs_init.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD67B8D2B0E858A00C510B1 /* hs_init.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5CD67B902B0E858A00C510B1 /* hs_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 5CD67B8E2B0E858A00C510B1 /* hs_init.c */; }; 5CDCAD482818589900503DA2 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDCAD472818589900503DA2 /* NotificationService.swift */; }; + 5CE0E8972BE7F144008D6E06 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE0E8922BE7F144008D6E06 /* libgmp.a */; }; + 5CE0E8982BE7F144008D6E06 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE0E8932BE7F144008D6E06 /* libgmpxx.a */; }; + 5CE0E8992BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE0E8942BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW-ghc9.6.3.a */; }; + 5CE0E89A2BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE0E8952BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW.a */; }; + 5CE0E89B2BE7F144008D6E06 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE0E8962BE7F144008D6E06 /* libffi.a */; }; 5CE2BA702845308900EC33A6 /* SimpleXChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; }; 5CE2BA712845308900EC33A6 /* SimpleXChat.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5CE2BA77284530BF00EC33A6 /* SimpleXChat.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CE2BA76284530BF00EC33A6 /* SimpleXChat.h */; }; @@ -346,11 +346,6 @@ 5C9329402929248A0090FFF9 /* ScanProtocolServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanProtocolServer.swift; sourceTree = ""; }; 5C971E1C27AEBEF600C8A3CE /* ChatInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatInfoView.swift; sourceTree = ""; }; 5C971E2027AEBF8300C8A3CE /* ChatInfoImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatInfoImage.swift; sourceTree = ""; }; - 5C9731F22BDC0C4F000538F2 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 5C9731F32BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a"; sourceTree = ""; }; - 5C9731F42BDC0C4F000538F2 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 5C9731F52BDC0C4F000538F2 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; - 5C9731F62BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a"; sourceTree = ""; }; 5C9A5BDA2871E05400A5B906 /* SetNotificationsMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetNotificationsMode.swift; sourceTree = ""; }; 5C9C2DA42894777E00CC63B1 /* GroupProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupProfileView.swift; sourceTree = ""; }; 5C9C2DA6289957AE00CC63B1 /* AdvancedNetworkSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedNetworkSettings.swift; sourceTree = ""; }; @@ -425,6 +420,11 @@ 5CDCAD7428188D2900503DA2 /* APITypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APITypes.swift; sourceTree = ""; }; 5CDCAD7D2818941F00503DA2 /* API.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = API.swift; sourceTree = ""; }; 5CDCAD80281A7E2700503DA2 /* Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = ""; }; + 5CE0E8922BE7F144008D6E06 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 5CE0E8932BE7F144008D6E06 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; + 5CE0E8942BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW-ghc9.6.3.a"; sourceTree = ""; }; + 5CE0E8952BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW.a"; sourceTree = ""; }; + 5CE0E8962BE7F144008D6E06 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; 5CE1330328E118CC00FFFD8C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = "de.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; 5CE1330428E118CC00FFFD8C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SimpleXChat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -529,13 +529,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 5CE0E8992BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW-ghc9.6.3.a in Frameworks */, + 5CE0E8982BE7F144008D6E06 /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, - 5C9731F92BDC0C4F000538F2 /* libgmpxx.a in Frameworks */, - 5C9731F82BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a in Frameworks */, - 5C9731F72BDC0C4F000538F2 /* libffi.a in Frameworks */, - 5C9731FA2BDC0C4F000538F2 /* libgmp.a in Frameworks */, + 5CE0E89A2BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW.a in Frameworks */, + 5CE0E89B2BE7F144008D6E06 /* libffi.a in Frameworks */, + 5CE0E8972BE7F144008D6E06 /* libgmp.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, - 5C9731FB2BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -601,11 +601,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 5C9731F22BDC0C4F000538F2 /* libffi.a */, - 5C9731F52BDC0C4F000538F2 /* libgmp.a */, - 5C9731F42BDC0C4F000538F2 /* libgmpxx.a */, - 5C9731F62BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a */, - 5C9731F32BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a */, + 5CE0E8962BE7F144008D6E06 /* libffi.a */, + 5CE0E8922BE7F144008D6E06 /* libgmp.a */, + 5CE0E8932BE7F144008D6E06 /* libgmpxx.a */, + 5CE0E8942BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW-ghc9.6.3.a */, + 5CE0E8952BE7F144008D6E06 /* libHSsimplex-chat-5.7.1.0-dbWFHyA3wYHsyiwKvX3TW.a */, ); path = Libraries; sourceTree = ""; From b8e8124fafd3619fd5f7f331a004e995c1b40571 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sun, 5 May 2024 18:57:52 +0100 Subject: [PATCH 14/19] ui: translations (#4135) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (Hungarian) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: summoner001 Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Hungarian) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: Ghost of Sparta Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Polish) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Polish) Currently translated at 99.9% (1740 of 1741 strings) Translated using Weblate (Polish) Currently translated at 99.1% (1727 of 1741 strings) Co-authored-by: B.O.S.S Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (German) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (German) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: mlanp Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Italian) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Italian) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: Random Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Spanish) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: No name Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Dutch) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: M1K4 Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Arabic) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: jonnysemon Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ Translation: SimpleX Chat/SimpleX Chat Android * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: 大王叫我来巡山 Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ Translation: SimpleX Chat/SimpleX Chat Android * Translated using Weblate (Japanese) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: Miyu Sakatsuki Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ Translation: SimpleX Chat/SimpleX Chat Android * Translated using Weblate (Czech) Currently translated at 98.1% (1709 of 1741 strings) Co-authored-by: zenobit Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ Translation: SimpleX Chat/SimpleX Chat Android * Translated using Weblate (Bulgarian) Currently translated at 100.0% (1741 of 1741 strings) Translated using Weblate (Bulgarian) Currently translated at 100.0% (1515 of 1515 strings) Co-authored-by: elgratea Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Turkish) Currently translated at 100.0% (1741 of 1741 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (1515 of 1515 strings) Co-authored-by: z0rden Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Hungarian) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (1741 of 1741 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (1741 of 1741 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (1515 of 1515 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: summoner001 Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/ Translation: SimpleX Chat/SimpleX Chat Android Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Japanese) Currently translated at 80.7% (1224 of 1515 strings) Translated using Weblate (Japanese) Currently translated at 80.3% (1218 of 1515 strings) Co-authored-by: koreirozzu Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/ Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Japanese) Currently translated at 80.3% (1218 of 1515 strings) Co-authored-by: a4318 Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/ Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Turkish) Currently translated at 100.0% (1515 of 1515 strings) Co-authored-by: xe1st Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/ Translation: SimpleX Chat/SimpleX Chat iOS * Translated using Weblate (Turkish) Currently translated at 100.0% (1741 of 1741 strings) Co-authored-by: J R Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/ Translation: SimpleX Chat/SimpleX Chat Android * Translated using Weblate (Persian) Currently translated at 9.8% (171 of 1741 strings) Translated using Weblate (Persian) Currently translated at 9.4% (164 of 1741 strings) Co-authored-by: Siavash Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ Translation: SimpleX Chat/SimpleX Chat Android * Translated using Weblate (Persian) Currently translated at 10.1% (176 of 1741 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (French) Currently translated at 100.0% (1741 of 1741 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1515 of 1515 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Persian) Currently translated at 11.9% (208 of 1741 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (Vietnamese) Currently translated at 8.5% (148 of 1741 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/vi/ * import/export localizations * tr revert --------- Co-authored-by: summoner001 Co-authored-by: Ghost of Sparta Co-authored-by: B.O.S.S Co-authored-by: mlanp Co-authored-by: Random Co-authored-by: No name Co-authored-by: M1K4 Co-authored-by: jonnysemon Co-authored-by: 大王叫我来巡山 Co-authored-by: Miyu Sakatsuki Co-authored-by: zenobit Co-authored-by: elgratea Co-authored-by: z0rden Co-authored-by: koreirozzu Co-authored-by: a4318 Co-authored-by: xe1st Co-authored-by: J R Co-authored-by: Siavash Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com> Co-authored-by: tuananh-ng <158744840+tuananh-ng@users.noreply.github.com> --- .../bg.xcloc/Localized Contents/bg.xliff | 10 + .../de.xcloc/Localized Contents/de.xliff | 5 +- .../es.xcloc/Localized Contents/es.xliff | 3 + .../fr.xcloc/Localized Contents/fr.xliff | 39 ++++ .../hu.xcloc/Localized Contents/hu.xliff | 191 ++++++++--------- .../it.xcloc/Localized Contents/it.xliff | 10 + .../ja.xcloc/Localized Contents/ja.xliff | 10 +- .../nl.xcloc/Localized Contents/nl.xliff | 3 + .../pl.xcloc/Localized Contents/pl.xliff | 39 ++++ .../tr.xcloc/Localized Contents/tr.xliff | 7 +- apps/ios/bg.lproj/Localizable.strings | 30 +++ apps/ios/de.lproj/Localizable.strings | 11 +- apps/ios/es.lproj/Localizable.strings | 9 + apps/ios/fr.lproj/Localizable.strings | 117 +++++++++++ apps/ios/hu.lproj/Localizable.strings | 193 +++++++++--------- .../hu.lproj/SimpleX--iOS--InfoPlist.strings | 2 +- apps/ios/it.lproj/Localizable.strings | 30 +++ apps/ios/ja.lproj/Localizable.strings | 22 +- apps/ios/nl.lproj/Localizable.strings | 9 + apps/ios/pl.lproj/Localizable.strings | 117 +++++++++++ apps/ios/tr.lproj/Localizable.strings | 13 +- .../commonMain/resources/MR/ar/strings.xml | 12 ++ .../commonMain/resources/MR/bg/strings.xml | 3 + .../commonMain/resources/MR/cs/strings.xml | 69 ++++++- .../commonMain/resources/MR/de/strings.xml | 3 + .../commonMain/resources/MR/es/strings.xml | 3 + .../commonMain/resources/MR/fa/strings.xml | 48 +++++ .../commonMain/resources/MR/fr/strings.xml | 26 +++ .../commonMain/resources/MR/hu/strings.xml | 171 ++++++++-------- .../commonMain/resources/MR/it/strings.xml | 11 + .../commonMain/resources/MR/ja/strings.xml | 3 + .../commonMain/resources/MR/nl/strings.xml | 3 + .../commonMain/resources/MR/pl/strings.xml | 16 ++ .../commonMain/resources/MR/tr/strings.xml | 5 +- .../commonMain/resources/MR/vi/strings.xml | 14 ++ .../resources/MR/zh-rCN/strings.xml | 3 + scripts/ios/export-localizations.sh | 2 +- 37 files changed, 975 insertions(+), 287 deletions(-) diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index 2887496f78..3d0bb2bf2c 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -2805,6 +2805,7 @@ This cannot be undone! Forward and save messages + Препращане и запазване на съобщения No comment provided by engineer. @@ -3174,6 +3175,7 @@ This cannot be undone! In-call sounds + Звуци по време на разговор No comment provided by engineer. @@ -3653,6 +3655,7 @@ This is your link for group %@! Message source remains private. + Източникът на съобщението остава скрит. No comment provided by engineer. @@ -3772,6 +3775,7 @@ This is your link for group %@! More reliable network connection. + По-надеждна мрежова връзка. No comment provided by engineer. @@ -3816,6 +3820,7 @@ This is your link for group %@! Network management + Управление на мрежата No comment provided by engineer. @@ -4371,6 +4376,7 @@ Error: %@ Profile images + Профилни изображения No comment provided by engineer. @@ -5195,6 +5201,7 @@ Error: %@ Shape profile images + Променете формата на профилните изображения No comment provided by engineer. @@ -5364,6 +5371,7 @@ Error: %@ Square, circle, or anything in between. + Квадрат, кръг или нещо между тях. No comment provided by engineer. @@ -6244,6 +6252,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. @@ -6263,6 +6272,7 @@ To connect, please ask your contact to create another connection link and check Will be enabled in direct chats! + Ще бъде активирано в личните чатове! No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 4f22a82e09..29384aecc4 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -4376,6 +4376,7 @@ Fehler: %@ Profile images + Profil-Bilder No comment provided by engineer. @@ -5200,6 +5201,7 @@ Fehler: %@ Shape profile images + Form der Profil-Bilder No comment provided by engineer. @@ -5369,6 +5371,7 @@ Fehler: %@ Square, circle, or anything in between. + Quadratisch, kreisförmig oder irgendetwas dazwischen. No comment provided by engineer. @@ -6029,7 +6032,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Use current profile - Nutzen Sie das aktuelle Profil + Das aktuelle Profil nutzen No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 61a5e235bc..5d2482ae27 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -4376,6 +4376,7 @@ Error: %@ Profile images + Imágenes del perfil No comment provided by engineer. @@ -5200,6 +5201,7 @@ Error: %@ Shape profile images + Dar forma a las imágenes de perfil No comment provided by engineer. @@ -5369,6 +5371,7 @@ Error: %@ Square, circle, or anything in between. + Cuadrada, circular o cualquier forma intermedia. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index d0e3babe6f..ac7fc8cc8b 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -745,6 +745,7 @@ Allow to send SimpleX links. + Autorise l'envoi de liens SimpleX. No comment provided by engineer. @@ -1089,6 +1090,7 @@ Cellular + Cellulaire No comment provided by engineer. @@ -2088,6 +2090,7 @@ Cette opération ne peut être annulée ! Download + Télécharger chat item action @@ -2202,6 +2205,7 @@ Cette opération ne peut être annulée ! Enabled for + Activé pour No comment provided by engineer. @@ -2726,6 +2730,7 @@ Cette opération ne peut être annulée ! Files and media not allowed + Fichiers et médias non autorisés No comment provided by engineer. @@ -2795,18 +2800,22 @@ Cette opération ne peut être annulée ! Forward + Transférer chat item action Forward and save messages + Transférer et sauvegarder des messages No comment provided by engineer. Forwarded + Transféré No comment provided by engineer. Forwarded from + Transféré depuis No comment provided by engineer. @@ -2921,6 +2930,7 @@ Cette opération ne peut être annulée ! Group members can send SimpleX links. + Les membres du groupe peuvent envoyer des liens SimpleX. No comment provided by engineer. @@ -3165,6 +3175,7 @@ Cette opération ne peut être annulée ! In-call sounds + Sons d'appel No comment provided by engineer. @@ -3644,6 +3655,7 @@ Voici votre lien pour le groupe %@ ! Message source remains private. + La source du message reste privée. No comment provided by engineer. @@ -3763,6 +3775,7 @@ Voici votre lien pour le groupe %@ ! More reliable network connection. + Connexion réseau plus fiable. No comment provided by engineer. @@ -3802,10 +3815,12 @@ Voici votre lien pour le groupe %@ ! Network connection + Connexion au réseau No comment provided by engineer. Network management + Gestion du réseau No comment provided by engineer. @@ -3920,6 +3935,7 @@ Voici votre lien pour le groupe %@ ! No network connection + Pas de connexion au réseau No comment provided by engineer. @@ -4138,6 +4154,7 @@ Voici votre lien pour le groupe %@ ! Other + Autres No comment provided by engineer. @@ -4359,6 +4376,7 @@ Erreur : %@ Profile images + Images de profil No comment provided by engineer. @@ -4403,6 +4421,7 @@ Erreur : %@ Prohibit sending SimpleX links. + Interdire l'envoi de liens SimpleX. No comment provided by engineer. @@ -4537,6 +4556,7 @@ Erreur : %@ Receiving concurrency + Réception simultanée No comment provided by engineer. @@ -4556,6 +4576,7 @@ Erreur : %@ Recipient(s) can't see who this message is from. + Le(s) destinataire(s) ne peut(vent) pas voir de qui provient ce message. No comment provided by engineer. @@ -4860,6 +4881,7 @@ Erreur : %@ Saved + Enregistré No comment provided by engineer. @@ -4869,6 +4891,7 @@ Erreur : %@ Saved from + Enregistré depuis No comment provided by engineer. @@ -5178,6 +5201,7 @@ Erreur : %@ Shape profile images + Images de profil modelable No comment provided by engineer. @@ -5302,10 +5326,12 @@ Erreur : %@ SimpleX links are prohibited in this group. + Les liens SimpleX sont interdits dans ce groupe. No comment provided by engineer. SimpleX links not allowed + Les liens SimpleX ne sont pas autorisés No comment provided by engineer. @@ -5345,6 +5371,7 @@ Erreur : %@ Square, circle, or anything in between. + Carré, circulaire, ou toute autre forme intermédiaire. No comment provided by engineer. @@ -6150,6 +6177,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Voice messages not allowed + Les messages vocaux ne sont pas autorisés No comment provided by engineer. @@ -6224,6 +6252,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien When connecting audio and video calls. + Lors des appels audio et vidéo. No comment provided by engineer. @@ -6238,14 +6267,17 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien WiFi + WiFi No comment provided by engineer. Will be enabled in direct chats! + Activé dans les discussions directes ! No comment provided by engineer. Wired ethernet + Ethernet câblé No comment provided by engineer. @@ -6733,6 +6765,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. admins + admins feature role @@ -6747,6 +6780,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. all members + tous les membres feature role @@ -7081,6 +7115,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. forwarded + transféré No comment provided by engineer. @@ -7292,6 +7327,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. owners + propriétaires feature role @@ -7346,10 +7382,12 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. saved + enregistré No comment provided by engineer. saved from %@ + enregistré à partir de %@ No comment provided by engineer. @@ -7494,6 +7532,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil. you + vous 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 791f21a440..9618bab95a 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -94,17 +94,17 @@ %@ and %@ connected - %@ és %@ csatlakozott + %@ és %@ kapcsolódott No comment provided by engineer. %1$@ at %2$@: - %1$@ %2$@-kor: + %1$@ ekkor: %2$@ copied message info, <sender> at <time> %@ connected - %@ csatlakozott + %@ kapcsolódott No comment provided by engineer. @@ -114,7 +114,7 @@ %@ is connected! - %@ csatlakozott! + %@ kapcsolódott! notification title @@ -139,7 +139,7 @@ %@ wants to connect! - %@ csatlakozni szeretne! + %@ kapcsolódni szeretne! notification title @@ -149,7 +149,7 @@ %@, %@ and %lld other members connected - %@, %@ és további %lld tag csatlakozott + %@, %@ és további %lld tag kapcsolódott No comment provided by engineer. @@ -319,7 +319,7 @@ (this device v%@) - (ez az eszköz v%@) + (ez az eszköz: v%@) No comment provided by engineer. @@ -329,7 +329,7 @@ **Add contact**: to create a new invitation link, or connect via a link you received. - **Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő csatlakozáshoz. + **Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz. No comment provided by engineer. @@ -585,7 +585,7 @@ Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts. - Azonosító hozzáadása a profilhoz, hogy az ismerősök megoszthassák másokkal. A profilfrissítés elküldésre kerül ismerősők számára. + Azonosító hozzáadása a profilhoz, hogy az ismerősei megoszthassák másokkal. A profilfrissítés elküldésre kerül az ismerősei számára. No comment provided by engineer. @@ -640,7 +640,7 @@ Admins can create the links to join groups. - Az adminok hivatkozásokat hozhatnak létre a csoportokhoz való csatlakozáshoz. + Az adminok hivatkozásokat hozhatnak létre a csoportokhoz való kapcsolódáshoz. No comment provided by engineer. @@ -665,7 +665,7 @@ All group members will remain connected. - Minden csoporttag csatlakoztatva marad. + Minden csoporttag kapcsolódva marad. No comment provided by engineer. @@ -685,7 +685,7 @@ All your contacts will remain connected. - Minden ismerős csatlakoztatva marad. + Minden ismerős kapcsolódva marad. No comment provided by engineer. @@ -795,7 +795,7 @@ Already connected? - Csatlakoztatva? + Már kapcsolódott? No comment provided by engineer. @@ -805,7 +805,7 @@ Already joining the group! - Csatlakozás folyamatban! + A csatlakozás folyamatban van a csoporthoz! No comment provided by engineer. @@ -920,7 +920,7 @@ Authentication is required before the call is connected, but you may miss calls. - A hívás csatlakoztatása előtt hitelesítésre van szükség, de előfordulhat, hogy nem tud hívásokat fogadni. + A hívás összekapcsolása előtt hitelesítésre van szükség, de előfordulhat, hogy lemarad a hívásokról. No comment provided by engineer. @@ -1070,12 +1070,12 @@ Cancel - Megszakítás + Mégse No comment provided by engineer. Cancel migration - Átköltöztetés megszakítása + Átköltöztetés visszavonása No comment provided by engineer. @@ -1350,17 +1350,17 @@ Ez az egyszer használatos hivatkozása! Connect via contact address - Csatlakozás ismerős azonosítója által + Kapcsolódás a kapcsolattartási azonosítón keresztül No comment provided by engineer. Connect via link - Csatlakozás egy hivatkozáson keresztül + Kapcsolódás egy hivatkozáson keresztül No comment provided by engineer. Connect via one-time link - Csatlakozás egyszer használatos hivatkozáson keresztül + Kapcsolódás egyszer használatos hivatkozáson keresztül No comment provided by engineer. @@ -1440,12 +1440,12 @@ Ez az egyszer használatos hivatkozása! Contact is connected - Ismerős csatlakozott + Ismerőse kapcsolódott notification Contact is not connected yet! - Az ismerős még nem csatlakozott! + Az ismerőse még nem kapcsolódott! No comment provided by engineer. @@ -2570,7 +2570,7 @@ Ez a művelet nem vonható vissza! Error stopping chat - Hiba a csevegés megszakításakor + Hiba a csevegés megállításakor No comment provided by engineer. @@ -2700,12 +2700,12 @@ Ez a művelet nem vonható vissza! File will be received when your contact completes uploading it. - A fájl akkor érkezik meg, amikor ismerőse befejezte annak feltöltést. + A fájl akkor érkezik meg, amikor a küldője befejezte annak feltöltését. No comment provided by engineer. File will be received when your contact is online, please wait or check later! - A fájl akkor érkezik meg, amint ismerőse online lesz, várjon, vagy ellenőrizze később! + A fájl akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később! No comment provided by engineer. @@ -3105,12 +3105,12 @@ Ez a művelet nem vonható vissza! Image will be received when your contact completes uploading it. - A kép akkor érkezik meg, amikor ismerőse befejezte annak feltöltését. + A kép akkor érkezik meg, amikor a küldője befejezte annak feltöltését. No comment provided by engineer. Image will be received when your contact is online, please wait or check later! - A kép akkor érkezik meg, amikor ismerős elérhető lesz, várjon vagy ellenőrizze később! + A kép akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később! No comment provided by engineer. @@ -3368,7 +3368,7 @@ Ez a művelet nem vonható vissza! It seems like you are already connected via this link. If it is not the case, there was an error (%@). - Úgy tűnik, már csatlakozott ezen a hivatkozáson keresztül. Ha ez nem így van, akkor hiba történt (%@). + Úgy tűnik, már kapcsolódott ezen a hivatkozáson keresztül. Ha ez nem így van, akkor hiba történt (%@). No comment provided by engineer. @@ -4004,17 +4004,17 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Onion hosts will be required for connection. Requires enabling VPN. - A csatlakozáshoz Onion host-okra lesz szükség. VPN engedélyezése szükséges. + A kapcsolódáshoz Onion kiszolgálókra lesz szükség. VPN engedélyezése szükséges. No comment provided by engineer. Onion hosts will be used when available. Requires enabling VPN. - Onion host-ok használata, ha azok rendelkezésre állnak. VPN engedélyezése szükséges. + Onion kiszolgálók használata, ha azok rendelkezésre állnak. VPN engedélyezése szükséges. No comment provided by engineer. Onion hosts will not be used. - Onion host-ok nem lesznek használva. + Onion kiszolgálók nem lesznek használva. No comment provided by engineer. @@ -4214,7 +4214,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz! Paste link to connect! - Hivatkozás beillesztése a csatlakozáshoz! + Hivatkozás beillesztése a kapcsolódáshoz! No comment provided by engineer. @@ -4376,6 +4376,7 @@ Hiba: %@ Profile images + Profilképek No comment provided by engineer. @@ -4585,12 +4586,12 @@ Hiba: %@ Reconnect all connected servers to force message delivery. It uses additional traffic. - Az összes csatlakoztatott kiszolgáló újrakapcsolása az üzenetek kézbesítésének kikényszerítéséhez. Ez további forgalmat használ. + Újrakapcsolódás az összes kiszolgálóhoz az üzenetek kézbesítésének kikényszerítéséhez. Ez további forgalmat használ. No comment provided by engineer. Reconnect servers? - Kiszolgálók újracsatlakoztatása? + Újrakapcsolódás a kiszolgálókhoz? No comment provided by engineer. @@ -5000,7 +5001,7 @@ Hiba: %@ Send direct message to connect - Közvetlen üzenet küldése a csatlakozáshoz + Közvetlen üzenet küldése a kapcsolódáshoz No comment provided by engineer. @@ -5200,6 +5201,7 @@ Hiba: %@ Shape profile images + Profilkép alakzat No comment provided by engineer. @@ -5219,7 +5221,7 @@ Hiba: %@ Share address with contacts? - Megosztja az azonosítót az ismerősökkel? + Megosztja az azonosítót az ismerőseivel? No comment provided by engineer. @@ -5304,7 +5306,7 @@ Hiba: %@ SimpleX contact address - SimpleX ismerős azonosítója + SimpleX kapcsolattartási azonosító simplex link type @@ -5369,6 +5371,7 @@ Hiba: %@ Square, circle, or anything in between. + Négyzet, kör vagy bármi a kettő között. No comment provided by engineer. @@ -5388,62 +5391,62 @@ Hiba: %@ Stop - Megszakítás + Megállítás No comment provided by engineer. Stop SimpleX - A SimpleX megszakítása + SimpleX megállítása authentication reason Stop chat - Csevegési szolgáltatás megszakítása + Csevegési szolgáltatás megállítása No comment provided by engineer. Stop chat to enable database actions - Csevegés megszakítása az adatbázis-műveletek engedélyezéséhez + Csevegés megállítása az adatbázis-műveletek engedélyezéséhez No comment provided by engineer. Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped. - A csevegés megszakítása a csevegőadatbázis exportálásához, importálásához vagy törléséhez. A csevegés megszakítása alatt nem tud üzeneteket fogadni és küldeni. + A csevegés megállítása a csevegő adatbázis exportálásához, importálásához vagy törléséhez. A csevegés megállítása alatt nem tud üzeneteket fogadni és küldeni. No comment provided by engineer. Stop chat? - Csevegési szolgáltatás megszakítása? + Csevegési szolgáltatás megállítása? No comment provided by engineer. Stop file - Fájl megszakítása + Fájl megállítása cancel file action Stop receiving file? - Fájl fogadás megszakítása? + Fájl fogadás megállítása? No comment provided by engineer. Stop sending file? - Fájl küldés megszakítása? + Fájl küldés megállítása? No comment provided by engineer. Stop sharing - Megosztás megszakítása + Megosztás megállítása No comment provided by engineer. Stop sharing address? - Címmegosztás megszakítása? + Címmegosztás megállítása? No comment provided by engineer. Stopping chat - Csevegés megszakítása + Csevegés megállítása folyamatban No comment provided by engineer. @@ -5498,7 +5501,7 @@ Hiba: %@ Tap to Connect - Koppintson a csatlakozáshoz + Koppintson a kapcsolódáshoz No comment provided by engineer. @@ -5600,7 +5603,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. The contact you shared this link with will NOT be able to connect! - Ismerőse NEM fog tudni csatlakozni, akivel megosztotta ezt a hivatkozást! + Ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni! No comment provided by engineer. @@ -5640,7 +5643,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. The profile is only shared with your contacts. - Profilja csak az ismerősök számára kerül megosztásra. + Profilja csak az ismerőseivel kerül megosztásra. No comment provided by engineer. @@ -5745,7 +5748,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő. To connect, your contact can scan QR code or use the link in the app. - A csatlakozáshoz az ismerős beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást. + A kapcsolódáshoz az ismerőse beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást. No comment provided by engineer. @@ -5797,7 +5800,7 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej Toggle incognito when connecting. - Inkognító mód csatlakozáskor. + Inkognitó mód kapcsolódáskor. No comment provided by engineer. @@ -5807,12 +5810,12 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej Trying to connect to the server used to receive messages from this contact (error: %@). - Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz (hiba: %@). + Kapcsolódási kísérlet ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál (hiba: %@). No comment provided by engineer. Trying to connect to the server used to receive messages from this contact. - Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz ettől az ismerőstől. + Kapcsolódási kísérlet ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál. No comment provided by engineer. @@ -5918,8 +5921,8 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. - Hacsak az ismerős nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt, hiba lehet – kérjük, jelentse. -A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsolati hivatkozást, és ellenőrizze, hogy a hálózati kapcsolat stabil-e. + Hacsak az ismerőse nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt, lehet hogy ez egy hiba – jelentse a problémát. +A kapcsolódáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsolati hivatkozást, és ellenőrizze, hogy a hálózati kapcsolat stabil-e. No comment provided by engineer. @@ -5964,7 +5967,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola Update .onion hosts setting? - Tor .onion host beállítások frissítése? + Tor .onion kiszolgálók beállításainak frissítése? No comment provided by engineer. @@ -5989,7 +5992,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola Updating this setting will re-connect the client to all servers. - A beállítás frissítésével a kliens újracsatlakozik az összes kiszolgálóhoz. + A beállítás frissítésével a kliens újrakapcsolódik az összes kiszolgálóhoz. No comment provided by engineer. @@ -6014,7 +6017,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola Use .onion hosts - Tor .onion hostok használata + Tor .onion kiszolgálók használata No comment provided by engineer. @@ -6074,7 +6077,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola Using .onion hosts requires compatible VPN provider. - A .onion hosztok használatához kompatibilis VPN szolgáltatóra van szükség. + A .onion kiszolgálók használatához kompatibilis VPN szolgáltatóra van szükség. No comment provided by engineer. @@ -6134,12 +6137,12 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola Video will be received when your contact completes uploading it. - A videó akkor érkezik meg, amikor az ismerőse befejezte annak feltöltését. + A videó akkor érkezik meg, amikor a küldője befejezte annak feltöltését. No comment provided by engineer. Video will be received when your contact is online, please wait or check later! - A videó akkor érkezik meg, amikor az ismerős elérhető, várjon, vagy ellenőrizze később! + A videó akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később! No comment provided by engineer. @@ -6254,7 +6257,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola When people request to connect, you can accept or reject it. - Csatlakozási kérelmek esetében, elfogadhatja vagy elutasíthatja azokat. + Amikor az emberek kapcsolódást kérelmeznek, ön elfogadhatja vagy elutasíthatja azokat. No comment provided by engineer. @@ -6339,12 +6342,12 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola You are already connecting to %@. - Már folyamatban van a csatlakozás ehhez: %@. + Már folyamatban van a kapcsolódás ehhez: %@. No comment provided by engineer. You are already connecting via this one-time link! - Már csatlakozik ezen az egyszer használatos hivatkozáson keresztül! + A kapcsolódás már folyamatban van ezen az egyszer használatos hivatkozáson keresztül! No comment provided by engineer. @@ -6354,17 +6357,17 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola You are already joining the group %@. - Már folyamatban van a csatlakozás a csoporthoz %@. + A csatlakozás már folyamatban van a(z) %@ csoporthoz. No comment provided by engineer. You are already joining the group via this link! - Már csatlakozott a csoporthoz ezen a hivatkozáson keresztül! + A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül! No comment provided by engineer. You are already joining the group via this link. - Ezen a hivatkozáson keresztül már csatlakozik a csoporthoz. + A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül. No comment provided by engineer. @@ -6376,7 +6379,7 @@ Csatlakozási kérés megismétlése? You are connected to the server used to receive messages from this contact. - Kiszolgálóhoz történő csatlakozás, mely az adott ismerőstől érkező üzenetek fogadására szolgál. + Már kapcsolódott ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál. No comment provided by engineer. @@ -6436,12 +6439,12 @@ Csatlakozási kérés megismétlése? You can share this address with your contacts to let them connect with **%@**. - Megoszthatja ezt a hivatkozást ismerőseivel, hogy kapcsolatba léphessenek önnel a **%@** nevű profilján keresztül. + Megoszthatja ezt az azonosítót az ismerőseivel, hogy kapcsolatba léphessenek önnel a **%@** nevű profilján keresztül. No comment provided by engineer. You can share your address as a link or QR code - anybody can connect to you. - Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki csatlakozhat önhöz. + Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki kapcsolódhat önhöz. No comment provided by engineer. @@ -6481,13 +6484,13 @@ Csatlakozási kérés megismétlése? You have already requested connection via this address! - Már kért egy csatlakozást ezen az azonosítón keresztül! + Már kért egy kapcsolódási kérelmet ezen az azonosítón keresztül! No comment provided by engineer. You have already requested connection! Repeat connection request? - Már kérelmezte a csatlakozást! + Már kért egy kapcsolódási kérelmet! Kapcsolódási kérés megismétlése? No comment provided by engineer. @@ -6538,22 +6541,22 @@ Kapcsolódási kérés megismétlése? You will be connected to group when the group host's device is online, please wait or check later! - Akkor tud csatlakozni a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később! + Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később! No comment provided by engineer. You will be connected when group link host's device is online, please wait or check later! - Akkor lesz csatlakoztatva, amikor a csoportos hivatkozás tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később! + Akkor lesz kapcsolódva, amikor a csoportos hivatkozás tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később! No comment provided by engineer. You will be connected when your connection request is accepted, please wait or check later! - Akkor lesz csatlakoztatva, ha a csatlakozási kérelme elfogadásra került, várjon, vagy ellenőrizze később! + Akkor lesz kapcsolódva, ha a kapcsolódási kérelme elfogadásra kerül, várjon, vagy ellenőrizze később! No comment provided by engineer. You will be connected when your contact's device is online, please wait or check later! - Akkor csatlakozik, amikor az ismerős eszköze online lesz, várjon, vagy ellenőrizze később! + Akkor le kapcsolódva, amikor az ismerőse eszköze online lesz, várjon, vagy ellenőrizze később! No comment provided by engineer. @@ -6563,7 +6566,7 @@ Kapcsolódási kérés megismétlése? You will connect to all group members. - Csatlakozni fog a csoport összes tagjához. + Kapcsolódni fog a csoport összes tagjához. No comment provided by engineer. @@ -6578,7 +6581,7 @@ Kapcsolódási kérés megismétlése? You won't lose your contacts if you later delete your address. - Nem veszíti el ismerőseit, ha később törli az azonosítóját. + Nem veszíti el az ismerőseit, ha később törli az azonosítóját. No comment provided by engineer. @@ -6655,7 +6658,7 @@ Megszakíthatja ezt a kapcsolatfelvételt és törölheti az ismerőst (ezt kés Your contacts will remain connected. - Az ismerősök továbbra is csatlakoztatva maradnak. + Az ismerősei továbbra is kapcsolódva maradnak. No comment provided by engineer. @@ -6857,7 +6860,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. changed role of %1$@ to %2$@ - %1$@ szerepköre megváltozott erre: %2$@ + %1$@ szerepkörét megváltoztatta erre: %2$@ rcv group event chat item @@ -6887,7 +6890,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. connect to SimpleX Chat developers. - Csatlakozás a SimpleX Chat fejlesztőkhöz. + Kapcsolódás a SimpleX Chat fejlesztőkhöz. No comment provided by engineer. @@ -6922,7 +6925,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. connecting (introduction invitation) - csatlakozás (bemutatkozás meghívás) + kapcsolódás (bemutatkozó meghívó) No comment provided by engineer. @@ -6947,7 +6950,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. contact %1$@ changed to %2$@ - %1$@ ismerősének neve megváltozott erre: %2$@ + %1$@ megváltoztatta a nevét erre: %2$@ profile update event chat item @@ -7207,7 +7210,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. join as %@ - csatlakozás mint %@ + csatlakozás mint: %@ No comment provided by engineer. @@ -7227,7 +7230,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. member %1$@ changed to %2$@ - %1$@ tag megváltoztatta a nevét erre: %2$@ + %1$@ megváltoztatta a nevét erre: %2$@ profile update event chat item @@ -7364,7 +7367,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. removed contact address - törölt csatlakozási cím + törölt kapcsolattartási azonosító profile update event chat item @@ -7404,7 +7407,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. security code changed - biztonsági kód megváltozott + a biztonsági kód megváltozott chat item text @@ -7414,7 +7417,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. set new contact address - új kapcsolattartási cím beállítása + új kapcsolattartási azonosító beállítása profile update event chat item @@ -7479,7 +7482,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. via contact address link - ismerős azonosítójának hivatkozásán keresztül + kapcsolattartási azonosító-hivatkozáson keresztül chat list item description @@ -7564,7 +7567,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. you changed role of %1$@ to %2$@ - megváltoztatta %1$@ szerepkörét erre: %@ + %1$@ szerepkörét megváltoztatta erre: %@ snd group event chat item @@ -7616,7 +7619,7 @@ A SimpleX kiszolgálók nem látjhatják profilját. SimpleX needs camera access to scan QR codes to connect to other users and for video calls. - A SimpleX-nek kamera-hozzáférésre van szüksége a QR-kódok beolvasásához, hogy csatlakozhasson más felhasználókhoz és videohívásokhoz. + A SimpleX-nek kamera-hozzáférésre van szüksége a QR-kódok beolvasásához, hogy kapcsolódhasson más felhasználókhoz és videohívásokhoz. Privacy - Camera Usage Description 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 9bb90886f8..a5fe0ec830 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -2805,6 +2805,7 @@ Non è reversibile! Forward and save messages + Inoltra e salva i messaggi No comment provided by engineer. @@ -3174,6 +3175,7 @@ Non è reversibile! In-call sounds + Suoni nelle chiamate No comment provided by engineer. @@ -3653,6 +3655,7 @@ Questo è il tuo link per il gruppo %@! Message source remains private. + La fonte del messaggio resta privata. No comment provided by engineer. @@ -3772,6 +3775,7 @@ Questo è il tuo link per il gruppo %@! More reliable network connection. + Connessione di rete più affidabile. No comment provided by engineer. @@ -3816,6 +3820,7 @@ Questo è il tuo link per il gruppo %@! Network management + Gestione della rete No comment provided by engineer. @@ -4371,6 +4376,7 @@ Errore: %@ Profile images + Immagini del profilo No comment provided by engineer. @@ -5195,6 +5201,7 @@ Errore: %@ Shape profile images + Forma delle immagini del profilo No comment provided by engineer. @@ -5364,6 +5371,7 @@ Errore: %@ Square, circle, or anything in between. + Quadrata, circolare o qualsiasi forma tra le due. No comment provided by engineer. @@ -6244,6 +6252,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e When connecting audio and video calls. + Quando si connettono le chiamate audio e video. No comment provided by engineer. @@ -6263,6 +6272,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Will be enabled in direct chats! + Viene attivata nelle chat dirette! 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 9f9915c0f9..3f32998707 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -379,12 +379,12 @@ **e2e encrypted** audio call - **e2e 暗号化**音声通話 + **エンドツーエンド暗号化済み**の音声通話 No comment provided by engineer. **e2e encrypted** video call - **e2e暗号化**ビデオ通話 + **エンドツーエンド暗号化済み**の テレビ電話 通話 No comment provided by engineer. @@ -434,6 +434,7 @@ 0 sec + 0 秒 time to disappear @@ -684,6 +685,7 @@ All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays. + すべての連絡先、会話、ファイルは安全に暗号化され、設定されたXFTPリレーに分割でアップロードされます。 No comment provided by engineer. @@ -733,6 +735,7 @@ Allow to send SimpleX links. + SimpleXリンクの送信を許可。 No comment provided by engineer. @@ -787,10 +790,12 @@ Already connecting! + 既に接続中です! No comment provided by engineer. Already joining the group! + すでにグループに参加しています! No comment provided by engineer. @@ -815,6 +820,7 @@ App data migration + アプリデータの移行 No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index f4056e359e..c5a9ba4ea8 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -4376,6 +4376,7 @@ Fout: %@ Profile images + Profiel afbeeldingen No comment provided by engineer. @@ -5200,6 +5201,7 @@ Fout: %@ Shape profile images + Vorm profiel afbeeldingen No comment provided by engineer. @@ -5369,6 +5371,7 @@ Fout: %@ Square, circle, or anything in between. + Vierkant, cirkel of iets daartussenin. 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 b5c60c2e1e..d71bd5843a 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -745,6 +745,7 @@ Allow to send SimpleX links. + Zezwól na wysyłanie linków SimpleX. No comment provided by engineer. @@ -1089,6 +1090,7 @@ Cellular + Sieć komórkowa No comment provided by engineer. @@ -2088,6 +2090,7 @@ To nie może być cofnięte! Download + Pobierz chat item action @@ -2202,6 +2205,7 @@ To nie może być cofnięte! Enabled for + Włączony dla No comment provided by engineer. @@ -2726,6 +2730,7 @@ To nie może być cofnięte! Files and media not allowed + Pliki i multimedia nie są dozwolone No comment provided by engineer. @@ -2795,18 +2800,22 @@ To nie może być cofnięte! Forward + Przekaż dalej chat item action Forward and save messages + Przesyłaj dalej i zapisuj wiadomości No comment provided by engineer. Forwarded + Przekazane dalej No comment provided by engineer. Forwarded from + Przekazane dalej od No comment provided by engineer. @@ -2921,6 +2930,7 @@ To nie może być cofnięte! Group members can send SimpleX links. + Członkowie grupy mogą wysyłać linki SimpleX. No comment provided by engineer. @@ -3165,6 +3175,7 @@ To nie może być cofnięte! In-call sounds + Dźwięki w rozmowie No comment provided by engineer. @@ -3644,6 +3655,7 @@ To jest twój link do grupy %@! Message source remains private. + Źródło wiadomości pozostaje prywatne. No comment provided by engineer. @@ -3763,6 +3775,7 @@ To jest twój link do grupy %@! More reliable network connection. + Bardziej niezawodne połączenia sieciowe. No comment provided by engineer. @@ -3802,10 +3815,12 @@ To jest twój link do grupy %@! Network connection + Połączenie z siecią No comment provided by engineer. Network management + Zarządzenie sieciowe No comment provided by engineer. @@ -3920,6 +3935,7 @@ To jest twój link do grupy %@! No network connection + Brak połączenia z siecią No comment provided by engineer. @@ -4138,6 +4154,7 @@ To jest twój link do grupy %@! Other + Inne No comment provided by engineer. @@ -4359,6 +4376,7 @@ Błąd: %@ Profile images + Zdjęcia profilowe No comment provided by engineer. @@ -4403,6 +4421,7 @@ Błąd: %@ Prohibit sending SimpleX links. + Zabroń wysyłania linków SimpleX. No comment provided by engineer. @@ -4537,6 +4556,7 @@ Błąd: %@ Receiving concurrency + Konkurencyjne odbieranie No comment provided by engineer. @@ -4556,6 +4576,7 @@ Błąd: %@ Recipient(s) can't see who this message is from. + Odbiorca/y nie mogą zobaczyć od kogo jest ta wiadomość. No comment provided by engineer. @@ -4860,6 +4881,7 @@ Błąd: %@ Saved + Zapisane No comment provided by engineer. @@ -4869,6 +4891,7 @@ Błąd: %@ Saved from + Zapisane od No comment provided by engineer. @@ -5178,6 +5201,7 @@ Błąd: %@ Shape profile images + Kształtuj obrazy profilowe No comment provided by engineer. @@ -5302,10 +5326,12 @@ Błąd: %@ SimpleX links are prohibited in this group. + Linki SimpleX są zablokowane na tej grupie. No comment provided by engineer. SimpleX links not allowed + Linki SimpleX są niedozwolone No comment provided by engineer. @@ -5345,6 +5371,7 @@ Błąd: %@ Square, circle, or anything in between. + Kwadrat, okrąg lub cokolwiek pomiędzy. No comment provided by engineer. @@ -6150,6 +6177,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Voice messages not allowed + Wiadomości głosowe są niedozwolone No comment provided by engineer. @@ -6224,6 +6252,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc When connecting audio and video calls. + Podczas łączenia połączeń audio i wideo. No comment provided by engineer. @@ -6238,14 +6267,17 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc WiFi + WiFi No comment provided by engineer. Will be enabled in direct chats! + Zostanie włączone w czatach bezpośrednich! No comment provided by engineer. Wired ethernet + Połączenie ethernet (po kablu) No comment provided by engineer. @@ -6733,6 +6765,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. admins + administratorzy feature role @@ -6747,6 +6780,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. all members + wszyscy członkowie feature role @@ -7081,6 +7115,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. forwarded + przekazane dalej No comment provided by engineer. @@ -7292,6 +7327,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. owners + właściciele feature role @@ -7346,10 +7382,12 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. saved + zapisane No comment provided by engineer. saved from %@ + zapisane od %@ No comment provided by engineer. @@ -7494,6 +7532,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. you + Ty No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index 1d0783c5e5..62c6f39d80 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -4376,6 +4376,7 @@ Hata: %@ Profile images + Profil resimleri No comment provided by engineer. @@ -4525,7 +4526,7 @@ Hata: %@ Receipts are disabled - Makbuzlar devre dışı bırakıldı + Gönderildi bilgisi devre dışı bırakıldı No comment provided by engineer. @@ -5065,7 +5066,7 @@ Hata: %@ Sending delivery receipts will be enabled for all contacts. - Teslimat makbuzlarının gönderilmesi tüm kişiler için etkinleştirilecektir. + Gönderildi bilgisi tüm kişiler için etkinleştirilecektir. No comment provided by engineer. @@ -5200,6 +5201,7 @@ Hata: %@ Shape profile images + Profil resimlerini şekillendir No comment provided by engineer. @@ -5369,6 +5371,7 @@ Hata: %@ Square, circle, or anything in between. + Kare,daire, veya aralarında herhangi birşey. No comment provided by engineer. diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index 7f37591861..06d9f1f43e 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -1893,6 +1893,9 @@ /* chat item action */ "Forward" = "Препрати"; +/* No comment provided by engineer. */ +"Forward and save messages" = "Препращане и запазване на съобщения"; + /* No comment provided by engineer. */ "forwarded" = "препратено"; @@ -2124,6 +2127,9 @@ /* No comment provided by engineer. */ "In reply to" = "В отговор на"; +/* No comment provided by engineer. */ +"In-call sounds" = "Звуци по време на разговор"; + /* No comment provided by engineer. */ "Incognito" = "Инкогнито"; @@ -2469,6 +2475,9 @@ /* notification */ "message received" = "получено съобщение"; +/* No comment provided by engineer. */ +"Message source remains private." = "Източникът на съобщението остава скрит."; + /* No comment provided by engineer. */ "Message text" = "Текст на съобщението"; @@ -2553,6 +2562,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." = "Най-вероятно тази връзка е изтрита."; @@ -2577,6 +2589,9 @@ /* No comment provided by engineer. */ "Network connection" = "Мрежова връзка"; +/* No comment provided by engineer. */ +"Network management" = "Управление на мрежата"; + /* No comment provided by engineer. */ "Network settings" = "Мрежови настройки"; @@ -2945,6 +2960,9 @@ /* No comment provided by engineer. */ "Profile image" = "Профилно изображение"; +/* No comment provided by engineer. */ +"Profile images" = "Профилни изображения"; + /* No comment provided by engineer. */ "Profile name" = "Име на профила"; @@ -3488,6 +3506,9 @@ /* No comment provided by engineer. */ "Settings" = "Настройки"; +/* No comment provided by engineer. */ +"Shape profile images" = "Променете формата на профилните изображения"; + /* chat item action */ "Share" = "Сподели"; @@ -3590,6 +3611,9 @@ /* notification title */ "Somebody" = "Някой"; +/* No comment provided by engineer. */ +"Square, circle, or anything in between." = "Квадрат, кръг или нещо между тях."; + /* chat item text */ "standard end-to-end encryption" = "стандартно криптиране от край до край"; @@ -4172,6 +4196,9 @@ /* No comment provided by engineer. */ "When available" = "Когато са налични"; +/* No comment provided by engineer. */ +"When connecting audio and video calls." = "При свързване на аудио и видео разговори."; + /* No comment provided by engineer. */ "When people request to connect, you can accept or reject it." = "Когато хората искат да се свържат с вас, можете да ги приемете или отхвърлите."; @@ -4181,6 +4208,9 @@ /* 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"; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 933bb5e02b..5fc393fa1f 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -2960,6 +2960,9 @@ /* No comment provided by engineer. */ "Profile image" = "Profilbild"; +/* No comment provided by engineer. */ +"Profile images" = "Profil-Bilder"; + /* No comment provided by engineer. */ "Profile name" = "Profilname"; @@ -3503,6 +3506,9 @@ /* No comment provided by engineer. */ "Settings" = "Einstellungen"; +/* No comment provided by engineer. */ +"Shape profile images" = "Form der Profil-Bilder"; + /* chat item action */ "Share" = "Teilen"; @@ -3605,6 +3611,9 @@ /* notification title */ "Somebody" = "Jemand"; +/* No comment provided by engineer. */ +"Square, circle, or anything in between." = "Quadratisch, kreisförmig oder irgendetwas dazwischen."; + /* chat item text */ "standard end-to-end encryption" = "Standard-Ende-zu-Ende-Verschlüsselung"; @@ -4020,7 +4029,7 @@ "Use chat" = "Verwenden Sie Chat"; /* No comment provided by engineer. */ -"Use current profile" = "Nutzen Sie das aktuelle Profil"; +"Use current profile" = "Das aktuelle Profil nutzen"; /* No comment provided by engineer. */ "Use for new connections" = "Für neue Verbindungen nutzen"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 3482dfe262..8a61d6c438 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -2960,6 +2960,9 @@ /* No comment provided by engineer. */ "Profile image" = "Imagen del perfil"; +/* No comment provided by engineer. */ +"Profile images" = "Imágenes del perfil"; + /* No comment provided by engineer. */ "Profile name" = "Nombre del perfil"; @@ -3503,6 +3506,9 @@ /* No comment provided by engineer. */ "Settings" = "Configuración"; +/* No comment provided by engineer. */ +"Shape profile images" = "Dar forma a las imágenes de perfil"; + /* chat item action */ "Share" = "Compartir"; @@ -3605,6 +3611,9 @@ /* notification title */ "Somebody" = "Alguien"; +/* No comment provided by engineer. */ +"Square, circle, or anything in between." = "Cuadrada, circular o cualquier forma intermedia."; + /* chat item text */ "standard end-to-end encryption" = "cifrado estándar de extremo a extremo"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 264a0b1299..5e6c9c1b40 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -389,6 +389,9 @@ /* member role */ "admin" = "admin"; +/* feature role */ +"admins" = "admins"; + /* No comment provided by engineer. */ "Admins can block a member for all." = "Les admins peuvent bloquer un membre pour tous."; @@ -416,6 +419,9 @@ /* No comment provided by engineer. */ "All group members will remain connected." = "Tous les membres du groupe resteront connectés."; +/* feature role */ +"all members" = "tous les membres"; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone!" = "Tous les messages seront supprimés - il n'est pas possible de revenir en arrière !"; @@ -464,6 +470,9 @@ /* No comment provided by engineer. */ "Allow to send files and media." = "Permet l'envoi de fichiers et de médias."; +/* No comment provided by engineer. */ +"Allow to send SimpleX links." = "Autorise l'envoi de liens SimpleX."; + /* No comment provided by engineer. */ "Allow to send voice messages." = "Autoriser l'envoi de messages vocaux."; @@ -707,6 +716,9 @@ /* No comment provided by engineer. */ "Cannot receive file" = "Impossible de recevoir le fichier"; +/* No comment provided by engineer. */ +"Cellular" = "Cellulaire"; + /* No comment provided by engineer. */ "Change" = "Changer"; @@ -1401,6 +1413,9 @@ /* No comment provided by engineer. */ "Downgrade and open chat" = "Rétrograder et ouvrir le chat"; +/* chat item action */ +"Download" = "Télécharger"; + /* No comment provided by engineer. */ "Download failed" = "Échec du téléchargement"; @@ -1476,6 +1491,9 @@ /* enabled status */ "enabled" = "activé"; +/* No comment provided by engineer. */ +"Enabled for" = "Activé pour"; + /* enabled status */ "enabled for contact" = "activé pour le contact"; @@ -1830,6 +1848,9 @@ /* No comment provided by engineer. */ "Files and media are prohibited in this group." = "Les fichiers et les médias sont interdits dans ce groupe."; +/* No comment provided by engineer. */ +"Files and media not allowed" = "Fichiers et médias non autorisés"; + /* No comment provided by engineer. */ "Files and media prohibited!" = "Fichiers et médias interdits !"; @@ -1869,6 +1890,21 @@ /* No comment provided by engineer. */ "For console" = "Pour la console"; +/* chat item action */ +"Forward" = "Transférer"; + +/* No comment provided by engineer. */ +"Forward and save messages" = "Transférer et sauvegarder des messages"; + +/* No comment provided by engineer. */ +"forwarded" = "transféré"; + +/* No comment provided by engineer. */ +"Forwarded" = "Transféré"; + +/* No comment provided by engineer. */ +"Forwarded from" = "Transféré depuis"; + /* No comment provided by engineer. */ "Found desktop" = "Bureau trouvé"; @@ -1947,6 +1983,9 @@ /* No comment provided by engineer. */ "Group members can send files and media." = "Les membres du groupe peuvent envoyer des fichiers et des médias."; +/* No comment provided by engineer. */ +"Group members can send SimpleX links." = "Les membres du groupe peuvent envoyer des liens SimpleX."; + /* No comment provided by engineer. */ "Group members can send voice messages." = "Les membres du groupe peuvent envoyer des messages vocaux."; @@ -2088,6 +2127,9 @@ /* No comment provided by engineer. */ "In reply to" = "En réponse à"; +/* No comment provided by engineer. */ +"In-call sounds" = "Sons d'appel"; + /* No comment provided by engineer. */ "Incognito" = "Incognito"; @@ -2433,6 +2475,9 @@ /* notification */ "message received" = "message reçu"; +/* No comment provided by engineer. */ +"Message source remains private." = "La source du message reste privée."; + /* No comment provided by engineer. */ "Message text" = "Texte du message"; @@ -2517,6 +2562,9 @@ /* No comment provided by engineer. */ "More improvements are coming soon!" = "Plus d'améliorations à venir !"; +/* No comment provided by engineer. */ +"More reliable network connection." = "Connexion réseau plus fiable."; + /* item status description */ "Most likely this connection is deleted." = "Connexion probablement supprimée."; @@ -2538,6 +2586,12 @@ /* No comment provided by engineer. */ "Network & servers" = "Réseau et serveurs"; +/* No comment provided by engineer. */ +"Network connection" = "Connexion au réseau"; + +/* No comment provided by engineer. */ +"Network management" = "Gestion du réseau"; + /* No comment provided by engineer. */ "Network settings" = "Paramètres réseau"; @@ -2616,6 +2670,9 @@ /* No comment provided by engineer. */ "No history" = "Aucun historique"; +/* No comment provided by engineer. */ +"No network connection" = "Pas de connexion au réseau"; + /* No comment provided by engineer. */ "No permission to record voice message" = "Pas l'autorisation d'enregistrer un message vocal"; @@ -2762,9 +2819,15 @@ /* No comment provided by engineer. */ "Or show this code" = "Ou présenter ce code"; +/* No comment provided by engineer. */ +"Other" = "Autres"; + /* member role */ "owner" = "propriétaire"; +/* feature role */ +"owners" = "propriétaires"; + /* No comment provided by engineer. */ "Passcode" = "Code d'accès"; @@ -2897,6 +2960,9 @@ /* No comment provided by engineer. */ "Profile image" = "Image de profil"; +/* No comment provided by engineer. */ +"Profile images" = "Images de profil"; + /* No comment provided by engineer. */ "Profile name" = "Nom du profil"; @@ -2930,6 +2996,9 @@ /* No comment provided by engineer. */ "Prohibit sending files and media." = "Interdire l'envoi de fichiers et de médias."; +/* No comment provided by engineer. */ +"Prohibit sending SimpleX links." = "Interdire l'envoi de liens SimpleX."; + /* No comment provided by engineer. */ "Prohibit sending voice messages." = "Interdire l'envoi de messages vocaux."; @@ -3008,6 +3077,9 @@ /* No comment provided by engineer. */ "Receiving address will be changed to a different server. Address change will complete after sender comes online." = "L'adresse de réception sera changée pour un autre serveur. Le changement d'adresse sera terminé lorsque l'expéditeur sera en ligne."; +/* No comment provided by engineer. */ +"Receiving concurrency" = "Réception simultanée"; + /* No comment provided by engineer. */ "Receiving file will be stopped." = "La réception du fichier sera interrompue."; @@ -3017,6 +3089,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)." = "Historique récent et amélioration du [bot annuaire](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." = "Le(s) destinataire(s) ne peut(vent) pas voir de qui provient ce message."; + /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Les destinataires voient les mises à jour au fur et à mesure que vous leur écrivez."; @@ -3212,6 +3287,18 @@ /* No comment provided by engineer. */ "Save welcome message?" = "Enregistrer le message d'accueil ?"; +/* No comment provided by engineer. */ +"saved" = "enregistré"; + +/* No comment provided by engineer. */ +"Saved" = "Enregistré"; + +/* No comment provided by engineer. */ +"Saved from" = "Enregistré depuis"; + +/* No comment provided by engineer. */ +"saved from %@" = "enregistré à partir de %@"; + /* message info title */ "Saved message" = "Message enregistré"; @@ -3419,6 +3506,9 @@ /* No comment provided by engineer. */ "Settings" = "Paramètres"; +/* No comment provided by engineer. */ +"Shape profile images" = "Images de profil modelable"; + /* chat item action */ "Share" = "Partager"; @@ -3479,6 +3569,12 @@ /* chat feature */ "SimpleX links" = "Liens SimpleX"; +/* No comment provided by engineer. */ +"SimpleX links are prohibited in this group." = "Les liens SimpleX sont interdits dans ce groupe."; + +/* No comment provided by engineer. */ +"SimpleX links not allowed" = "Les liens SimpleX ne sont pas autorisés"; + /* No comment provided by engineer. */ "SimpleX Lock" = "SimpleX Lock"; @@ -3515,6 +3611,9 @@ /* notification title */ "Somebody" = "Quelqu'un"; +/* No comment provided by engineer. */ +"Square, circle, or anything in between." = "Carré, circulaire, ou toute autre forme intermédiaire."; + /* chat item text */ "standard end-to-end encryption" = "chiffrement de bout en bout standard"; @@ -4043,6 +4142,9 @@ /* No comment provided by engineer. */ "Voice messages are prohibited in this group." = "Les messages vocaux sont interdits dans ce groupe."; +/* No comment provided by engineer. */ +"Voice messages not allowed" = "Les messages vocaux ne sont pas autorisés"; + /* No comment provided by engineer. */ "Voice messages prohibited!" = "Messages vocaux interdits !"; @@ -4094,12 +4196,24 @@ /* No comment provided by engineer. */ "When available" = "Quand disponible"; +/* No comment provided by engineer. */ +"When connecting audio and video calls." = "Lors des appels audio et vidéo."; + /* 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."; /* 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." = "Lorsque vous partagez un profil incognito avec quelqu'un, ce profil sera utilisé pour les groupes auxquels il vous invite."; +/* No comment provided by engineer. */ +"WiFi" = "WiFi"; + +/* No comment provided by engineer. */ +"Will be enabled in direct chats!" = "Activé dans les discussions directes !"; + +/* No comment provided by engineer. */ +"Wired ethernet" = "Ethernet câblé"; + /* No comment provided by engineer. */ "With encrypted files and media." = "Avec les fichiers et les médias chiffrés."; @@ -4121,6 +4235,9 @@ /* pref value */ "yes" = "oui"; +/* No comment provided by engineer. */ +"you" = "vous"; + /* No comment provided by engineer. */ "You" = "Vous"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index deb4e02a51..303b48b6be 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -50,7 +50,7 @@ "(new)" = "(új)"; /* No comment provided by engineer. */ -"(this device v%@)" = "(ez az eszköz v%@)"; +"(this device v%@)" = "(ez az eszköz: v%@)"; /* No comment provided by engineer. */ ")" = ")"; @@ -65,7 +65,7 @@ "[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Csillag a GitHubon](https://github.com/simplex-chat/simplex-chat)"; /* No comment provided by engineer. */ -"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő csatlakozáshoz."; +"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz."; /* No comment provided by engineer. */ "**Add new contact**: to create your one-time QR Code for your contact." = "**Új ismerős hozzáadása**: egyszer használatos QR-kód vagy hivatkozás létrehozása a kapcsolattartóhoz."; @@ -134,19 +134,19 @@ "%@ and %@" = "%@ és %@"; /* No comment provided by engineer. */ -"%@ and %@ connected" = "%@ és %@ csatlakozott"; +"%@ and %@ connected" = "%@ és %@ kapcsolódott"; /* copied message info, at