Compare commits

..

1 Commits

Author SHA1 Message Date
Avently 3cec97c84f android, desktop: moved to Compose 1.6.0 2024-01-26 23:06:02 +07:00
341 changed files with 5218 additions and 34608 deletions
+1 -1
View File
@@ -270,7 +270,7 @@ jobs:
- name: Unix test
if: matrix.os != 'windows-latest'
timeout-minutes: 40
timeout-minutes: 30
shell: bash
run: cabal test --test-show-details=direct
+18 -45
View File
@@ -1,59 +1,32 @@
FROM alpine:latest AS build-stage
FROM ubuntu:focal AS build
# Alpine Linux doesn't provide libtinfow.so.6 library, so we need to symlink it.
# Add essential packages for ghc/cabal to work.
RUN apk add --no-cache \
curl \
git \
xz \
grep \
ghc-dev \
gmp-dev \
zlib-static \
zlib-dev \
openssl-libs-static \
openssl-dev \
alpine-sdk &&\
ln -s /usr/lib/libncursesw.so.6 /usr/lib/libtinfow.so.6
# Specify bootstrap Haskell versions
ENV BOOTSTRAP_HASKELL_GHC_VERSION=9.6.3
ENV BOOTSTRAP_HASKELL_CABAL_VERSION=3.10.1.0
# Install curl and simplex-chat-related dependencies
RUN apt-get update && apt-get install -y curl git build-essential libgmp3-dev zlib1g-dev libssl-dev
# Install ghcup
RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 sh
RUN a=$(arch); curl https://downloads.haskell.org/~ghcup/$a-linux-ghcup -o /usr/bin/ghcup && \
chmod +x /usr/bin/ghcup
# Install ghc
RUN ghcup install ghc 9.6.3
# Install cabal
RUN ghcup install cabal 3.10.1.0
# Set both as default
RUN ghcup set ghc 9.6.3 && \
ghcup set cabal 3.10.1.0
COPY . /project
WORKDIR /project
# Adjust PATH
ENV PATH="/root/.cabal/bin:/root/.ghcup/bin:$PATH"
# Set both as default
RUN ghcup set ghc "${BOOTSTRAP_HASKELL_GHC_VERSION}" && \
ghcup set cabal "${BOOTSTRAP_HASKELL_CABAL_VERSION}"
# Install hpack
RUN cabal install --install-method=copy --installdir=/usr/local/bin hpack-0.36.0
# Copy project in PWD to dontainer
COPY . /project
WORKDIR /project
# Adjust build
RUN cp ./scripts/cabal.project.local.linux ./cabal.project.local
# Add optimization flags and build statically
RUN sed -i '/- -Wunused-type-patterns/a\ - -O2\n\ - -split-sections\n\ - -with-rtsopts=-N\n\ - -static\n\cc-options: -static\n\ld-options: -static -pthread' package.yaml
# Reconfigure cabal project
RUN hpack
# Compile simplex-chat
RUN cabal update
RUN cabal build -j exe:simplex-chat
# Strip the binary from debug symbols to reduce size
RUN bin=$(find /project/dist-newstyle -name "simplex-chat" -type f -executable) && \
mv "$bin" ./ && \
strip ./simplex-chat
RUN cabal install
FROM scratch AS export-stage
COPY --from=build-stage /project/simplex-chat /
COPY --from=build /root/.cabal/bin/simplex-chat /
+58 -92
View File
@@ -1,168 +1,134 @@
# SimpleX Chat Privacy Policy and Conditions of Use
# SimpleX Chat Terms & Privacy Policy
SimpleX Chat is the first communication network based on a new protocol stack that builds on the same ideas of complete openness and decentralization as email and web, with the focus on providing security and privacy of communications, and without compromising on usability.
SimpleX Chat is the first communication platform that has no user profile IDs of any kind, not even random numbers. Not only it has no access to your messages (thanks to open-source double-ratchet end-to-end encryption protocol and additional encryption layers), it also has no access to your profile and contacts - we cannot observe your connections graph.
SimpleX Chat communication protocol is the first protocol that has no user profile IDs of any kind, not even random numbers, cryptographic keys or hashes that identify the users. SimpleX Chat apps allow their users to send messages and files via relay server infrastructure. Relay server owners and providers do not have any access to your messages, thanks to double-ratchet end-to-end encryption algorithm (also known as Signal algorithm - do not confuse with Signal protocols or platform) and additional encryption layers, and they also have no access to your profile and contacts - as they do not provide any user accounts.
Double ratchet algorithm has such important properties as [forward secrecy](./docs/GLOSSARY.md#forward-secrecy), sender [repudiation](./docs/GLOSSARY.md#) and break-in recovery (also known as [post-compromise security](./docs/GLOSSARY.md#post-compromise-security)).
If you believe that any part of this document is not aligned with our mission or values, please raise it with us via [email](chat@simplex.chat) or [chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion).
If you believe that some of the clauses in this document are not aligned with our mission or principles, please raise it with us via [email](chat@simplex.chat) or [chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion).
## Privacy Policy
SimpleX Chat Ltd uses the best industry practices for security and encryption to provide client and server software for secure [end-to-end encrypted](./docs/GLOSSARY.md#end-to-end-encryption) messaging via private connections. This encryption cannot be compromised by the relays servers, even if they are modified or compromised, via [man-in-the-middle attack](./docs/GLOSSARY.md#man-in-the-middle-attack), unlike most other communication platforms, services and networks.
SimpleX Chat Ltd. ("SimpleX Chat") uses the best industry practices for security and encryption to provide secure [end-to-end encrypted](./docs/GLOSSARY.md#end-to-end-encryption) messaging via private connections. This encryption cannot be compromised by the servers via [man-in-the-middle attack](./docs/GLOSSARY.md#man-in-the-middle-attack).
SimpleX Chat software is built on top of SimpleX messaging and application protocols, based on a new message routing protocol allowing to establish private connections without having any kind of addresses or other identifiers assigned to its users - it does not use emails, phone numbers, usernames, identity keys or any other user profile identifiers to pass messages between the user applications.
SimpleX Chat is built on top of SimpleX messaging and application platform that uses a new message routing protocol allowing to establish private connections without having any kind of addresses that identify its users - we don't use emails, phone numbers, usernames, identity keys or any other user identifiers to pass messages between the users.
SimpleX Chat software is similar in its design approach to email clients and browsers - it allows you to have full control of your data and freely choose the relay server providers, in the same way you choose which website or email provider to use, or use your own relay servers, simply by changing the configuration of the client software. The only current restriction to that is Apple push notifications - at the moment they can only be delivered via the preset servers that we operate, as explained below. We are exploring the solutions to deliver push notifications to iOS devices via other providers or users' own servers.
SimpleX Chat security assessment was done in October 2022 by [Trail of Bits](https://www.trailofbits.com/about), and most fixes were released in v4.2.0 see [the announcement](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md).
While SimpleX Chat Ltd is not a communication service provider, and provide public preset relays "as is", as experimental, without any guarantees of availability or data retention, we are committed to maintain a high level of availability, reliability and security of these preset relays. We will be adding alternative preset infrastructure providers to the software in the future, and you will continue to be able to use any other providers or your own servers.
We see users and data sovereignty, and device and provider portability as critically important properties for any communication system.
SimpleX Chat security assessment was done in October 2022 by [Trail of Bits](https://www.trailofbits.com/about), and most fixes were released in v4.2 see [the announcement](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md).
### Your information
### Information you provide
#### User profiles
Servers used by SimpleX Chat apps do not create, store or identify user profiles. The profiles you can create in the app are local to your device, and can be removed at any time via the app.
We do not store user profiles. The profile you create in the app is local to your device.
When you create the local profile, no records are created on any of the relay servers, and infrastructure providers, whether SimpleX Chat Ltd or any other, have no access to any part of your information, and even to the fact that you created a profile - it is a local record stored only on your device. That means that if you delete the app, and have no backup, you will permanently lose all your data and the private connections you created with other software users.
You can transfer the profile to another device by creating a backup of the app data and restoring it on the new device, but you cannot use more than one device with the copy of the same profile at the same time - it will disrupt any active conversations on either or both devices, as a security property of end-to-end encryption.
When you create a user profile, no records are created on our servers, and we have no access to any part of your profile information, and even to the fact that you created a profile - it is a local record stored only on your device. That means that if you delete the app, and have no backup, you will permanently lose all the data and the private connections you create with other users.
#### Messages and Files
SimpleX relay servers cannot decrypt or otherwise access the content or even the size of your messages and files you send or receive. Each message is padded to a fixed size of 16kb. Each file is sent in chunks of 64kb, 256kb, 1mb or 8mb via all or some of the configured file relay servers. Both messages and files are sent end-to-end encrypted, and the servers do not have technical means to compromise this encryption, because part of the [key exchange](./docs/GLOSSARY.md#key-exchange) happens out-of-band.
SimpleX Chat cannot decrypt or otherwise access the content or even the size of your messages and files you send or receive. Each message is padded to a fixed size of 16kb. Each file is sent in chunks of 256kb, 1mb or 8mb via all or some of the configured file servers. Both messages and files are sent end-to-end encrypted, and the servers do not have technical means to compromise this encryption, because part of the [key exchange](./docs/GLOSSARY.md#key-exchange) happens out-of-band.
Your message history is stored only on your own device and the devices of your contacts. While the recipients' devices are offline, messaging relay servers temporarily store end-to-end encrypted messages you can configure which relay servers are used to receive the messages from the new contacts, and you can manually change them for the existing contacts too.
Your message history is stored only on your own device and the devices of your contacts. While the recipients' devices are offline SimpleX Chat temporarily stores end-to-end encrypted messages on the messaging (SMP) servers that are preset in the app or chosen by the users.
You do not have control over which servers are used to send messages to your contacts - they are chosen by them. To send messages your client needs to connect to these servers, therefore the servers chosen by your contacts can observe your IP address. You can use VPN or some overlay network (e.g., Tor) to hide your IP address from the servers chosen by your contacts. In the near future we will add the layer in the messaging protocol that will route sent message via the relays chosen by you as well.
The messages are permanently removed from the preset servers as soon as they are delivered. Undelivered messages are deleted after the time that is configured in the messaging servers you use (21 days for preset messaging servers).
The messages are permanently removed from the used relay servers as soon as they are delivered, as long as these servers used unmodified published code. Undelivered messages are deleted after the time that is configured in the messaging servers you use (21 days for preset messaging servers).
The files are stored on file (XFTP) servers for the time configured in the file servers you use (48 hours for preset file servers).
The files are stored on file relay servers for the time configured in the relay servers you use (48 hours for preset file servers).
If a messaging servers are restarted, the encrypted message can be stored in a backup file until it is overwritten by the next restart (usually within 1 week for preset relay servers).
As this software is fully open-source and provided under AGPLv3 license, all infrastructure providers and owners, and the developers of the client and server applications who use the SimpleX Chat source code, are required to publish any changes to this software under the same AGPLv3 license - including any modifications to the provided servers.
In addition to the AGPLv3 license terms, SimpleX Chat Ltd is committed to the software users that the preset relays that we provide via the apps will always be compiled from the [published open-source code](https://github.com/simplex-chat/simplexmq), without any modifications.
If a messaging or file servers are restarted, the encrypted message or the record of the file can be stored in a backup file until it is overwritten by the next restart (usually within 1 week).
#### Connections with other users
When you create a connection with another user, two messaging queues (you can think about them as mailboxes) are created on messaging relay servers (chosen by you and your contact each), that can be the preset servers or the servers that you and your contact configured in the app. SimpleX messaging protocol uses separate queues for direct and response messages, and the apps prefer to create these queues on two different relay servers for increased privacy, in case you have more than one relay server configured in the app, which is the default.
When you create a connection with another user, two messaging queues (you can think about them as about mailboxes) are created on chosen messaging servers, that can be the preset servers or the servers that you configured in the app, in case it allows such configuration. SimpleX uses separate queues for direct and response messages, that the client applications prefer to create on two different servers, in case you have more than one server configured in the app, which is the default.
SimpleX relay servers do not store information about which queues are linked to your profile on the device, and they do not collect any information that would allow infrastructure owners and providers to establish that these queues are related to your device or your profile - the access to each queue is authorized by two anonymous unique cryptographic keys, different for each queue, and separate for sender and recipient of the messages.
#### Connection links privacy
When you create a connection with another user, the app generates a link/QR code that can be shared with the user to establish the connection via any channel (email, any other messenger, or a video call). This link is safe to share via insecure channels, as long as you can identify the recipient and also trust that this channel did not replace this link (to mitigate the latter risk you can validate the security code via the app).
While the connection "links" contain SimpleX Chat Ltd domain name `simplex.chat`, this site is never accessed by the app, and is only used for these purposes:
- to direct the new users to the app download instructions,
- to show connection QR code that can be scanned via the app,
- to "namespace" these links,
- to open links directly in the installed app when it is clicked outside of the app.
You can always safely replace the initial part of the link `https://simplex.chat/` either with `simplex:/` (which is a URI scheme provisionally registered with IANA) or with any other domain name where you can self-host the app download instructions and show the connection QR code (but in case it is your domain, it will not open in the app). Also, while the page renders QR code, all the information needed to render it is only available to the browser, as the part of the "link" after `#` symbol is not sent to the website server.
At the time of updating this document all our client applications allow configuring the servers. Our servers do not store information about which queues are linked to your profile on the device, and they do not collect any information that would allow us to establish that these queues are related to your device or your profile - the access to each queue is authorized by two anonymous unique cryptographic keys, different for each queue, and separate for sender and recipient of the messages.
#### iOS Push Notifications
When you choose to use instant push notifications in SimpleX iOS app, because the design of push notifications requires storing the device token on notification server, the notifications server can observe how many messaging queues your device has notifications enabled for, and approximately how many messages are sent to each queue.
Preset notification server cannot observe the actual addresses of these queues, as a separate address is used to subscribe to the notifications. It also cannot observe who sends messages to you. Apple push notifications servers can only observe how many notifications are sent to you, but not from how many contacts, or from which messaging relays, as notifications are delivered to your device end-to-end encrypted by one of the preset notification servers - these notifications only contain end-to-end encrypted metadata, not even encrypted message content, and they look completely random to Apple push notification servers.
Notification server cannot observe the actual addresses of these queues, as a separate address is used to subscribe to the notifications. It also cannot observe who, or even how many contacts, send messages to you, as notifications are delivered to your device end-to-end encrypted by the messaging servers.
You can read more about the design of iOS push notifications [here](https://simplex.chat/blog/20220404-simplex-chat-instant-notifications.html#our-ios-approach-has-one-trade-off).
It also does not allow to see message content or sizes, as the actual messages are not sent via the notification server, only the fact that the message is available and where it can be received from (the latter information is encrypted, so that the notification server cannot observe it). You can read more about the design of iOS push notifications [here](https://simplex.chat/blog/20220404-simplex-chat-instant-notifications.html#our-ios-approach-has-one-trade-off).
#### Another information stored on the servers
Additional technical information can be stored on our servers, including randomly generated authentication tokens, keys, push tokens, and other material that is necessary to transmit messages. SimpleX Chat design limits this additional technical information to the minimum required to operate the software and servers. To prevent server overloading or attacks, the servers can temporarily store data that can link to particular users or devices, including IP addresses, geographic location, or information related to the transport sessions. This information is not stored for the absolute majority of the app users, even for those who use the servers very actively.
Additional technical information can be stored on our servers, including randomly generated authentication tokens, keys, push tokens, and other material that is necessary to transmit messages. SimpleX Chat limits this additional technical information to the minimum required to operate the Services.
#### SimpleX Directory
#### SimpleX Directory Service
[SimpleX Directory](./docs/DIRECTORY.md) stores: your search requests, the messages and the members profiles in the registered groups. You can connect to SimpleX Directory via [this address](https://simplex.chat/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).
[SimpleX directory service](./docs/DIRECTORY.md) stores: your search requests, the messages and the members profiles in the group. You can connect to SimpleX Directory Service via [this address](https://simplex.chat/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).
#### User Support
#### User Support.
If you contact SimpleX Chat Ltd, any personal data you share with us is kept only for the purposes of researching the issue and contacting you about your case. We recommend contacting support [via chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion) when it is possible, and avoid sharing any personal information.
If you contact SimpleX Chat any personal data you may share with us is kept only for the purposes of researching the issue and contacting you about your case. We recommend contacting support [via chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion), when it is possible.
### Information we may share
SimpleX Chat Ltd operates preset relay servers using third parties. While we do not have access and cannot share any user data, these third parties may access the encrypted user messages (but NOT the actual unencrypted message content or size) as it is stored or transmitted via our servers. Hosting providers can also store IP addresses and other transport information as part of their logs.
We operate our Services using third parties. While we do not share any user data, these third party may access the encrypted user data as it is stored or transmitted via our servers.
We use a third party for email services - if you ask for support via email, your and SimpleX Chat Ltd email providers may access these emails according to their privacy policies and terms. When the request is sensitive, we recommend contacting us via SimpleX Chat or using encrypted email using PGP key published at [openpgp.org](https://keys.openpgp.org/search?q=chat%40simplex.chat).
We use a third party for email services - if you ask for support via email, your and SimpleX Chat email providers may access these emails according to their privacy policies and terms of service.
The cases when SimpleX Chat Ltd may share the data temporarily stored on the servers:
The cases when SimpleX Chat may need to share the data we temporarily store on the servers:
- To meet any applicable law, or enforceable governmental request or court order.
- To enforce applicable terms, including investigation of potential violations.
- To meet any applicable law, regulation, legal process or enforceable governmental request.
- To enforce applicable Terms, including investigation of potential violations.
- To detect, prevent, or otherwise address fraud, security, or technical issues.
- To protect against harm to the rights, property, or safety of software users, SimpleX Chat Ltd, or the public as required or permitted by law.
- To protect against harm to the rights, property, or safety of SimpleX Chat, our users, or the public as required or permitted by law.
At the time of updating this document, we have never provided or have been requested the access to the preset relay servers or any information from the servers by any third parties. If we are ever requested to provide such access or information, we will follow the due legal process to limit any information shared with the third parties to the minimally required by law.
At the time of updating this document, we have never provided or have been requested the access to our servers or any information from our servers by any third parties. If we are ever requested to provide such access or information, we will follow the due legal process.
### Updates
We will update this Privacy Policy as needed so that it is current, accurate, and as clear as possible. Your continued use of our software applications and preset relays infrastructure confirms your acceptance of our updated Privacy Policy.
We will update this Privacy Policy as needed so that it is current, accurate, and as clear as possible. Your continued use of our Services confirms your acceptance of our updated Privacy Policy.
Please also read our Conditions of Use of Software and Infrastructure below.
Please also read our Terms of Service below.
If you have questions about our Privacy Policy please contact us via [email](chat@simplex.chat) or [chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion).
## Conditions of Use of Software and Infrastructure
## Terms of Service
You accept the Conditions of Use of Software and Infrastructure ("Conditions") by installing or using any of our software or using any of our server infrastructure (collectively referred to as "Applications"), whether preset in the software or not.
You accept our Terms of Service ("Terms") by installing or using any of our apps or services ("Services").
**Minimal age**. You must be at least 13 years old to use our Applications. The minimum age to use our Applications without parental approval may be higher in your country.
**Minimal age**. You must be at least 13 years old to use our Services. The minimum age to use our Services without parental approval may be higher in your country.
**Infrastructure**. Our Infrastructure includes preset messaging and file relay servers, and iOS push notification servers provided by SimpleX Chat Ltd for public use. Our infrastructure does not have any modifications from the [published open-source code](https://github.com/simplex-chat/simplexmq) available under AGPLv3 license. Any infrastructure provider, whether commercial or not, is required by the Affero clause (named after Affero Inc. company that pioneered the community-based Q&A sites in early 2000s) to publish any modifications under the same license. The statements in relation to Infrastructure and relay servers anywhere in this document assume no modifications to the published code, even in the cases when it is not explicitly stated.
**Accessing the servers**. For the efficiency of the network access, the apps access all queues you create on any server via the same network (TCP/IP) connection. Our servers do not collect information about which queues were accessed via the same connection, so we cannot establish which queues belong to the same users. Whoever might observe your network traffic would know which servers you use, and how much data you send, but not to whom it is sent - the data that leaves the servers is always different from the data they receive - there are no identifiers or ciphertext in common. Please refer to our [technical design document](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md) for more information about our privacy model and known security and privacy risks.
**Client applications**. Our client application Software (referred to as "app" or "apps") also has no modifications compared with published open-source code, and any developers of the alternative client apps based on our code are required to publish any modifications under the same AGPLv3 license. Client applications should not include any tracking or analytics code, and do not share any information with SimpleX Chat Ltd or any other third parties. If you ever discover any tracking or analytics code, please report it to us, so we can remove it.
**Privacy of user data**. We do not retain any data we transmit for any longer than necessary to provide the Services. We only collect aggregate statistics across all users, not per user - we do not have information about how many people use SimpleX Chat (we only know an approximate number of app installations and the aggregate traffic through our servers). In any case, we do not and will not sell or in any way monetize user data.
**Accessing the infrastructure**. For the efficiency of the network access, the client Software by default accesses all queues your app creates on any relay server within one user profile via the same network (TCP/IP) connection. At the cost of additional traffic this configuration can be changed to use different transport session for each connection. Relay servers do not collect information about which queues were created or accessed via the same connection, so the relay servers cannot establish which queues belong to the same user profile. Whoever might observe your network traffic would know which relay servers you use, and how much data you send, but not to whom it is sent - the data that leaves the servers is always different from the data they receive - there are no identifiers or ciphertext in common, even inside TLS encryption layer. Please refer to our [technical design document](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md) for more information about our privacy model and known security and privacy risks.
**Operating our services**. For the purpose of operating our Services, you agree that your end-to-end encrypted messages are transferred via our servers in the United Kingdom, the United States and other countries where we have or use facilities and service providers or partners.
**Privacy of user data**. Servers do not retain any data we transmit for any longer than necessary to deliver the messages between apps. SimpleX Chat Ltd collects aggregate statistics across all its servers, as supported by published code and can be enabled by any infrastructure provider, but not any statistics per-user, or per geographic location, or per IP address, or per transport session. We do not have information about how many people use SimpleX Chat applications, we only know an approximate number of app installations and the aggregate traffic through the preset servers. In any case, we do not and will not sell or in any way monetize user data. Our future business model assumes charging for some optional Software features instead, in a transparent and fair way.
**Software**. You agree to downloading and installing updates to our Services when they are available; they would only be automatic if you configure your devices in this way.
**Operating our Infrastructure**. For the purpose of using our Software, if you continue using preset servers, you agree that your end-to-end encrypted messages are transferred via the preset servers in any countries where we have or use facilities and service providers or partners. The information about geographic location of the servers will be made available in the apps in the near future.
**Traffic and device costs**. You are solely responsible for the traffic and device costs on which you use our Services, and any associated taxes.
**Software**. You agree to downloading and installing updates to our Applications when they are available; they would only be automatic if you configure your devices in this way.
**Legal and acceptable usage**. You agree to use our Services only for legal and acceptable purposes. You will not use (or assist others in using) our Services in ways that: 1) violate or infringe the rights of SimpleX Chat, our users, or others, including privacy, publicity, intellectual property, or other proprietary rights; 2) involve sending illegal or impermissible communications, e.g. spam.
**Traffic and device costs**. You are solely responsible for the traffic and device costs that you incur while using our Applications, and any associated taxes.
**Damage to SimpleX Chat**. You must not (or assist others to) access, use, modify, distribute, transfer, or exploit our Services in unauthorized manners, or in ways that harm SimpleX Chat, our Services, or systems. For example, you must not 1) access our Services or systems without authorization, other than by using the apps; 2) disrupt the integrity or performance of our Services; 3) collect information about our users in any manner; or 4) sell, rent, or charge for our Services.
**Legal and acceptable usage**. You agree to use our Applications only for legal and acceptable purposes. You will not use (or assist others in using) our Applications in ways that: 1) violate or infringe the rights of Software users, SimpleX Chat Ltd, or others, including privacy, publicity, intellectual property, or other proprietary rights; 2) involve sending illegal or impermissible communications, e.g. spam. While we cannot access content or identify messages or groups, in some cases the links to the illegal or impermissible communications available via our Applications can be shared publicly on social media or websites. We reserve the right to remove such links from the preset servers and disrupt the conversations that send illegal content via our servers, whether they were reported by the users or discovered by our team.
**Keeping your data secure**. SimpleX Chat is the first messaging platform that is 100% private by design - we neither have ability to access your messages, nor we have information about who you communicate with. That means that you are solely responsible for keeping your device and your user profile safe and secure. If you lose your phone or remove the app, you will not be able to recover the lost data, unless you made a back up.
**Damage to SimpleX Chat Ltd**. You must not (or assist others to) access, use, modify, distribute, transfer, or exploit our Applications in unauthorized manners, or in ways that harm Software users, SimpleX Chat Ltd, our Infrastructure, or any other systems. For example, you must not 1) access our Infrastructure or systems without authorization, in any way other than by using the Software; 2) disrupt the integrity or performance of our Infrastructure; 3) collect information about our users in any manner; or 4) sell, rent, or charge for our Infrastructure. This does not prohibit you from providing your own Infrastructure to others, whether free or for a fee, as long as you do not violate these Conditions and AGPLv3 license, including the requirement to publish any modifications of the relay server software.
**Storing the messages on the device**. The messages are stored in the encrypted database on your device. Whether and how database passphrase is stored is determined by the configuration of the application you use. Legacy databases created prior to 2023 or in CLI (terminal) app may remain unencrypted, and it will be indicated in the app. In this case, if you make a backup of the app data and store it unencrypted, the backup provider may be able to access the messages. Please note, that the beta version of desktop app currently stores the database passphrase in the configuration file in plaintext, so you may need to remove passphrase from the device via the app configuration.
**Keeping your data secure**. SimpleX Chat is the first communication software that aims to be 100% private by design - server software neither has the ability to access your messages, nor it has information about who you communicate with. That means that you are solely responsible for keeping your device, your user profile and any data safe and secure. If you lose your phone or remove the Software from the device, you will not be able to recover the lost data, unless you made a back up. To protect the data you need to make regular backups, as using old backups may disrupt your communication with some of the contacts.
**Storing the files on the device**. The files are stored on your device unencrypted. If you make a backup of the app data and store it unencrypted, the backup provider will be able to access the files.
**Storing the messages on the device**. The messages are stored in the encrypted database on your device. Whether and how database passphrase is stored is determined by the configuration of the Software you use. The databases created prior to 2023 or in CLI (terminal) app may remain unencrypted, and it will be indicated in the app interface. In this case, if you make a backup of the data and store it unencrypted, the backup provider may be able to access the messages. Please note, that the desktop apps can be configured to store the database passphrase in the configuration file in plaintext, and unless you set the passphrase when first running the app, a random passphrase will be used and stored on the device. You can remove it from the device via the app settings.
**No Access to Emergency Services**. Our Services do not provide access to emergency service providers like the police, fire department, hospitals, or other public safety organizations. Make sure you can contact emergency service providers through a mobile, fixed-line telephone, or other service.
**Storing the files on the device**. The files currently sent and received in the apps by default (except CLI app) are stored on your device encrypted using unique keys, different for each file, that are stored in the database. Once the message that the file was attached to is removed, even if the copy of the encrypted file is retained, it should be impossible to recover the key allowing to decrypt the file. This local file encryption may affect app performance, and it can be disabled via the app settings. This change will only affect the new files. If you later re-enable the encryption, it will also affect only the new files. If you make a backup of the app data and store it unencrypted, the backup provider will be able to access any unencrypted files. In any case, irrespective of the storage setting, the files are always sent by all apps end-to-end encrypted.
**Third-party services**. Our Services may allow you to access, use, or interact with third-party websites, apps, content, and other products and services. When you use third-party services, their terms and privacy policies govern your use of those services.
**No Access to Emergency Services**. Our Applications do not provide access to emergency service providers like the police, fire department, hospitals, or other public safety organizations. Make sure you can contact emergency service providers through a mobile, fixed-line telephone, or other service.
**Your Rights**. You own the messages and the information you transmit through our Services. Your recipients are able to retain the messages you receive from you; there is no technical ability to delete data from their devices. While there are various app features that allow deleting messages from the recipients' devices, such as _disappearing messages_ and _full message deletion_, their functioning on your recipients' devices cannot be guaranteed or enforced, as the device may be offline or have a modified version of the app.
**Third-party services**. Our Applications may allow you to access, use, or interact with our or third-party websites, apps, content, and other products and services. When you use third-party services, their terms and privacy policies govern your use of those services.
**License**. SimpleX Chat grants you a limited, revocable, non-exclusive, and non-transferable license to use our Services in accordance with these Terms. The source-code of services is available and can be used under [AGPL v3 license](https://github.com/simplex-chat/simplex-chat/blob/stable/LICENSE)
**Your Rights**. You own the messages and the information you transmit through our Applications. Your recipients are able to retain the messages they receive from you; there is no technical ability to delete data from their devices. While there are various app features that allow deleting messages from the recipients' devices, such as _disappearing messages_ and _full message deletion_, their functioning on your recipients' devices cannot be guaranteed or enforced, as the device may be offline or have a modified version of the Software. At the same time, repudiation property of the end-to-end encryption algorithm allows you to plausibly deny having sent the message, like you can deny what you said in a private face-to-face conversation, as the recipient cannot provide any proof to the third parties, by design.
**SimpleX Chat Rights**. We own all copyrights, trademarks, domains, logos, trade secrets, and other intellectual property rights associated with our Services. You may not use our copyrights, trademarks, domains, logos, and other intellectual property rights unless you have our written permission, and unless under an open-source license distributed together with the source code. To report copyright, trademark, or other intellectual property infringement, please contact chat@simplex.chat.
**License**. SimpleX Chat Ltd grants you a limited, revocable, non-exclusive, and non-transferable license to use our Applications in accordance with these Conditions. The source-code of Applications is available and can be used under [AGPL v3 license](https://github.com/simplex-chat/simplex-chat/blob/stable/LICENSE).
**Disclaimers**. YOU USE OUR SERVICES AT YOUR OWN RISK AND SUBJECT TO THE FOLLOWING DISCLAIMERS. WE PROVIDE OUR SERVICES ON AN “AS IS” BASIS WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND FREEDOM FROM COMPUTER VIRUS OR OTHER HARMFUL CODE. SIMPLEX DOES NOT WARRANT THAT ANY INFORMATION PROVIDED BY US IS ACCURATE, COMPLETE, OR USEFUL, THAT OUR SERVICES WILL BE OPERATIONAL, ERROR-FREE, SECURE, OR SAFE, OR THAT OUR SERVICES WILL FUNCTION WITHOUT DISRUPTIONS, DELAYS, OR IMPERFECTIONS. WE DO NOT CONTROL, AND ARE NOT RESPONSIBLE FOR, CONTROLLING HOW OR WHEN OUR USERS USE OUR SERVICES. WE ARE NOT RESPONSIBLE FOR THE ACTIONS OR INFORMATION (INCLUDING CONTENT) OF OUR USERS OR OTHER THIRD PARTIES. YOU RELEASE US, AFFILIATES, DIRECTORS, OFFICERS, EMPLOYEES, PARTNERS, AND AGENTS ("SIMPLEX PARTIES") FROM ANY CLAIM, COMPLAINT, CAUSE OF ACTION, CONTROVERSY, OR DISPUTE (TOGETHER, "CLAIM") AND DAMAGES, KNOWN AND UNKNOWN, RELATING TO, ARISING OUT OF, OR IN ANY WAY CONNECTED WITH ANY SUCH CLAIM YOU HAVE AGAINST ANY THIRD PARTIES.
**SimpleX Chat Ltd Rights**. We own all copyrights, trademarks, domains, logos, trade secrets, and other intellectual property rights associated with our Applications. You may not use our copyrights, trademarks, domains, logos, and other intellectual property rights unless you have our written permission, and unless under an open-source license distributed together with the source code. To report copyright, trademark, or other intellectual property infringement, please contact chat@simplex.chat.
**Limitation of liability**. THE SIMPLEX PARTIES WILL NOT BE LIABLE TO YOU FOR ANY LOST PROFITS OR CONSEQUENTIAL, SPECIAL, PUNITIVE, INDIRECT, OR INCIDENTAL DAMAGES RELATING TO, ARISING OUT OF, OR IN ANY WAY IN CONNECTION WITH OUR TERMS, US, OR OUR SERVICES, EVEN IF THE SIMPLEX PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. OUR AGGREGATE LIABILITY RELATING TO, ARISING OUT OF, OR IN ANY WAY IN CONNECTION WITH OUR TERMS, US, OR OUR SERVICES WILL NOT EXCEED ONE DOLLAR ($1). THE FOREGOING DISCLAIMER OF CERTAIN DAMAGES AND LIMITATION OF LIABILITY WILL APPLY TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW. THE LAWS OF SOME JURISDICTIONS MAY NOT ALLOW THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES, SO SOME OR ALL OF THE EXCLUSIONS AND LIMITATIONS SET FORTH ABOVE MAY NOT APPLY TO YOU. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN OUR TERMS, IN SUCH CASES, THE LIABILITY OF THE SIMPLEX PARTIES WILL BE LIMITED TO THE EXTENT PERMITTED BY APPLICABLE LAW.
**Disclaimers**. YOU USE OUR APPLICATIONS AT YOUR OWN RISK AND SUBJECT TO THE FOLLOWING DISCLAIMERS. WE PROVIDE OUR APPLICATIONS ON AN “AS IS” BASIS WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, AND FREEDOM FROM COMPUTER VIRUS OR OTHER HARMFUL CODE. SIMPLEX CHAT LTD DOES NOT WARRANT THAT ANY INFORMATION PROVIDED BY US IS ACCURATE, COMPLETE, OR USEFUL, THAT OUR APPLICATIONS WILL BE OPERATIONAL, ERROR-FREE, SECURE, OR SAFE, OR THAT OUR APPLICATIONS WILL FUNCTION WITHOUT DISRUPTIONS, DELAYS, OR IMPERFECTIONS. WE DO NOT CONTROL, AND ARE NOT RESPONSIBLE FOR, CONTROLLING HOW OR WHEN OUR USERS USE OUR APPLICATIONS. WE ARE NOT RESPONSIBLE FOR THE ACTIONS OR INFORMATION (INCLUDING CONTENT) OF OUR USERS OR OTHER THIRD PARTIES. YOU RELEASE US, AFFILIATES, DIRECTORS, OFFICERS, EMPLOYEES, PARTNERS, AND AGENTS ("SIMPLEX PARTIES") FROM ANY CLAIM, COMPLAINT, CAUSE OF ACTION, CONTROVERSY, OR DISPUTE (TOGETHER, "CLAIM") AND DAMAGES, KNOWN AND UNKNOWN, RELATING TO, ARISING OUT OF, OR IN ANY WAY CONNECTED WITH ANY SUCH CLAIM YOU HAVE AGAINST ANY THIRD PARTIES.
**Availability**. Our Services may be interrupted, including for maintenance, upgrades, or network or equipment failures. We may discontinue some or all of our Services, including certain features and the support for certain devices and platforms, at any time.
**Limitation of liability**. THE SIMPLEX PARTIES WILL NOT BE LIABLE TO YOU FOR ANY LOST PROFITS OR CONSEQUENTIAL, SPECIAL, PUNITIVE, INDIRECT, OR INCIDENTAL DAMAGES RELATING TO, ARISING OUT OF, OR IN ANY WAY IN CONNECTION WITH OUR CONDITIONS, US, OR OUR APPLICATIONS, EVEN IF THE SIMPLEX PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. OUR AGGREGATE LIABILITY RELATING TO, ARISING OUT OF, OR IN ANY WAY IN CONNECTION WITH OUR CONDITIONS, US, OR OUR APPLICATIONS WILL NOT EXCEED ONE DOLLAR ($1). THE FOREGOING DISCLAIMER OF CERTAIN DAMAGES AND LIMITATION OF LIABILITY WILL APPLY TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW. THE LAWS OF SOME JURISDICTIONS MAY NOT ALLOW THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES, SO SOME OR ALL OF THE EXCLUSIONS AND LIMITATIONS SET FORTH ABOVE MAY NOT APPLY TO YOU. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN OUR CONDITIONS, IN SUCH CASES, THE LIABILITY OF THE SIMPLEX PARTIES WILL BE LIMITED TO THE EXTENT PERMITTED BY APPLICABLE LAW.
**Resolving disputes**. You agree to resolve any Claim you have with us relating to or arising from our Terms, us, or our Services in the courts of England and Wales. You also agree to submit to the personal jurisdiction of such courts for the purpose of resolving all such disputes. The laws of England govern our Terms, as well as any disputes, whether in court or arbitration, which might arise between SimpleX Chat and you, without regard to conflict of law provisions.
**Availability**. Our Applications may be disrupted, including for maintenance, upgrades, or network or equipment failures. We may discontinue some or all of our Applications, including certain features and the support for certain devices and platforms, at any time.
**Changes to the terms**. SimpleX Chat may update the Terms from time to time. Your continued use of our Services confirms your acceptance of our updated Terms and supersedes any prior Terms. You will comply with all applicable export control and trade sanctions laws. Our Terms cover the entire agreement between you and SimpleX Chat regarding our Services. If you do not agree with our Terms, you should stop using our Services.
**Resolving disputes**. You agree to resolve any Claim you have with us relating to or arising from our Conditions, us, or our Applications in the courts of England and Wales. You also agree to submit to the personal jurisdiction of such courts for the purpose of resolving all such disputes. The laws of England govern our Conditions, as well as any disputes, whether in court or arbitration, which might arise between SimpleX Chat Ltd and you, without regard to conflict of law provisions.
**Enforcing the terms**. If we fail to enforce any of our Terms, that does not mean we waive the right to enforce them. If any provision of the Terms is deemed unlawful, void, or unenforceable, that provision shall be deemed severable from our Terms and shall not affect the enforceability of the remaining provisions. Our Services are not intended for distribution to or use in any country where such distribution or use would violate local law or would subject us to any regulations in another country. We reserve the right to limit our Services in any country. If you have specific questions about these Terms, please contact us at chat@simplex.chat.
**Changes to the conditions**. SimpleX Chat Ltd may update the Conditions from time to time. Your continued use of our Applications confirms your acceptance of our updated Conditions and supersedes any prior Conditions. You will comply with all applicable export control and trade sanctions laws. Our Conditions cover the entire agreement between you and SimpleX Chat Ltd regarding our Applications. If you do not agree with our Conditions, you should stop using our Applications.
**Ending these Terms**. You may end these Terms with SimpleX Chat at any time by deleting SimpleX Chat app(s) from your device and discontinuing use of our Services. The provisions related to Licenses, Disclaimers, Limitation of Liability, Resolving dispute, Availability, Changes to the terms, Enforcing the terms, and Ending these Terms will survive termination of your relationship with SimpleX Chat.
**Enforcing the conditions**. If we fail to enforce any of our Conditions, that does not mean we waive the right to enforce them. If any provision of the Conditions is deemed unlawful, void, or unenforceable, that provision shall be deemed severable from our Conditions and shall not affect the enforceability of the remaining provisions. Our Applications are not intended for distribution to or use in any country where such distribution or use would violate local law or would subject us to any regulations in another country. We reserve the right to limit our Applications in any country. If you have specific questions about these Conditions, please contact us at chat@simplex.chat.
**Ending these conditions**. You may end these Conditions with SimpleX Chat Ltd at any time by deleting our Applications from your devices and discontinuing use of our Infrastructure. The provisions related to Licenses, Disclaimers, Limitation of Liability, Resolving dispute, Availability, Changes to the conditions, Enforcing the conditions, and Ending these conditions will survive termination of your relationship with SimpleX Chat Ltd.
Updated February 24, 2024
Updated August 17, 2023
-2
View File
@@ -234,8 +234,6 @@ You can use SimpleX with your own servers and still communicate with people usin
Recent and important updates:
[Mar 14, 2024. SimpleX Chat v5.6 beta: adding quantum resistance to Signal double ratchet algorithm.](./blog/20240314-simplex-chat-v5-6-quantum-resistance-signal-double-ratchet-algorithm.md)
[Jan 24, 2024. SimpleX Chat: free infrastructure from Linode, v5.5 released with private notes, group history and a simpler UX to connect.](./blog/20240124-simplex-chat-infrastructure-costs-v5-5-simplex-ux-private-notes-group-history.md)
[Nov 25, 2023. SimpleX Chat v5.4 released: link mobile and desktop apps via quantum resistant protocol, and much better groups](./blog/20231125-simplex-chat-v5-4-link-mobile-desktop-quantum-resistant-better-groups.md).
-14
View File
@@ -16,7 +16,6 @@ class AppDelegate: NSObject, UIApplicationDelegate {
application.registerForRemoteNotifications()
if #available(iOS 17.0, *) { trackKeyboard() }
NotificationCenter.default.addObserver(self, selector: #selector(pasteboardChanged), name: UIPasteboard.changedNotification, object: nil)
removePasscodesIfReinstalled()
return true
}
@@ -128,19 +127,6 @@ class AppDelegate: NSObject, UIApplicationDelegate {
BGManager.shared.receiveMessages(complete)
}
private func removePasscodesIfReinstalled() {
// Check for the database existence, because app and self destruct passcodes
// will be saved and restored by iOS when a user deletes and re-installs the app.
// In this case the database and settings will be deleted, but the passcodes won't be.
// Deleting passcodes ensures that the user will not get stuck on "Opening app..." screen.
if (kcAppPassword.get() != nil || kcSelfDestructPassword.get() != nil) &&
!UserDefaults.standard.bool(forKey: DEFAULT_PERFORM_LA) && !hasDatabase() {
_ = kcAppPassword.remove()
_ = kcSelfDestructPassword.remove()
_ = kcDatabasePassword.remove()
}
}
static func keepScreenOn(_ on: Bool) {
UIApplication.shared.isIdleTimerDisabled = on
}
+4 -52
View File
@@ -34,8 +34,6 @@ struct ContentView: View {
@State private var waitingForOrPassedAuth = true
@State private var chatListActionSheet: ChatListActionSheet? = nil
private let callTopPadding: CGFloat = 50
private enum ChatListActionSheet: Identifiable {
case planAndConnectSheet(sheet: PlanAndConnectActionSheet)
@@ -52,28 +50,16 @@ struct ContentView: View {
var body: some View {
ZStack {
let showCallArea = chatModel.activeCall != nil && chatModel.activeCall?.callState != .waitCapabilities && chatModel.activeCall?.callState != .invitationAccepted
// contentView() has to be in a single branch, so that enabling authentication doesn't trigger re-rendering and close settings.
// i.e. with separate branches like this settings are closed: `if prefPerformLA { ... contentView() ... } else { contentView() }
if !prefPerformLA || accessAuthenticated {
contentView()
.padding(.top, showCallArea ? callTopPadding : 0)
} else {
lockButton()
.padding(.top, showCallArea ? callTopPadding : 0)
}
if showCallArea, let call = chatModel.activeCall {
VStack {
activeCallInteractiveArea(call)
Spacer()
}
}
if chatModel.showCallView, let call = chatModel.activeCall {
callView(call)
}
if !showSettings, let la = chatModel.laRequest {
LocalAuthView(authRequest: la)
.onDisappear {
@@ -149,11 +135,11 @@ struct ContentView: View {
if case .onboardingComplete = step,
chatModel.currentUser != nil {
mainView()
.actionSheet(item: $chatListActionSheet) { sheet in
switch sheet {
case let .planAndConnectSheet(sheet): return planAndConnectActionSheet(sheet, dismiss: false)
}
.actionSheet(item: $chatListActionSheet) { sheet in
switch sheet {
case let .planAndConnectSheet(sheet): return planAndConnectActionSheet(sheet, dismiss: false)
}
}
} else {
OnboardingView(onboarding: step)
}
@@ -177,40 +163,6 @@ struct ContentView: View {
}
}
@ViewBuilder private func activeCallInteractiveArea(_ call: Call) -> some View {
HStack {
Text(call.contact.displayName).font(.body).foregroundColor(.white)
Spacer()
CallDuration(call: call)
}
.padding(.horizontal)
.frame(height: callTopPadding - 10)
.background(Color(uiColor: UIColor(red: 47/255, green: 208/255, blue: 88/255, alpha: 1)))
.onTapGesture {
chatModel.activeCallViewIsCollapsed = false
}
}
struct CallDuration: View {
let call: Call
@State var text: String = ""
@State var timer: Timer? = nil
var body: some View {
Text(text).frame(minWidth: text.count <= 5 ? 52 : 77, alignment: .leading).offset(x: 4).font(.body).foregroundColor(.white)
.onAppear {
timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { timer in
if let connectedAt = call.connectedAt {
text = durationText(Int(Date.now.timeIntervalSince1970 - connectedAt.timeIntervalSince1970))
}
}
}
.onDisappear {
_ = timer?.invalidate()
}
}
}
private func lockButton() -> some View {
Button(action: authenticateContentViewAccess) { Label("Unlock", systemImage: "lock") }
}
-3
View File
@@ -80,7 +80,6 @@ final class ChatModel: ObservableObject {
@Published var tokenRegistered = false
@Published var tokenStatus: NtfTknStatus?
@Published var notificationMode = NotificationsMode.off
@Published var notificationServer: String?
@Published var notificationPreview: NotificationPreviewMode = ntfPreviewModeGroupDefault.get()
// pending notification actions
@Published var ntfContactRequest: NTFContactRequest?
@@ -90,12 +89,10 @@ final class ChatModel: ObservableObject {
@Published var activeCall: Call?
let callCommand: WebRTCCommandProcessor = WebRTCCommandProcessor()
@Published var showCallView = false
@Published var activeCallViewIsCollapsed = false
// remote desktop
@Published var remoteCtrlSession: RemoteCtrlSession?
// currently showing invitation
@Published var showingInvitation: ShowingInvitation?
@Published var migrationState: MigrationToState? = MigrationToDeviceState.makeMigrationState()
// audio recording and playback
@Published var stopPreviousRecPlay: URL? = nil // coordinates currently playing source
@Published var draft: ComposeState?
+54 -132
View File
@@ -90,12 +90,12 @@ private func withBGTask<T>(bgDelay: Double? = nil, f: @escaping () -> T) -> T {
return r
}
func chatSendCmdSync(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? = nil, _ ctrl: chat_ctrl? = nil) -> ChatResponse {
func chatSendCmdSync(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? = nil) -> ChatResponse {
logger.debug("chatSendCmd \(cmd.cmdType)")
let start = Date.now
let resp = bgTask
? withBGTask(bgDelay: bgDelay) { sendSimpleXCmd(cmd, ctrl) }
: sendSimpleXCmd(cmd, ctrl)
? withBGTask(bgDelay: bgDelay) { sendSimpleXCmd(cmd) }
: sendSimpleXCmd(cmd)
logger.debug("chatSendCmd \(cmd.cmdType): \(resp.responseType)")
if case let .response(_, json) = resp {
logger.debug("chatSendCmd \(cmd.cmdType) response: \(json)")
@@ -106,24 +106,24 @@ func chatSendCmdSync(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? =
return resp
}
func chatSendCmd(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? = nil, _ ctrl: chat_ctrl? = nil) async -> ChatResponse {
func chatSendCmd(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? = nil) async -> ChatResponse {
await withCheckedContinuation { cont in
cont.resume(returning: chatSendCmdSync(cmd, bgTask: bgTask, bgDelay: bgDelay, ctrl))
cont.resume(returning: chatSendCmdSync(cmd, bgTask: bgTask, bgDelay: bgDelay))
}
}
func chatRecvMsg(_ ctrl: chat_ctrl? = nil) async -> ChatResponse? {
func chatRecvMsg() async -> ChatResponse? {
await withCheckedContinuation { cont in
_ = withBGTask(bgDelay: msgDelay) { () -> ChatResponse? in
let resp = recvSimpleXMsg(ctrl)
let resp = recvSimpleXMsg()
cont.resume(returning: resp)
return resp
}
}
}
func apiGetActiveUser(ctrl: chat_ctrl? = nil) throws -> User? {
let r = chatSendCmdSync(.showActiveUser, ctrl)
func apiGetActiveUser() throws -> User? {
let r = chatSendCmdSync(.showActiveUser)
switch r {
case let .activeUser(user): return user
case .chatCmdError(_, .error(.noActiveUser)): return nil
@@ -131,8 +131,8 @@ func apiGetActiveUser(ctrl: chat_ctrl? = nil) throws -> User? {
}
}
func apiCreateActiveUser(_ p: Profile?, sameServers: Bool = false, pastTimestamp: Bool = false, ctrl: chat_ctrl? = nil) throws -> User {
let r = chatSendCmdSync(.createActiveUser(profile: p, sameServers: sameServers, pastTimestamp: pastTimestamp), ctrl)
func apiCreateActiveUser(_ p: Profile?, sameServers: Bool = false, pastTimestamp: Bool = false) throws -> User {
let r = chatSendCmdSync(.createActiveUser(profile: p, sameServers: sameServers, pastTimestamp: pastTimestamp))
if case let .activeUser(user) = r { return user }
throw r
}
@@ -210,8 +210,8 @@ func apiDeleteUser(_ userId: Int64, _ delSMPQueues: Bool, viewPwd: String?) asyn
throw r
}
func apiStartChat(ctrl: chat_ctrl? = nil) throws -> Bool {
let r = chatSendCmdSync(.startChat(mainApp: true), ctrl)
func apiStartChat() throws -> Bool {
let r = chatSendCmdSync(.startChat(mainApp: true))
switch r {
case .chatStarted: return true
case .chatRunning: return false
@@ -240,14 +240,20 @@ func apiSuspendChat(timeoutMicroseconds: Int) {
logger.error("apiSuspendChat error: \(String(describing: r))")
}
func apiSetTempFolder(tempFolder: String, ctrl: chat_ctrl? = nil) throws {
let r = chatSendCmdSync(.setTempFolder(tempFolder: tempFolder), ctrl)
func apiSetTempFolder(tempFolder: String) throws {
let r = chatSendCmdSync(.setTempFolder(tempFolder: tempFolder))
if case .cmdOk = r { return }
throw r
}
func apiSetFilesFolder(filesFolder: String, ctrl: chat_ctrl? = nil) throws {
let r = chatSendCmdSync(.setFilesFolder(filesFolder: filesFolder), ctrl)
func apiSetFilesFolder(filesFolder: String) throws {
let r = chatSendCmdSync(.setFilesFolder(filesFolder: filesFolder))
if case .cmdOk = r { return }
throw r
}
func setXFTPConfig(_ cfg: XFTPFileConfig?) throws {
let r = chatSendCmdSync(.apiSetXFTPConfig(config: cfg))
if case .cmdOk = r { return }
throw r
}
@@ -258,30 +264,6 @@ func apiSetEncryptLocalFiles(_ enable: Bool) throws {
throw r
}
func apiSaveAppSettings(settings: AppSettings) throws {
let r = chatSendCmdSync(.apiSaveSettings(settings: settings))
if case .cmdOk = r { return }
throw r
}
func apiGetAppSettings(settings: AppSettings) throws -> AppSettings {
let r = chatSendCmdSync(.apiGetSettings(settings: settings))
if case let .appSettings(settings) = r { return settings }
throw r
}
func apiSetPQEncryption(_ enable: Bool) throws {
let r = chatSendCmdSync(.apiSetPQEncryption(enable: enable))
if case .cmdOk = r { return }
throw r
}
func apiSetContactPQ(_ contactId: Int64, _ enable: Bool) async throws -> Contact {
let r = await chatSendCmd(.apiSetContactPQ(contactId: contactId, enable: enable))
if case let .contactPQAllowed(_, contact, _) = r { return contact }
throw r
}
func apiExportArchive(config: ArchiveConfig) async throws {
try await sendCommandOkResp(.apiExportArchive(config: config))
}
@@ -300,10 +282,6 @@ func apiStorageEncryption(currentKey: String = "", newKey: String = "") async th
try await sendCommandOkResp(.apiStorageEncryption(config: DBEncryptionConfig(currentKey: currentKey, newKey: newKey)))
}
func testStorageEncryption(key: String, _ ctrl: chat_ctrl? = nil) async throws {
try await sendCommandOkResp(.testStorageEncryption(key: key), ctrl)
}
func apiGetChats() throws -> [ChatData] {
let userId = try currentUserId("apiGetChats")
return try apiChatsResponse(chatSendCmdSync(.apiGetChats(userId: userId)))
@@ -434,14 +412,14 @@ func apiDeleteMemberChatItem(groupId: Int64, groupMemberId: Int64, itemId: Int64
throw r
}
func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode, String?) {
func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode) {
let r = chatSendCmdSync(.apiGetNtfToken)
switch r {
case let .ntfToken(token, status, ntfMode, ntfServer): return (token, status, ntfMode, ntfServer)
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED))): return (nil, nil, .off, nil)
case let .ntfToken(token, status, ntfMode): return (token, status, ntfMode)
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED))): return (nil, nil, .off)
default:
logger.debug("apiGetNtfToken response: \(String(describing: r))")
return (nil, nil, .off, nil)
return (nil, nil, .off)
}
}
@@ -526,8 +504,8 @@ func getNetworkConfig() async throws -> NetCfg? {
throw r
}
func setNetworkConfig(_ cfg: NetCfg, ctrl: chat_ctrl? = nil) throws {
let r = chatSendCmdSync(.apiSetNetworkConfig(networkConfig: cfg), ctrl)
func setNetworkConfig(_ cfg: NetCfg) throws {
let r = chatSendCmdSync(.apiSetNetworkConfig(networkConfig: cfg))
if case .cmdOk = r { return }
throw r
}
@@ -892,36 +870,6 @@ func apiChatUnread(type: ChatType, id: Int64, unreadChat: Bool) async throws {
try await sendCommandOkResp(.apiChatUnread(type: type, id: id, unreadChat: unreadChat))
}
func uploadStandaloneFile(user: any UserLike, file: CryptoFile, ctrl: chat_ctrl? = nil) async -> (FileTransferMeta?, String?) {
let r = await chatSendCmd(.apiUploadStandaloneFile(userId: user.userId, file: file), ctrl)
if case let .sndStandaloneFileCreated(_, fileTransferMeta) = r {
return (fileTransferMeta, nil)
} else {
logger.error("uploadStandaloneFile error: \(String(describing: r))")
return (nil, String(describing: r))
}
}
func downloadStandaloneFile(user: any UserLike, url: String, file: CryptoFile, ctrl: chat_ctrl? = nil) async -> (RcvFileTransfer?, String?) {
let r = await chatSendCmd(.apiDownloadStandaloneFile(userId: user.userId, url: url, file: file), ctrl)
if case let .rcvStandaloneFileCreated(_, rcvFileTransfer) = r {
return (rcvFileTransfer, nil)
} else {
logger.error("downloadStandaloneFile error: \(String(describing: r))")
return (nil, String(describing: r))
}
}
func standaloneFileInfo(url: String, ctrl: chat_ctrl? = nil) async -> MigrationFileLinkData? {
let r = await chatSendCmd(.apiStandaloneFileInfo(url: url), ctrl)
if case let .standaloneFileInfo(fileMeta) = r {
return fileMeta
} else {
logger.error("standaloneFileInfo error: \(String(describing: r))")
return nil
}
}
func receiveFile(user: any UserLike, fileId: Int64, auto: Bool = false) async {
if let chatItem = await apiReceiveFile(fileId: fileId, encrypted: privacyEncryptLocalFilesGroupDefault.get(), auto: auto) {
await chatItemSimpleUpdate(user, chatItem)
@@ -967,8 +915,8 @@ func cancelFile(user: User, fileId: Int64) async {
}
}
func apiCancelFile(fileId: Int64, ctrl: chat_ctrl? = nil) async -> AChatItem? {
let r = await chatSendCmd(.cancelFile(fileId: fileId), ctrl)
func apiCancelFile(fileId: Int64) async -> AChatItem? {
let r = await chatSendCmd(.cancelFile(fileId: fileId))
switch r {
case let .sndFileCancelled(_, chatItem, _, _) : return chatItem
case let .rcvFileCancelled(_, chatItem, _) : return chatItem
@@ -1140,8 +1088,8 @@ func apiMarkChatItemRead(_ cInfo: ChatInfo, _ cItem: ChatItem) async {
}
}
private func sendCommandOkResp(_ cmd: ChatCommand, _ ctrl: chat_ctrl? = nil) async throws {
let r = await chatSendCmd(cmd, ctrl)
private func sendCommandOkResp(_ cmd: ChatCommand) async throws {
let r = await chatSendCmd(cmd)
if case .cmdOk = r { return }
throw r
}
@@ -1301,8 +1249,8 @@ func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = ni
}
try apiSetTempFolder(tempFolder: getTempFilesDirectory().path)
try apiSetFilesFolder(filesFolder: getAppFilesDirectory().path)
try setXFTPConfig(getXFTPCfg())
try apiSetEncryptLocalFiles(privacyEncryptLocalFilesGroupDefault.get())
try apiSetPQEncryption(pqExperimentalEnabledDefault.get())
m.chatInitialized = true
m.currentUser = try apiGetActiveUser()
if m.currentUser == nil {
@@ -1361,7 +1309,7 @@ func startChat(refreshInvitations: Bool = true) throws {
if (refreshInvitations) {
try refreshCallInvitations()
}
(m.savedToken, m.tokenStatus, m.notificationMode, m.notificationServer) = apiGetNtfToken()
(m.savedToken, m.tokenStatus, m.notificationMode) = apiGetNtfToken()
// deviceToken is set when AppDelegate.application(didRegisterForRemoteNotificationsWithDeviceToken:) is called,
// when it is called before startChat
if let token = m.deviceToken {
@@ -1382,16 +1330,6 @@ func startChat(refreshInvitations: Bool = true) throws {
chatLastStartGroupDefault.set(Date.now)
}
func startChatWithTemporaryDatabase(ctrl: chat_ctrl) throws -> User? {
logger.debug("startChatWithTemporaryDatabase")
let migrationActiveUser = try? apiGetActiveUser(ctrl: ctrl) ?? apiCreateActiveUser(Profile(displayName: "Temp", fullName: ""), ctrl: ctrl)
try setNetworkConfig(getNetCfg(), ctrl: ctrl)
try apiSetTempFolder(tempFolder: getMigrationTempFilesDirectory().path, ctrl: ctrl)
try apiSetFilesFolder(filesFolder: getMigrationTempFilesDirectory().path, ctrl: ctrl)
_ = try apiStartChat(ctrl: ctrl)
return migrationActiveUser
}
func changeActiveUser(_ userId: Int64, viewPwd: String?) {
do {
try changeActiveUser_(userId, viewPwd: viewPwd)
@@ -1473,12 +1411,14 @@ class ChatReceiver {
}
func receiveMsgLoop() async {
while self.receiveMessages {
if let msg = await chatRecvMsg() {
self._lastMsgTime = .now
await processReceivedMsg(msg)
}
// TODO use function that has timeout
if let msg = await chatRecvMsg() {
self._lastMsgTime = .now
await processReceivedMsg(msg)
}
if self.receiveMessages {
_ = try? await Task.sleep(nanoseconds: 7_500_000)
await receiveMsgLoop()
}
}
@@ -1768,37 +1708,27 @@ func processReceivedMsg(_ res: ChatResponse) async {
case let .rcvFileSndCancelled(user, aChatItem, _):
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupFile(aChatItem) }
case let .rcvFileProgressXFTP(user, aChatItem, _, _, _):
if let aChatItem = aChatItem {
await chatItemSimpleUpdate(user, aChatItem)
}
case let .rcvFileError(user, aChatItem, _):
if let aChatItem = aChatItem {
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupFile(aChatItem) }
}
case let .rcvFileProgressXFTP(user, aChatItem, _, _):
await chatItemSimpleUpdate(user, aChatItem)
case let .rcvFileError(user, aChatItem):
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupFile(aChatItem) }
case let .sndFileStart(user, aChatItem, _):
await chatItemSimpleUpdate(user, aChatItem)
case let .sndFileComplete(user, aChatItem, _):
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupDirectFile(aChatItem) }
case let .sndFileRcvCancelled(user, aChatItem, _):
if let aChatItem = aChatItem {
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupDirectFile(aChatItem) }
}
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupDirectFile(aChatItem) }
case let .sndFileProgressXFTP(user, aChatItem, _, _, _):
if let aChatItem = aChatItem {
await chatItemSimpleUpdate(user, aChatItem)
}
await chatItemSimpleUpdate(user, aChatItem)
case let .sndFileCompleteXFTP(user, aChatItem, _):
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupFile(aChatItem) }
case let .sndFileError(user, aChatItem, _):
if let aChatItem = aChatItem {
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupFile(aChatItem) }
}
case let .sndFileError(user, aChatItem):
await chatItemSimpleUpdate(user, aChatItem)
Task { cleanupFile(aChatItem) }
case let .callInvitation(invitation):
await MainActor.run {
m.callInvitations[invitation.contact.id] = invitation
@@ -1895,12 +1825,6 @@ func processReceivedMsg(_ res: ChatResponse) async {
}
}
}
case let .contactPQEnabled(user, contact, _):
if active(user) {
await MainActor.run {
m.updateContact(contact)
}
}
default:
logger.debug("unsupported event: \(res.responseType)")
}
@@ -1937,9 +1861,7 @@ func chatItemSimpleUpdate(_ user: any UserLike, _ aChatItem: AChatItem) async {
let cItem = aChatItem.chatItem
if active(user) {
if await MainActor.run(body: { m.upsertChatItem(cInfo, cItem) }) {
if cItem.showNotification {
NtfManager.shared.notifyMessageReceived(user, cInfo, cItem)
}
NtfManager.shared.notifyMessageReceived(user, cInfo, cItem)
}
}
}
+1 -6
View File
@@ -44,12 +44,7 @@ struct SimpleXApp: App {
chatModel.appOpenUrl = url
}
.onAppear() {
// Present screen for continue migration if it wasn't finished yet
if chatModel.migrationState != nil {
// It's important, otherwise, user may be locked in undefined state
onboardingStageDefault.set(.step1_SimpleXInfo)
chatModel.onboardingStage = onboardingStageDefault.get()
} else if kcAppPassword.get() == nil || kcSelfDestructPassword.get() == nil {
if kcAppPassword.get() == nil || kcSelfDestructPassword.get() == nil {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
initChatAndMigrate()
}
+33 -93
View File
@@ -12,67 +12,49 @@ import SimpleXChat
struct ActiveCallView: View {
@EnvironmentObject var m: ChatModel
@Environment(\.colorScheme) var colorScheme
@ObservedObject var call: Call
@Environment(\.scenePhase) var scenePhase
@State private var client: WebRTCClient? = nil
@State private var activeCall: WebRTCClient.Call? = nil
@State private var localRendererAspectRatio: CGFloat? = nil
@Binding var canConnectCall: Bool
@State var prevColorScheme: ColorScheme = .dark
@State var pipShown = false
var body: some View {
ZStack(alignment: .topLeading) {
ZStack(alignment: .bottom) {
if let client = client, [call.peerMedia, call.localMedia].contains(.video), activeCall != nil {
GeometryReader { g in
let width = g.size.width * 0.3
ZStack(alignment: .topTrailing) {
CallViewRemote(client: client, activeCall: $activeCall, activeCallViewIsCollapsed: $m.activeCallViewIsCollapsed, pipShown: $pipShown)
CallViewLocal(client: client, activeCall: $activeCall, localRendererAspectRatio: $localRendererAspectRatio, pipShown: $pipShown)
.cornerRadius(10)
.frame(width: width, height: width / (localRendererAspectRatio ?? 1))
.padding([.top, .trailing], 17)
ZStack(alignment: .center) {
// For some reason, when the view in GeometryReader and ZStack is visible, it steals clicks on a back button, so showing something on top like this with background color helps (.clear color doesn't work)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.primary.opacity(0.000001))
}
ZStack(alignment: .bottom) {
if let client = client, [call.peerMedia, call.localMedia].contains(.video), activeCall != nil {
GeometryReader { g in
let width = g.size.width * 0.3
ZStack(alignment: .topTrailing) {
CallViewRemote(client: client, activeCall: $activeCall)
CallViewLocal(client: client, activeCall: $activeCall, localRendererAspectRatio: $localRendererAspectRatio)
.cornerRadius(10)
.frame(width: width, height: width / (localRendererAspectRatio ?? 1))
.padding([.top, .trailing], 17)
}
}
if let call = m.activeCall, let client = client, (!pipShown || !call.supportsVideo) {
ActiveCallOverlay(call: call, client: client)
}
}
if let call = m.activeCall, let client = client {
ActiveCallOverlay(call: call, client: client)
}
}
.allowsHitTesting(!m.activeCallViewIsCollapsed)
.opacity(m.activeCallViewIsCollapsed ? 0 : 1)
.onAppear {
logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase)), canConnectCall \(canConnectCall)")
AppDelegate.keepScreenOn(true)
createWebRTCClient()
dismissAllSheets()
hideKeyboard()
prevColorScheme = colorScheme
}
.onChange(of: canConnectCall) { _ in
logger.debug("ActiveCallView: canConnectCall changed to \(canConnectCall)")
createWebRTCClient()
}
.onChange(of: m.activeCallViewIsCollapsed) { _ in
hideKeyboard()
}
.onDisappear {
logger.debug("ActiveCallView: disappear")
Task { await m.callCommand.setClient(nil) }
AppDelegate.keepScreenOn(false)
client?.endCall()
}
.background(m.activeCallViewIsCollapsed ? .clear : .black)
// Quite a big delay when opening/closing the view when a scheme changes (globally) this way. It's not needed when CallKit is used since status bar is green with white text on it
.preferredColorScheme(m.activeCallViewIsCollapsed || CallController.useCallKit() ? prevColorScheme : .dark)
.background(.black)
.preferredColorScheme(.dark)
}
private func createWebRTCClient() {
@@ -87,8 +69,8 @@ struct ActiveCallView: View {
@MainActor
private func processRtcMessage(msg: WVAPIMessage) {
if call == m.activeCall,
let call = m.activeCall,
let client = client {
let call = m.activeCall,
let client = client {
logger.debug("ActiveCallView: response \(msg.resp.respType)")
switch msg.resp {
case let .capabilities(capabilities):
@@ -108,7 +90,7 @@ struct ActiveCallView: View {
Task {
do {
try await apiSendCallOffer(call.contact, offer, iceCandidates,
media: call.localMedia, capabilities: capabilities)
media: call.localMedia, capabilities: capabilities)
} catch {
logger.error("apiSendCallOffer \(responseError(error))")
}
@@ -140,15 +122,13 @@ struct ActiveCallView: View {
if let callStatus = WebRTCCallStatus.init(rawValue: state.connectionState),
case .connected = callStatus {
call.direction == .outgoing
? CallController.shared.reportOutgoingCall(call: call, connectedAt: nil)
: CallController.shared.reportIncomingCall(call: call, connectedAt: nil)
? CallController.shared.reportOutgoingCall(call: call, connectedAt: nil)
: CallController.shared.reportIncomingCall(call: call, connectedAt: nil)
call.callState = .connected
call.connectedAt = .now
}
if state.connectionState == "closed" {
closeCallView(client)
m.activeCall = nil
m.activeCallViewIsCollapsed = false
}
Task {
do {
@@ -160,7 +140,6 @@ struct ActiveCallView: View {
case let .connected(connectionInfo):
call.callState = .connected
call.connectionInfo = connectionInfo
call.connectedAt = .now
case .ended:
closeCallView(client)
call.callState = .ended
@@ -174,7 +153,6 @@ struct ActiveCallView: View {
case .end:
closeCallView(client)
m.activeCall = nil
m.activeCallViewIsCollapsed = false
default: ()
}
case let .error(message):
@@ -203,7 +181,7 @@ struct ActiveCallOverlay: View {
VStack {
switch call.localMedia {
case .video:
videoCallInfoView(call)
callInfoView(call, .leading)
.foregroundColor(.white)
.opacity(0.8)
.padding()
@@ -230,25 +208,16 @@ struct ActiveCallOverlay: View {
.frame(maxWidth: .infinity, alignment: .center)
case .audio:
ZStack(alignment: .topLeading) {
Button {
chatModel.activeCallViewIsCollapsed = true
} label: {
Label("Back", systemImage: "chevron.left")
.padding()
.foregroundColor(.white.opacity(0.8))
}
VStack {
ProfileImage(imageStr: call.contact.profile.image)
.scaledToFit()
.frame(width: 192, height: 192)
audioCallInfoView(call)
}
.foregroundColor(.white)
.opacity(0.8)
.padding()
.frame(maxHeight: .infinity)
VStack {
ProfileImage(imageStr: call.contact.profile.image)
.scaledToFit()
.frame(width: 192, height: 192)
callInfoView(call, .center)
}
.foregroundColor(.white)
.opacity(0.8)
.padding()
.frame(maxHeight: .infinity)
Spacer()
@@ -266,12 +235,12 @@ struct ActiveCallOverlay: View {
.frame(maxWidth: .infinity)
}
private func audioCallInfoView(_ call: Call) -> some View {
private func callInfoView(_ call: Call, _ alignment: Alignment) -> some View {
VStack {
Text(call.contact.chatViewName)
.lineLimit(1)
.font(.title)
.frame(maxWidth: .infinity, alignment: .center)
.frame(maxWidth: .infinity, alignment: alignment)
Group {
Text(call.callState.text)
HStack {
@@ -282,36 +251,7 @@ struct ActiveCallOverlay: View {
}
}
.font(.subheadline)
.frame(maxWidth: .infinity, alignment: .center)
}
}
private func videoCallInfoView(_ call: Call) -> some View {
VStack {
Button {
chatModel.activeCallViewIsCollapsed = true
} label: {
HStack(alignment: .center, spacing: 16) {
Image(systemName: "chevron.left")
.resizable()
.frame(width: 10, height: 18)
Text(call.contact.chatViewName)
.lineLimit(1)
.font(.title)
.frame(maxWidth: .infinity, alignment: .leading)
}
}
Group {
Text(call.callState.text)
HStack {
Text(call.encryptionStatus)
if let connInfo = call.connectionInfo {
Text("(") + Text(connInfo.text) + Text(")")
}
}
}
.font(.subheadline)
.frame(maxWidth: .infinity, alignment: .leading)
.frame(maxWidth: .infinity, alignment: alignment)
}
}
@@ -92,7 +92,6 @@ class CallManager {
if case .ended = call.callState {
logger.debug("CallManager.endCall: call ended")
m.activeCall = nil
m.activeCallViewIsCollapsed = false
m.showCallView = false
completed()
} else {
@@ -101,7 +100,6 @@ class CallManager {
await m.callCommand.processCommand(.end)
await MainActor.run {
m.activeCall = nil
m.activeCallViewIsCollapsed = false
m.showCallView = false
completed()
}
@@ -6,20 +6,14 @@
import SwiftUI
import WebRTC
import SimpleXChat
import AVKit
struct CallViewRemote: UIViewRepresentable {
var client: WebRTCClient
var activeCall: Binding<WebRTCClient.Call?>
@State var enablePip: (Bool) -> Void = {_ in }
@Binding var activeCallViewIsCollapsed: Bool
@Binding var pipShown: Bool
init(client: WebRTCClient, activeCall: Binding<WebRTCClient.Call?>, activeCallViewIsCollapsed: Binding<Bool>, pipShown: Binding<Bool>) {
init(client: WebRTCClient, activeCall: Binding<WebRTCClient.Call?>) {
self.client = client
self.activeCall = activeCall
self._activeCallViewIsCollapsed = activeCallViewIsCollapsed
self._pipShown = pipShown
}
func makeUIView(context: Context) -> UIView {
@@ -29,120 +23,12 @@ struct CallViewRemote: UIViewRepresentable {
remoteRenderer.videoContentMode = .scaleAspectFill
client.addRemoteRenderer(call, remoteRenderer)
addSubviewAndResize(remoteRenderer, into: view)
if AVPictureInPictureController.isPictureInPictureSupported() {
makeViewWithRTCRenderer(call, remoteRenderer, view, context)
}
}
return view
}
func makeViewWithRTCRenderer(_ call: WebRTCClient.Call, _ remoteRenderer: RTCMTLVideoView, _ view: UIView, _ context: Context) {
let pipRemoteRenderer = RTCMTLVideoView(frame: view.frame)
pipRemoteRenderer.videoContentMode = .scaleAspectFill
let pipVideoCallViewController = AVPictureInPictureVideoCallViewController()
pipVideoCallViewController.preferredContentSize = CGSize(width: 1080, height: 1920)
addSubviewAndResize(pipRemoteRenderer, into: pipVideoCallViewController.view)
let pipContentSource = AVPictureInPictureController.ContentSource(
activeVideoCallSourceView: view,
contentViewController: pipVideoCallViewController
)
let pipController = AVPictureInPictureController(contentSource: pipContentSource)
pipController.canStartPictureInPictureAutomaticallyFromInline = true
pipController.delegate = context.coordinator
context.coordinator.pipController = pipController
context.coordinator.willShowHide = { show in
if show {
client.addRemoteRenderer(call, pipRemoteRenderer)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
activeCallViewIsCollapsed = true
}
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
activeCallViewIsCollapsed = false
}
}
}
context.coordinator.didShowHide = { show in
if show {
remoteRenderer.isHidden = true
} else {
client.removeRemoteRenderer(call, pipRemoteRenderer)
remoteRenderer.isHidden = false
}
pipShown = show
}
DispatchQueue.main.async {
enablePip = { enable in
if enable != pipShown /* pipController.isPictureInPictureActive */ {
if enable {
pipController.startPictureInPicture()
} else {
pipController.stopPictureInPicture()
}
}
}
}
}
func makeCoordinator() -> Coordinator {
Coordinator()
}
func updateUIView(_ view: UIView, context: Context) {
logger.debug("CallView.updateUIView remote")
DispatchQueue.main.async {
if activeCallViewIsCollapsed != pipShown {
enablePip(activeCallViewIsCollapsed)
}
}
}
// MARK: - Coordinator
class Coordinator: NSObject, AVPictureInPictureControllerDelegate {
var pipController: AVPictureInPictureController? = nil
var willShowHide: (Bool) -> Void = { _ in }
var didShowHide: (Bool) -> Void = { _ in }
func pictureInPictureControllerWillStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
willShowHide(true)
}
func pictureInPictureControllerDidStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
didShowHide(true)
}
func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, failedToStartPictureInPictureWithError error: Error) {
logger.error("PiP failed to start: \(error.localizedDescription)")
}
func pictureInPictureControllerWillStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
willShowHide(false)
}
func pictureInPictureControllerDidStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
didShowHide(false)
}
deinit {
pipController?.stopPictureInPicture()
pipController?.canStartPictureInPictureAutomaticallyFromInline = false
pipController?.contentSource = nil
pipController?.delegate = nil
pipController = nil
}
}
class SampleBufferVideoCallView: UIView {
override class var layerClass: AnyClass {
get { return AVSampleBufferDisplayLayer.self }
}
var sampleBufferDisplayLayer: AVSampleBufferDisplayLayer {
return layer as! AVSampleBufferDisplayLayer
}
}
}
@@ -150,14 +36,11 @@ struct CallViewLocal: UIViewRepresentable {
var client: WebRTCClient
var activeCall: Binding<WebRTCClient.Call?>
var localRendererAspectRatio: Binding<CGFloat?>
@State var pipStateChanged: (Bool) -> Void = {_ in }
@Binding var pipShown: Bool
init(client: WebRTCClient, activeCall: Binding<WebRTCClient.Call?>, localRendererAspectRatio: Binding<CGFloat?>, pipShown: Binding<Bool>) {
init(client: WebRTCClient, activeCall: Binding<WebRTCClient.Call?>, localRendererAspectRatio: Binding<CGFloat?>) {
self.client = client
self.activeCall = activeCall
self.localRendererAspectRatio = localRendererAspectRatio
self._pipShown = pipShown
}
func makeUIView(context: Context) -> UIView {
@@ -167,18 +50,12 @@ struct CallViewLocal: UIViewRepresentable {
client.addLocalRenderer(call, localRenderer)
client.startCaptureLocalVideo(call)
addSubviewAndResize(localRenderer, into: view)
DispatchQueue.main.async {
pipStateChanged = { shown in
localRenderer.isHidden = shown
}
}
}
return view
}
func updateUIView(_ view: UIView, context: Context) {
logger.debug("CallView.updateUIView local")
pipStateChanged(pipShown)
}
}
-2
View File
@@ -28,7 +28,6 @@ class Call: ObservableObject, Equatable {
@Published var speakerEnabled = false
@Published var videoEnabled: Bool
@Published var connectionInfo: ConnectionInfo?
@Published var connectedAt: Date? = nil
init(
direction: CallDirection,
@@ -60,7 +59,6 @@ class Call: ObservableObject, Equatable {
}
}
var hasMedia: Bool { get { callState == .offerSent || callState == .negotiated || callState == .connected } }
var supportsVideo: Bool { get { peerMedia == .video || localMedia == .video } }
}
enum CallDirection {
@@ -331,10 +331,6 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
activeCall.remoteStream?.add(renderer)
}
func removeRemoteRenderer(_ activeCall: Call, _ renderer: RTCVideoRenderer) {
activeCall.remoteStream?.remove(renderer)
}
func startCaptureLocalVideo(_ activeCall: Call) {
#if targetEnvironment(simulator)
guard
@@ -414,7 +410,6 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
guard let call = activeCall.wrappedValue else { return }
logger.debug("WebRTCClient: ending the call")
activeCall.wrappedValue = nil
(call.localCamera as? RTCCameraVideoCapturer)?.stopCapture()
call.connection.close()
call.connection.delegate = nil
call.frameEncryptor?.delegate = nil
@@ -103,7 +103,6 @@ struct ChatInfoView: View {
@State private var sendReceipts = SendReceipts.userDefault(true)
@State private var sendReceiptsUserDefault = true
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@AppStorage(GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED, store: groupDefaults) private var pqExperimentalEnabled = false
enum ChatInfoViewAlert: Identifiable {
case clearChatAlert
@@ -111,7 +110,6 @@ struct ChatInfoView: View {
case switchAddressAlert
case abortSwitchAddressAlert
case syncConnectionForceAlert
case allowContactPQEncryptionAlert
case error(title: LocalizedStringKey, error: LocalizedStringKey = "")
var id: String {
@@ -121,7 +119,6 @@ struct ChatInfoView: View {
case .switchAddressAlert: return "switchAddressAlert"
case .abortSwitchAddressAlert: return "abortSwitchAddressAlert"
case .syncConnectionForceAlert: return "syncConnectionForceAlert"
case .allowContactPQEncryptionAlert: return "allowContactPQEncryptionAlert"
case let .error(title, _): return "error \(title)"
}
}
@@ -168,22 +165,6 @@ struct ChatInfoView: View {
}
.disabled(!contact.ready || !contact.active)
if pqExperimentalEnabled,
let conn = contact.activeConn {
Section {
infoRow(Text(String("E2E encryption")), conn.connPQEnabled ? "Quantum resistant" : "Standard")
if !conn.pqEncryption {
allowPQButton()
}
} header: {
Text(String("Quantum resistant E2E encryption"))
} footer: {
if !conn.pqEncryption {
Text(String("After allowing quantum resistant encryption, it will be enabled after several messages if your contact also allows it."))
}
}
}
if let contactLink = contact.contactLink {
Section {
SimpleXLinkQRCode(uri: contactLink)
@@ -256,7 +237,6 @@ struct ChatInfoView: View {
case .switchAddressAlert: return switchAddressAlert(switchContactAddress)
case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchContactAddress)
case .syncConnectionForceAlert: return syncConnectionForceAlert({ syncContactConnection(force: true) })
case .allowContactPQEncryptionAlert: return allowContactPQEncryptionAlert()
case let .error(title, error): return mkAlert(title: title, message: error)
}
}
@@ -430,15 +410,6 @@ struct ChatInfoView: View {
}
}
private func allowPQButton() -> some View {
Button {
alert = .allowContactPQEncryptionAlert
} label: {
Label(String("Allow PQ encryption"), systemImage: "exclamationmark.triangle")
.foregroundColor(.orange)
}
}
private func networkStatusRow() -> some View {
HStack {
Text("Network status")
@@ -572,34 +543,6 @@ struct ChatInfoView: View {
}
}
}
private func allowContactPQEncryption() {
Task {
do {
let ct = try await apiSetContactPQ(contact.apiId, true)
contact = ct
await MainActor.run {
chatModel.updateContact(ct)
dismiss()
}
} catch let error {
logger.error("allowContactPQEncryption apiSetContactPQ error: \(responseError(error))")
let a = getErrorAlert(error, "Error allowing contact PQ encryption")
await MainActor.run {
alert = .error(title: a.title, error: a.message)
}
}
}
}
func allowContactPQEncryptionAlert() -> Alert {
Alert(
title: Text(String("Allow quantum resistant encryption?")),
message: Text(String("This is an experimental feature, it is not recommended to enable it for important chats.")),
primaryButton: .destructive(Text(String("Allow")), action: allowContactPQEncryption),
secondaryButton: .cancel()
)
}
}
func switchAddressAlert(_ switchAddress: @escaping () -> Void) -> Alert {
@@ -29,9 +29,6 @@ struct CIImageView: View {
FullScreenMediaView(chatItem: chatItem, image: uiImage, showView: $showFullScreenImage, scrollProxy: scrollProxy)
}
.onTapGesture { showFullScreenImage = true }
.onChange(of: m.activeCallViewIsCollapsed) { _ in
showFullScreenImage = false
}
} else if let data = Data(base64Encoded: dropImagePrefix(image)),
let uiImage = UIImage(data: data) {
imageView(uiImage)
@@ -120,9 +120,6 @@ struct CIVideoView: View {
showFullScreenPlayer = urlDecrypted != nil
}
}
.onChange(of: m.activeCallViewIsCollapsed) { _ in
showFullScreenPlayer = false
}
if !decryptionInProgress {
Button {
decrypt(file: file) {
@@ -171,9 +168,6 @@ struct CIVideoView: View {
default: ()
}
}
.onChange(of: m.activeCallViewIsCollapsed) { _ in
showFullScreenPlayer = false
}
if !videoPlaying {
Button {
m.stopPreviousRecPlay = url
@@ -253,7 +253,6 @@ struct FramedItemView: View {
ciQuotedMsgTextView(qi, lines: 3)
}
}
.fixedSize(horizontal: false, vertical: true)
.padding(.top, 6)
.padding(.horizontal, 12)
}
@@ -110,10 +110,6 @@ struct ChatItemContentView<Content: View>: View {
case .sndModerated: deletedItemView()
case .rcvModerated: deletedItemView()
case .rcvBlocked: deletedItemView()
case let .sndDirectE2EEInfo(e2eeInfo): CIEventView(eventText: directE2EEInfoText(e2eeInfo))
case let .rcvDirectE2EEInfo(e2eeInfo): CIEventView(eventText: directE2EEInfoText(e2eeInfo))
case .sndGroupE2EEInfo: CIEventView(eventText: e2eeInfoNoPQText())
case .rcvGroupE2EEInfo: CIEventView(eventText: e2eeInfoNoPQText())
case let .invalidJSON(json): CIInvalidJSONView(json: json)
}
}
@@ -174,22 +170,6 @@ struct ChatItemContentView<Content: View>: View {
Text(members)
}
}
private func directE2EEInfoText(_ info: E2EEInfo) -> Text {
info.pqEnabled
? Text("Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.")
.font(.caption)
.foregroundColor(.secondary)
.fontWeight(.light)
: e2eeInfoNoPQText()
}
private func e2eeInfoNoPQText() -> Text {
Text("Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.")
.font(.caption)
.foregroundColor(.secondary)
.fontWeight(.light)
}
}
func chatEventText(_ text: Text) -> Text {
+6 -27
View File
@@ -161,15 +161,11 @@ struct ChatView: View {
HStack {
let callsPrefEnabled = contact.mergedPreferences.calls.enabled.forUser
if callsPrefEnabled {
if chatModel.activeCall == nil {
callButton(contact, .audio, imageName: "phone")
.disabled(!contact.ready || !contact.active)
} else if let call = chatModel.activeCall, call.contact.id == cInfo.id {
endCallButton(call)
}
callButton(contact, .audio, imageName: "phone")
.disabled(!contact.ready || !contact.active)
}
Menu {
if callsPrefEnabled && chatModel.activeCall == nil {
if callsPrefEnabled {
Button {
CallController.shared.startCall(contact, .video)
} label: {
@@ -426,19 +422,7 @@ struct ChatView: View {
Image(systemName: imageName)
}
}
private func endCallButton(_ call: Call) -> some View {
Button {
if let uuid = call.callkitUUID {
CallController.shared.endCall(callUUID: uuid)
} else {
CallController.shared.endCall(call: call) {}
}
} label: {
Image(systemName: "phone.down.fill").tint(.red)
}
}
private func searchButton() -> some View {
Button {
searchMode = true
@@ -557,12 +541,7 @@ struct ChatView: View {
chatItemView(ci, nil, prev)
}
} else {
// Switch branches just to work around context menu problem when 'revealed' changes but size of item isn't
if revealed {
chatItemView(chatItem, range, prevItem)
} else {
chatItemView(chatItem, range, prevItem)
}
chatItemView(chatItem, range, prevItem)
}
}
}
@@ -651,7 +630,7 @@ struct ChatView: View {
playbackState: $playbackState,
playbackTime: $playbackTime
)
.uiKitContextMenu(maxWidth: maxWidth, menu: uiMenu, allowMenu: $allowMenu)
.uiKitContextMenu(menu: uiMenu, allowMenu: $allowMenu)
.accessibilityLabel("")
if ci.content.msgContent != nil && (ci.meta.itemDeleted == nil || revealed) && ci.reactions.count > 0 {
chatItemReactions(ci)
@@ -35,7 +35,7 @@ struct ContactPreferencesView: View {
.disabled(currentFeaturesAllowed == featuresAllowed)
}
}
.modifier(BackButton(disabled: Binding.constant(false)) {
.modifier(BackButton {
if currentFeaturesAllowed == featuresAllowed {
dismiss()
} else {
@@ -234,29 +234,39 @@ struct GroupChatInfoView: View {
Spacer()
memberInfo(member)
}
// revert from this:
if user {
v
} else if groupInfo.membership.memberRole >= .admin {
// TODO if there are more actions, refactor with lists of swipeActions
let canBlockForAll = member.canBlockForAll(groupInfo: groupInfo)
let canRemove = member.canBeRemoved(groupInfo: groupInfo)
if canBlockForAll && canRemove {
removeSwipe(member, blockForAllSwipe(member, v))
} else if canBlockForAll {
blockForAllSwipe(member, v)
} else if canRemove {
removeSwipe(member, v)
} else {
v
}
} else if member.canBeRemoved(groupInfo: groupInfo) {
removeSwipe(member, blockSwipe(member, v))
} else {
if !member.blockedByAdmin {
blockSwipe(member, v)
} else {
v
}
blockSwipe(member, v)
}
// revert to this: vvv
// if user {
// v
// } else if groupInfo.membership.memberRole >= .admin {
// // TODO if there are more actions, refactor with lists of swipeActions
// let canBlockForAll = member.canBlockForAll(groupInfo: groupInfo)
// let canRemove = member.canBeRemoved(groupInfo: groupInfo)
// if canBlockForAll && canRemove {
// removeSwipe(member, blockForAllSwipe(member, v))
// } else if canBlockForAll {
// blockForAllSwipe(member, v)
// } else if canRemove {
// removeSwipe(member, v)
// } else {
// v
// }
// } else {
// if !member.blockedByAdmin {
// blockSwipe(member, v)
// } else {
// v
// }
// }
// ^^^
}
@ViewBuilder private func memberInfo(_ member: GroupMember) -> some View {
@@ -168,11 +168,24 @@ struct GroupMemberInfoView: View {
}
}
if groupInfo.membership.memberRole >= .admin {
adminDestructiveSection(member)
} else {
nonAdminBlockSection(member)
// revert from this:
Section {
if member.memberSettings.showMessages {
blockMemberButton(member)
} else {
unblockMemberButton(member)
}
if member.canBeRemoved(groupInfo: groupInfo) {
removeMemberButton(member)
}
}
// revert to this: vvv
// if groupInfo.membership.memberRole >= .admin {
// adminDestructiveSection(member)
// } else {
// nonAdminBlockSection(member)
// }
// ^^^
if developerTools {
Section("For console") {
@@ -48,7 +48,7 @@ struct GroupPreferencesView: View {
preferences.timedMessages.ttl = currentPreferences.timedMessages.ttl
}
}
.modifier(BackButton(disabled: Binding.constant(false)) {
.modifier(BackButton {
if currentPreferences == preferences {
dismiss()
} else {
@@ -24,7 +24,7 @@ struct GroupWelcomeView: View {
VStack {
if groupInfo.canEdit {
editorView()
.modifier(BackButton(disabled: Binding.constant(false)) {
.modifier(BackButton {
if welcomeTextUnchanged() {
dismiss()
} else {
@@ -264,9 +264,7 @@ struct ChatListView: View {
}
func filtered(_ chat: Chat) -> Bool {
(chat.chatInfo.chatSettings?.favorite ?? false) ||
chat.chatStats.unreadChat ||
(chat.chatInfo.ntfsEnabled && chat.chatStats.unreadCount > 0)
(chat.chatInfo.chatSettings?.favorite ?? false) || chat.chatStats.unreadCount > 0 || chat.chatStats.unreadChat
}
func viewNameContains(_ cInfo: ChatInfo, _ s: String) -> Bool {
@@ -36,7 +36,6 @@ enum DatabaseEncryptionAlert: Identifiable {
struct DatabaseEncryptionView: View {
@EnvironmentObject private var m: ChatModel
@Binding var useKeychain: Bool
var migration: Bool
@State private var alert: DatabaseEncryptionAlert? = nil
@State private var progressIndicator = false
@State private var useKeychainToggle = storeDBPassphraseGroupDefault.get()
@@ -49,12 +48,7 @@ struct DatabaseEncryptionView: View {
var body: some View {
ZStack {
List {
if migration {
chatStoppedView()
}
databaseEncryptionView()
}
databaseEncryptionView()
if progressIndicator {
ProgressView().scaleEffect(2)
}
@@ -62,71 +56,72 @@ struct DatabaseEncryptionView: View {
}
private func databaseEncryptionView() -> some View {
Section {
settingsRow(storedKey ? "key.fill" : "key", color: storedKey ? .green : .secondary) {
Toggle("Save passphrase in Keychain", isOn: $useKeychainToggle)
List {
Section {
settingsRow(storedKey ? "key.fill" : "key", color: storedKey ? .green : .secondary) {
Toggle("Save passphrase in Keychain", isOn: $useKeychainToggle)
.onChange(of: useKeychainToggle) { _ in
if useKeychainToggle {
setUseKeychain(true)
} else if storedKey && !migration {
// Don't show in migration process since it will remove the key after successfull encryption
} else if storedKey {
alert = .keychainRemoveKey
} else {
setUseKeychain(false)
}
}
.disabled(initialRandomDBPassphrase && !migration)
}
if !initialRandomDBPassphrase && m.chatDbEncrypted == true {
PassphraseField(key: $currentKey, placeholder: "Current passphrase…", valid: validKey(currentKey))
}
PassphraseField(key: $newKey, placeholder: "New passphrase…", valid: validKey(newKey), showStrength: true)
PassphraseField(key: $confirmNewKey, placeholder: "Confirm new passphrase…", valid: confirmNewKey == "" || newKey == confirmNewKey)
settingsRow("lock.rotation") {
Button(migration ? "Set passphrase" : "Update database passphrase") {
alert = currentKey == ""
? (useKeychain ? .encryptDatabaseSaved : .encryptDatabase)
: (useKeychain ? .changeDatabaseKeySaved : .changeDatabaseKey)
.disabled(initialRandomDBPassphrase)
}
}
.disabled(
(m.chatDbEncrypted == true && currentKey == "") ||
currentKey == newKey ||
newKey != confirmNewKey ||
newKey == "" ||
!validKey(currentKey) ||
!validKey(newKey)
)
} header: {
Text(migration ? "Database passphrase" : "")
} footer: {
VStack(alignment: .leading, spacing: 16) {
if m.chatDbEncrypted == false {
Text("Your chat database is not encrypted - set passphrase to encrypt it.")
} else if useKeychain {
if storedKey {
Text("iOS Keychain is used to securely store passphrase - it allows receiving push notifications.")
if initialRandomDBPassphrase && !migration {
Text("Database is encrypted using a random passphrase, you can change it.")
if !initialRandomDBPassphrase && m.chatDbEncrypted == true {
PassphraseField(key: $currentKey, placeholder: "Current passphrase…", valid: validKey(currentKey))
}
PassphraseField(key: $newKey, placeholder: "New passphrase…", valid: validKey(newKey), showStrength: true)
PassphraseField(key: $confirmNewKey, placeholder: "Confirm new passphrase…", valid: confirmNewKey == "" || newKey == confirmNewKey)
settingsRow("lock.rotation") {
Button("Update database passphrase") {
alert = currentKey == ""
? (useKeychain ? .encryptDatabaseSaved : .encryptDatabase)
: (useKeychain ? .changeDatabaseKeySaved : .changeDatabaseKey)
}
}
.disabled(
(m.chatDbEncrypted == true && currentKey == "") ||
currentKey == newKey ||
newKey != confirmNewKey ||
newKey == "" ||
!validKey(currentKey) ||
!validKey(newKey)
)
} header: {
Text("")
} footer: {
VStack(alignment: .leading, spacing: 16) {
if m.chatDbEncrypted == false {
Text("Your chat database is not encrypted - set passphrase to encrypt it.")
} else if useKeychain {
if storedKey {
Text("iOS Keychain is used to securely store passphrase - it allows receiving push notifications.")
if initialRandomDBPassphrase {
Text("Database is encrypted using a random passphrase, you can change it.")
} else {
Text("**Please note**: you will NOT be able to recover or change passphrase if you lose it.")
}
} else {
Text("**Please note**: you will NOT be able to recover or change passphrase if you lose it.")
Text("iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications.")
}
} else {
Text("iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications.")
}
} else {
Text("You have to enter passphrase every time the app starts - it is not stored on the device.")
Text("**Please note**: you will NOT be able to recover or change passphrase if you lose it.")
if m.notificationMode == .instant && m.notificationPreview != .hidden && !migration {
Text("**Warning**: Instant push notifications require passphrase saved in Keychain.")
Text("You have to enter passphrase every time the app starts - it is not stored on the device.")
Text("**Please note**: you will NOT be able to recover or change passphrase if you lose it.")
if m.notificationMode == .instant && m.notificationPreview != .hidden {
Text("**Warning**: Instant push notifications require passphrase saved in Keychain.")
}
}
}
.padding(.top, 1)
.font(.callout)
}
.padding(.top, 1)
.font(.callout)
}
.onAppear {
if initialRandomDBPassphrase { currentKey = kcDatabasePassword.get() ?? "" }
@@ -141,15 +136,9 @@ struct DatabaseEncryptionView: View {
do {
encryptionStartedDefault.set(true)
encryptionStartedAtDefault.set(Date.now)
if !m.chatDbChanged {
try apiSaveAppSettings(settings: AppSettings.current.prepareForExport())
}
try await apiStorageEncryption(currentKey: currentKey, newKey: newKey)
encryptionStartedDefault.set(false)
initialRandomDBPassphraseGroupDefault.set(false)
if migration {
storeDBPassphraseGroupDefault.set(useKeychain)
}
if useKeychain {
if kcDatabasePassword.set(newKey) {
await resetFormAfterEncryption(true)
@@ -159,9 +148,6 @@ struct DatabaseEncryptionView: View {
await operationEnded(.error(title: "Keychain error", error: "Error saving passphrase to keychain"))
}
} else {
if migration {
removePassphraseFromKeyChain()
}
await resetFormAfterEncryption()
await operationEnded(.databaseEncrypted)
}
@@ -188,10 +174,7 @@ struct DatabaseEncryptionView: View {
private func setUseKeychain(_ value: Bool) {
useKeychain = value
// Postpone it when migrating to the end of encryption process
if !migration {
storeDBPassphraseGroupDefault.set(value)
}
storeDBPassphraseGroupDefault.set(value)
}
private func databaseEncryptionAlert(_ alertItem: DatabaseEncryptionAlert) -> Alert {
@@ -201,7 +184,13 @@ struct DatabaseEncryptionView: View {
title: Text("Remove passphrase from keychain?"),
message: Text("Instant push notifications will be hidden!\n") + storeSecurelyDanger(),
primaryButton: .destructive(Text("Remove")) {
removePassphraseFromKeyChain()
if kcDatabasePassword.remove() {
logger.debug("passphrase removed from keychain")
setUseKeychain(false)
storedKey = false
} else {
alert = .error(title: "Keychain error", error: "Failed to remove passphrase")
}
},
secondaryButton: .cancel() {
withAnimation { useKeychainToggle = true }
@@ -247,16 +236,6 @@ struct DatabaseEncryptionView: View {
}
}
private func removePassphraseFromKeyChain() {
if kcDatabasePassword.remove() {
logger.debug("passphrase removed from keychain")
setUseKeychain(false)
storedKey = false
} else {
alert = .error(title: "Keychain error", error: "Failed to remove passphrase")
}
}
private func storeSecurelySaved() -> Text {
Text("Please store passphrase securely, you will NOT be able to change it if you lose it.")
}
@@ -367,6 +346,6 @@ func validKey(_ s: String) -> Bool {
struct DatabaseEncryptionView_Previews: PreviewProvider {
static var previews: some View {
DatabaseEncryptionView(useKeychain: Binding.constant(true), migration: false)
DatabaseEncryptionView(useKeychain: Binding.constant(true))
}
}
@@ -64,7 +64,7 @@ struct DatabaseErrorView: View {
case let .migrationError(mtrError):
titleText("Incompatible database version")
fileNameText(dbFile)
Text("Error: ") + Text(DatabaseErrorView.mtrErrorDescription(mtrError))
Text("Error: ") + Text(mtrErrorDescription(mtrError))
}
case let .errorSQL(dbFile, migrationSQLError):
titleText("Database error")
@@ -105,7 +105,7 @@ struct DatabaseErrorView: View {
Text("Migrations: \(ms.joined(separator: ", "))")
}
static func mtrErrorDescription(_ err: MTRError) -> LocalizedStringKey {
private func mtrErrorDescription(_ err: MTRError) -> LocalizedStringKey {
switch err {
case let .noDown(dbMigrations):
return "database version is newer than the app, but no down migration for: \(dbMigrations.joined(separator: ", "))"
@@ -116,7 +116,7 @@ struct DatabaseView: View {
let color: Color = unencrypted ? .orange : .secondary
settingsRow(unencrypted ? "lock.open" : useKeychain ? "key" : "lock", color: color) {
NavigationLink {
DatabaseEncryptionView(useKeychain: $useKeychain, migration: false)
DatabaseEncryptionView(useKeychain: $useKeychain)
.navigationTitle("Database passphrase")
} label: {
Text("Database passphrase")
@@ -485,10 +485,6 @@ func deleteChatAsync() async throws {
_ = kcDatabasePassword.remove()
storeDBPassphraseGroupDefault.set(true)
deleteAppDatabaseAndFiles()
// Clean state so when creating new user the app will start chat automatically (see CreateProfile:createProfile())
DispatchQueue.main.async {
ChatModel.shared.users = []
}
}
struct DatabaseView_Previews: PreviewProvider {
@@ -188,7 +188,6 @@ struct MigrateToAppGroupView: View {
let config = ArchiveConfig(archivePath: getDocumentsDirectory().appendingPathComponent(archiveName).path)
Task {
do {
try apiSaveAppSettings(settings: AppSettings.current.prepareForExport())
try await apiExportArchive(config: config)
await MainActor.run { setV3DBMigration(.exported) }
} catch let error {
@@ -205,11 +204,7 @@ struct MigrateToAppGroupView: View {
resetChatCtrl()
try await MainActor.run { try initializeChat(start: false) }
let _ = try await apiImportArchive(config: config)
let appSettings = try apiGetAppSettings(settings: AppSettings.current.prepareForExport())
await MainActor.run {
appSettings.importIntoApp()
setV3DBMigration(.migrated)
}
await MainActor.run { setV3DBMigration(.migrated) }
} catch let error {
dbContainerGroupDefault.set(.documents)
await MainActor.run {
@@ -221,22 +216,16 @@ struct MigrateToAppGroupView: View {
}
}
func exportChatArchive(_ storagePath: URL? = nil) async throws -> URL {
func exportChatArchive() async throws -> URL {
let archiveTime = Date.now
let ts = archiveTime.ISO8601Format(Date.ISO8601FormatStyle(timeSeparator: .omitted))
let archiveName = "simplex-chat.\(ts).zip"
let archivePath = (storagePath ?? getDocumentsDirectory()).appendingPathComponent(archiveName)
let archivePath = getDocumentsDirectory().appendingPathComponent(archiveName)
let config = ArchiveConfig(archivePath: archivePath.path)
// Settings should be saved before changing a passphrase, otherwise the database needs to be migrated first
if !ChatModel.shared.chatDbChanged {
try apiSaveAppSettings(settings: AppSettings.current.prepareForExport())
}
try await apiExportArchive(config: config)
if storagePath == nil {
deleteOldArchive()
UserDefaults.standard.set(archiveName, forKey: DEFAULT_CHAT_ARCHIVE_NAME)
chatArchiveTimeDefault.set(archiveTime)
}
deleteOldArchive()
UserDefaults.standard.set(archiveName, forKey: DEFAULT_CHAT_ARCHIVE_NAME)
chatArchiveTimeDefault.set(archiveTime)
return archivePath
}
+11 -20
View File
@@ -11,31 +11,26 @@ import UIKit
import SwiftUI
extension View {
func uiKitContextMenu(maxWidth: CGFloat, menu: Binding<UIMenu>, allowMenu: Binding<Bool>) -> some View {
Group {
if allowMenu.wrappedValue {
InteractionView(content: self, maxWidth: maxWidth, menu: menu)
.fixedSize(horizontal: true, vertical: false)
} else {
self
func uiKitContextMenu(menu: Binding<UIMenu>, allowMenu: Binding<Bool>) -> some View {
self.overlay {
if allowMenu.wrappedValue {
self.overlay(Color(uiColor: .systemBackground)).overlay(InteractionView(content: self, menu: menu))
}
}
}
}
}
private class HostingViewHolder: UIView {
var contentSize: CGSize = CGSizeMake(0, 0)
override var intrinsicContentSize: CGSize { get { contentSize } }
private struct InteractionConfig<Content: View> {
let content: Content
let menu: UIMenu
}
struct InteractionView<Content: View>: UIViewRepresentable {
private struct InteractionView<Content: View>: UIViewRepresentable {
let content: Content
var maxWidth: CGFloat
@Binding var menu: UIMenu
func makeUIView(context: Context) -> UIView {
let view = HostingViewHolder()
view.contentSize = CGSizeMake(maxWidth, .infinity)
let view = UIView()
view.backgroundColor = .clear
let hostView = UIHostingController(rootView: content)
hostView.view.translatesAutoresizingMaskIntoConstraints = false
@@ -49,16 +44,12 @@ struct InteractionView<Content: View>: UIViewRepresentable {
]
view.addSubview(hostView.view)
view.addConstraints(constraints)
view.layer.cornerRadius = 18
hostView.view.layer.cornerRadius = 18
let menuInteraction = UIContextMenuInteraction(delegate: context.coordinator)
view.addInteraction(menuInteraction)
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
(uiView as! HostingViewHolder).contentSize = uiView.subviews[0].sizeThatFits(CGSizeMake(maxWidth, .infinity))
}
func updateUIView(_ uiView: UIView, context: Context) {}
func makeCoordinator() -> Coordinator {
Coordinator(self)
@@ -1,734 +0,0 @@
//
// MigrateFromDevice.swift
// SimpleX (iOS)
//
// Created by Avently on 14.02.2024.
// Copyright © 2024 SimpleX Chat. All rights reserved.
//
import SwiftUI
import SimpleXChat
private enum MigrationFromState: Equatable {
case chatStopInProgress
case chatStopFailed(reason: String)
case passphraseNotSet
case passphraseConfirmation
case uploadConfirmation
case archiving
case uploadProgress(uploadedBytes: Int64, totalBytes: Int64, fileId: Int64, archivePath: URL, ctrl: chat_ctrl?)
case uploadFailed(totalBytes: Int64, archivePath: URL)
case linkCreation
case linkShown(fileId: Int64, link: String, archivePath: URL, ctrl: chat_ctrl)
case finished(chatDeletion: Bool)
}
private enum MigrateFromDeviceViewAlert: Identifiable {
case deleteChat(_ title: LocalizedStringKey = "Delete chat profile?", _ text: LocalizedStringKey = "This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.")
case startChat(_ title: LocalizedStringKey = "Start chat?", _ text: LocalizedStringKey = "Warning: starting chat on multiple devices is not supported and will cause message delivery failures")
case wrongPassphrase(title: LocalizedStringKey = "Wrong passphrase!", message: LocalizedStringKey = "Enter correct passphrase.")
case invalidConfirmation(title: LocalizedStringKey = "Invalid migration confirmation")
case keychainError(_ title: LocalizedStringKey = "Keychain error")
case databaseError(_ title: LocalizedStringKey = "Database error", message: String)
case unknownError(_ title: LocalizedStringKey = "Unknown error", message: String)
case error(title: LocalizedStringKey, error: String = "")
var id: String {
switch self {
case let .deleteChat(title, text): return "\(title) \(text)"
case let .startChat(title, text): return "\(title) \(text)"
case .wrongPassphrase: return "wrongPassphrase"
case .invalidConfirmation: return "invalidConfirmation"
case .keychainError: return "keychainError"
case let .databaseError(title, message): return "\(title) \(message)"
case let .unknownError(title, message): return "\(title) \(message)"
case let .error(title, _): return "error \(title)"
}
}
}
struct MigrateFromDevice: View {
@EnvironmentObject var m: ChatModel
@Environment(\.dismiss) var dismiss: DismissAction
@Binding var showSettings: Bool
@Binding var showProgressOnSettings: Bool
@State private var migrationState: MigrationFromState = .chatStopInProgress
@State private var useKeychain = storeDBPassphraseGroupDefault.get()
@AppStorage(GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE, store: groupDefaults) private var initialRandomDBPassphrase: Bool = false
@State private var alert: MigrateFromDeviceViewAlert?
@State private var authorized = !UserDefaults.standard.bool(forKey: DEFAULT_PERFORM_LA)
private let tempDatabaseUrl = urlForTemporaryDatabase()
@State private var chatReceiver: MigrationChatReceiver? = nil
@State private var backDisabled: Bool = false
var body: some View {
if authorized {
migrateView()
} else {
Button(action: runAuth) { Label("Unlock", systemImage: "lock") }
.onAppear(perform: runAuth)
}
}
private func runAuth() { authorize(NSLocalizedString("Open migration to another device", comment: "authentication reason"), $authorized) }
func migrateView() -> some View {
VStack {
switch migrationState {
case .chatStopInProgress:
chatStopInProgressView()
case let .chatStopFailed(reason):
chatStopFailedView(reason)
case .passphraseNotSet:
passphraseNotSetView()
case .passphraseConfirmation:
PassphraseConfirmationView(migrationState: $migrationState, alert: $alert)
case .uploadConfirmation:
uploadConfirmationView()
case .archiving:
archivingView()
case let .uploadProgress(uploaded, total, _, archivePath, _):
uploadProgressView(uploaded, totalBytes: total, archivePath)
case let .uploadFailed(total, archivePath):
uploadFailedView(totalBytes: total, archivePath)
case .linkCreation:
linkCreationView()
case let .linkShown(fileId, link, archivePath, ctrl):
linkShownView(fileId, link, archivePath, ctrl)
case let .finished(chatDeletion):
finishedView(chatDeletion)
}
}
.modifier(BackButton(label: "Back", disabled: $backDisabled) {
dismiss()
})
.onChange(of: migrationState) { state in
backDisabled = switch migrationState {
case .chatStopInProgress, .archiving, .linkShown, .finished: true
case .chatStopFailed, .passphraseNotSet, .passphraseConfirmation, .uploadConfirmation, .uploadProgress, .uploadFailed, .linkCreation: false
}
}
.onAppear {
stopChat()
}
.onDisappear {
Task {
if !backDisabled {
await MainActor.run {
showProgressOnSettings = true
}
await startChatAndDismiss(false)
await MainActor.run {
showProgressOnSettings = false
}
}
if case let .uploadProgress(_, _, fileId, _, ctrl) = migrationState, let ctrl {
await cancelUploadedArchive(fileId, ctrl)
}
chatReceiver?.stopAndCleanUp()
try? FileManager.default.removeItem(at: getMigrationTempFilesDirectory())
}
}
.alert(item: $alert) { alert in
switch alert {
case let .startChat(title, text):
return Alert(
title: Text(title),
message: Text(text),
primaryButton: .destructive(Text("Start chat")) {
Task {
await startChatAndDismiss()
}
},
secondaryButton: .cancel()
)
case let .deleteChat(title, text):
return Alert(
title: Text(title),
message: Text(text),
primaryButton: .default(Text("Delete")) {
deleteChatAndDismiss()
},
secondaryButton: .cancel()
)
case let .wrongPassphrase(title, message):
return Alert(title: Text(title), message: Text(message))
case let .invalidConfirmation(title):
return Alert(title: Text(title))
case let .keychainError(title):
return Alert(title: Text(title))
case let .databaseError(title, message):
return Alert(title: Text(title), message: Text(message))
case let .unknownError(title, message):
return Alert(title: Text(title), message: Text(message))
case let .error(title, error):
return Alert(title: Text(title), message: Text(error))
}
}
.interactiveDismissDisabled(backDisabled)
}
private func chatStopInProgressView() -> some View {
ZStack {
List {
Section {} header: {
Text("Stopping chat")
}
}
progressView()
}
}
private func chatStopFailedView(_ reason: String) -> some View {
List {
Section {
Text(reason)
Button(action: stopChat) {
settingsRow("stop.fill") {
Text("Stop chat").foregroundColor(.red)
}
}
} header: {
Text("Error stopping chat")
} footer: {
Text("In order to continue, chat should be stopped.")
.font(.callout)
}
}
}
private func passphraseNotSetView() -> some View {
DatabaseEncryptionView(useKeychain: $useKeychain, migration: true)
.onChange(of: initialRandomDBPassphrase) { initial in
if !initial {
migrationState = .uploadConfirmation
}
}
}
private func uploadConfirmationView() -> some View {
List {
Section {
Button(action: { migrationState = .archiving }) {
settingsRow("tray.and.arrow.up") {
Text("Archive and upload").foregroundColor(.accentColor)
}
}
} header: {
Text("Confirm upload")
} footer: {
Text("All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.")
.font(.callout)
}
}
}
private func archivingView() -> some View {
ZStack {
List {
Section {} header: {
Text("Archiving database")
}
}
progressView()
}
.onAppear {
exportArchive()
}
}
private func uploadProgressView(_ uploadedBytes: Int64, totalBytes: Int64, _ archivePath: URL) -> some View {
ZStack {
List {
Section {} header: {
Text("Uploading archive")
}
}
let ratio = Float(uploadedBytes) / Float(totalBytes)
MigrateFromDevice.largeProgressView(ratio, "\(Int(ratio * 100))%", "\(ByteCountFormatter.string(fromByteCount: uploadedBytes, countStyle: .binary)) uploaded")
}
.onAppear {
startUploading(totalBytes, archivePath)
}
}
private func uploadFailedView(totalBytes: Int64, _ archivePath: URL) -> some View {
List {
Section {
Button(action: {
migrationState = .uploadProgress(uploadedBytes: 0, totalBytes: totalBytes, fileId: 0, archivePath: archivePath, ctrl: nil)
}) {
settingsRow("tray.and.arrow.up") {
Text("Repeat upload").foregroundColor(.accentColor)
}
}
} header: {
Text("Upload failed")
} footer: {
Text("You can give another try.")
.font(.callout)
}
}
.onAppear {
chatReceiver?.stopAndCleanUp()
}
}
private func linkCreationView() -> some View {
ZStack {
List {
Section {} header: {
Text("Creating archive link")
}
}
progressView()
}
}
private func linkShownView(_ fileId: Int64, _ link: String, _ archivePath: URL, _ ctrl: chat_ctrl) -> some View {
List {
Section {
Button(action: { cancelMigration(fileId, ctrl) }) {
settingsRow("multiply") {
Text("Cancel migration").foregroundColor(.red)
}
}
Button(action: { finishMigration(fileId, ctrl) }) {
settingsRow("checkmark") {
Text("Finalize migration").foregroundColor(.accentColor)
}
}
} footer: {
VStack(alignment: .leading, spacing: 16) {
Text("**Warning**: the archive will be removed.")
Text("Choose _Migrate from another device_ on the new device and scan QR code.")
}
.font(.callout)
}
Section("Show QR code") {
SimpleXLinkQRCode(uri: link)
.padding()
.background(
RoundedRectangle(cornerRadius: 12, style: .continuous)
.fill(Color(uiColor: .secondarySystemGroupedBackground))
)
.padding(.horizontal)
.listRowBackground(Color.clear)
.listRowSeparator(.hidden)
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
}
Section("Or securely share this file link") {
shareLinkView(link)
}
.listRowInsets(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 10))
}
}
private func finishedView(_ chatDeletion: Bool) -> some View {
ZStack {
List {
Section {
Button(action: { alert = .startChat() }) {
settingsRow("play.fill") {
Text("Start chat").foregroundColor(.red)
}
}
Button(action: { alert = .deleteChat() }) {
settingsRow("trash.fill") {
Text("Delete database from this device").foregroundColor(.accentColor)
}
}
} header: {
Text("Migration complete")
} footer: {
VStack(alignment: .leading, spacing: 16) {
Text("You **must not** use the same database on two devices.")
Text("**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.")
}
.font(.callout)
}
}
if chatDeletion {
progressView()
}
}
}
private func shareLinkView(_ link: String) -> some View {
HStack {
linkTextView(link)
Button {
showShareSheet(items: [link])
} label: {
Image(systemName: "square.and.arrow.up")
.padding(.top, -7)
}
}
.frame(maxWidth: .infinity)
}
private func linkTextView(_ link: String) -> some View {
Text(link)
.lineLimit(1)
.font(.caption)
.truncationMode(.middle)
}
static func largeProgressView(_ value: Float, _ title: String, _ description: LocalizedStringKey) -> some View {
ZStack {
VStack {
Text(description)
.font(.title3)
.hidden()
Text(title)
.font(.system(size: 54))
.bold()
.foregroundColor(.accentColor)
Text(description)
.font(.title3)
}
Circle()
.trim(from: 0, to: CGFloat(value))
.stroke(
Color.accentColor,
style: StrokeStyle(lineWidth: 27)
)
.rotationEffect(.degrees(180))
.animation(.linear, value: value)
.frame(maxWidth: .infinity)
.padding(.horizontal)
.padding(.horizontal)
}
.frame(maxWidth: .infinity)
}
private func stopChat() {
Task {
do {
try await stopChatAsync()
do {
try apiSaveAppSettings(settings: AppSettings.current.prepareForExport())
await MainActor.run {
migrationState = initialRandomDBPassphraseGroupDefault.get() ? .passphraseNotSet : .passphraseConfirmation
}
} catch let error {
alert = .error(title: "Error saving settings", error: error.localizedDescription)
migrationState = .chatStopFailed(reason: NSLocalizedString("Error saving settings", comment: "when migrating"))
}
} catch let e {
await MainActor.run {
migrationState = .chatStopFailed(reason: e.localizedDescription)
}
}
}
}
private func exportArchive() {
Task {
do {
try? FileManager.default.createDirectory(at: getMigrationTempFilesDirectory(), withIntermediateDirectories: true)
let archivePath = try await exportChatArchive(getMigrationTempFilesDirectory())
if let attrs = try? FileManager.default.attributesOfItem(atPath: archivePath.path),
let totalBytes = attrs[.size] as? Int64 {
await MainActor.run {
migrationState = .uploadProgress(uploadedBytes: 0, totalBytes: totalBytes, fileId: 0, archivePath: archivePath, ctrl: nil)
}
} else {
await MainActor.run {
alert = .error(title: "Exported file doesn't exist")
migrationState = .uploadConfirmation
}
}
} catch let error {
await MainActor.run {
alert = .error(title: "Error exporting chat database", error: responseError(error))
migrationState = .uploadConfirmation
}
}
}
}
private func initTemporaryDatabase() -> (chat_ctrl, User)? {
let (status, ctrl) = chatInitTemporaryDatabase(url: tempDatabaseUrl)
showErrorOnMigrationIfNeeded(status, $alert)
do {
if let ctrl, let user = try startChatWithTemporaryDatabase(ctrl: ctrl) {
return (ctrl, user)
}
} catch let error {
logger.error("Error while starting chat in temporary database: \(error.localizedDescription)")
}
return nil
}
private func startUploading(_ totalBytes: Int64, _ archivePath: URL) {
Task {
guard let ctrlAndUser = initTemporaryDatabase() else {
return migrationState = .uploadFailed(totalBytes: totalBytes, archivePath: archivePath)
}
let (ctrl, user) = ctrlAndUser
chatReceiver = MigrationChatReceiver(ctrl: ctrl, databaseUrl: tempDatabaseUrl) { msg in
await MainActor.run {
switch msg {
case let .sndFileProgressXFTP(_, _, fileTransferMeta, sentSize, totalSize):
if case let .uploadProgress(uploaded, total, _, _, _) = migrationState, uploaded != total {
migrationState = .uploadProgress(uploadedBytes: sentSize, totalBytes: totalSize, fileId: fileTransferMeta.fileId, archivePath: archivePath, ctrl: ctrl)
}
case .sndFileRedirectStartXFTP:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
migrationState = .linkCreation
}
case let .sndStandaloneFileComplete(_, fileTransferMeta, rcvURIs):
let cfg = getNetCfg()
let data = MigrationFileLinkData.init(
networkConfig: MigrationFileLinkData.NetworkConfig(
socksProxy: cfg.socksProxy,
hostMode: cfg.hostMode,
requiredHostMode: cfg.requiredHostMode
)
)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
migrationState = .linkShown(fileId: fileTransferMeta.fileId, link: data.addToLink(link: rcvURIs[0]), archivePath: archivePath, ctrl: ctrl)
}
case .sndFileError:
alert = .error(title: "Upload failed", error: "Check your internet connection and try again")
migrationState = .uploadFailed(totalBytes: totalBytes, archivePath: archivePath)
default:
logger.debug("unsupported event: \(msg.responseType)")
}
}
}
chatReceiver?.start()
let (res, error) = await uploadStandaloneFile(user: user, file: CryptoFile.plain(archivePath.lastPathComponent), ctrl: ctrl)
await MainActor.run {
guard let res = res else {
migrationState = .uploadFailed(totalBytes: totalBytes, archivePath: archivePath)
return alert = .error(title: "Error uploading the archive", error: error ?? "")
}
migrationState = .uploadProgress(uploadedBytes: 0, totalBytes: res.fileSize, fileId: res.fileId, archivePath: archivePath, ctrl: ctrl)
}
}
}
private func cancelUploadedArchive(_ fileId: Int64, _ ctrl: chat_ctrl) async {
_ = await apiCancelFile(fileId: fileId, ctrl: ctrl)
}
private func cancelMigration(_ fileId: Int64, _ ctrl: chat_ctrl) {
Task {
await cancelUploadedArchive(fileId, ctrl)
await startChatAndDismiss()
}
}
private func finishMigration(_ fileId: Int64, _ ctrl: chat_ctrl) {
Task {
await cancelUploadedArchive(fileId, ctrl)
await MainActor.run {
migrationState = .finished(chatDeletion: false)
}
}
}
private func deleteChatAndDismiss() {
Task {
do {
try await deleteChatAsync()
m.chatDbChanged = true
m.chatInitialized = false
migrationState = .finished(chatDeletion: true)
DispatchQueue.main.asyncAfter(deadline: .now()) {
resetChatCtrl()
do {
try initializeChat(start: false)
m.chatDbChanged = false
AppChatState.shared.set(.active)
} catch let error {
fatalError("Error starting chat \(responseError(error))")
}
showSettings = false
}
} catch let error {
alert = .error(title: "Error deleting database", error: responseError(error))
}
}
}
private func startChatAndDismiss(_ dismiss: Bool = true) async {
AppChatState.shared.set(.active)
do {
if m.chatDbChanged {
resetChatCtrl()
try initializeChat(start: true)
m.chatDbChanged = false
} else {
try startChat(refreshInvitations: true)
}
} catch let error {
alert = .error(title: "Error starting chat", error: responseError(error))
}
// Hide settings anyway if chatDbStatus is not ok, probably passphrase needs to be entered
if dismiss || m.chatDbStatus != .ok {
await MainActor.run {
showSettings = false
}
}
}
private static func urlForTemporaryDatabase() -> URL {
URL(fileURLWithPath: generateNewFileName(getMigrationTempFilesDirectory().path + "/" + "migration", "db", fullPath: true))
}
}
private struct PassphraseConfirmationView: View {
@Binding var migrationState: MigrationFromState
@State private var useKeychain = storeDBPassphraseGroupDefault.get()
@State private var currentKey: String = ""
@State private var verifyingPassphrase: Bool = false
@FocusState private var keyboardVisible: Bool
@Binding var alert: MigrateFromDeviceViewAlert?
var body: some View {
ZStack {
List {
chatStoppedView()
Section {
PassphraseField(key: $currentKey, placeholder: "Current passphrase…", valid: validKey(currentKey))
.focused($keyboardVisible)
Button(action: {
verifyingPassphrase = true
hideKeyboard()
Task {
await verifyDatabasePassphrase(currentKey)
verifyingPassphrase = false
}
}) {
settingsRow(useKeychain ? "key" : "lock", color: .secondary) {
Text("Verify passphrase")
}
}
.disabled(verifyingPassphrase || currentKey.isEmpty)
} header: {
Text("Verify database passphrase")
} footer: {
Text("Confirm that you remember database passphrase to migrate it.")
.font(.callout)
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
keyboardVisible = true
}
}
}
if verifyingPassphrase {
progressView()
}
}
}
private func verifyDatabasePassphrase(_ dbKey: String) async {
do {
try await testStorageEncryption(key: dbKey)
await MainActor.run {
migrationState = .uploadConfirmation
}
} catch let error {
if case .chatCmdError(_, .errorDatabase(.errorOpen(.errorNotADatabase))) = error as? ChatResponse {
showErrorOnMigrationIfNeeded(.errorNotADatabase(dbFile: ""), $alert)
} else {
alert = .error(title: "Error", error: NSLocalizedString("Error verifying passphrase:", comment: "") + " " + String(String(describing: error)))
}
}
}
}
private func showErrorOnMigrationIfNeeded(_ status: DBMigrationResult, _ alert: Binding<MigrateFromDeviceViewAlert?>) {
switch status {
case .invalidConfirmation:
alert.wrappedValue = .invalidConfirmation()
case .errorNotADatabase:
alert.wrappedValue = .wrongPassphrase()
case .errorKeychain:
alert.wrappedValue = .keychainError()
case let .errorSQL(_, error):
alert.wrappedValue = .databaseError(message: error)
case let .unknown(error):
alert.wrappedValue = .unknownError(message: error)
case .errorMigration: ()
case .ok: ()
}
}
private func progressView() -> some View {
VStack {
ProgressView().scaleEffect(2)
}
.frame(maxWidth: .infinity, maxHeight: .infinity )
}
func chatStoppedView() -> some View {
settingsRow("exclamationmark.octagon.fill", color: .red) {
Text("Chat is stopped")
}
}
private class MigrationChatReceiver {
let ctrl: chat_ctrl
let databaseUrl: URL
let processReceivedMsg: (ChatResponse) async -> Void
private var receiveLoop: Task<Void, Never>?
private var receiveMessages = true
init(ctrl: chat_ctrl, databaseUrl: URL, _ processReceivedMsg: @escaping (ChatResponse) async -> Void) {
self.ctrl = ctrl
self.databaseUrl = databaseUrl
self.processReceivedMsg = processReceivedMsg
}
func start() {
logger.debug("MigrationChatReceiver.start")
receiveMessages = true
if receiveLoop != nil { return }
receiveLoop = Task { await receiveMsgLoop() }
}
func receiveMsgLoop() async {
// TODO use function that has timeout
if let msg = await chatRecvMsg(ctrl) {
Task {
await TerminalItems.shared.add(.resp(.now, msg))
}
logger.debug("processReceivedMsg: \(msg.responseType)")
await processReceivedMsg(msg)
}
if self.receiveMessages {
_ = try? await Task.sleep(nanoseconds: 7_500_000)
await receiveMsgLoop()
}
}
func stopAndCleanUp() {
logger.debug("MigrationChatReceiver.stop")
receiveMessages = false
receiveLoop?.cancel()
receiveLoop = nil
chat_close_store(ctrl)
try? FileManager.default.removeItem(atPath: "\(databaseUrl.path)_chat.db")
try? FileManager.default.removeItem(atPath: "\(databaseUrl.path)_agent.db")
}
}
struct MigrateFromDevice_Previews: PreviewProvider {
static var previews: some View {
MigrateFromDevice(showSettings: Binding.constant(true), showProgressOnSettings: Binding.constant(false))
}
}
@@ -1,714 +0,0 @@
//
// MigrateToDevice.swift
// SimpleX (iOS)
//
// Created by Avently on 23.02.2024.
// Copyright © 2024 SimpleX Chat. All rights reserved.
//
import SwiftUI
import SimpleXChat
enum MigrationToDeviceState: Codable, Equatable {
case downloadProgress(link: String, archiveName: String)
case archiveImport(archiveName: String)
case passphrase
// Here we check whether it's needed to show migration process after app restart or not
// It's important to NOT show the process when archive was corrupted/not fully downloaded
static func makeMigrationState() -> MigrationToState? {
let state: MigrationToDeviceState? = UserDefaults.standard.string(forKey: DEFAULT_MIGRATION_TO_STAGE) != nil ? decodeJSON(UserDefaults.standard.string(forKey: DEFAULT_MIGRATION_TO_STAGE)!) : nil
var initial: MigrationToState? = .pasteOrScanLink
//logger.debug("Inited with migrationState: \(String(describing: state))")
switch state {
case nil:
initial = nil
case .downloadProgress:
// No migration happens at the moment actually since archive were not downloaded fully
logger.debug("MigrateToDevice: archive wasn't fully downloaded, removed broken file")
initial = nil
case let .archiveImport(archiveName):
let archivePath = getMigrationTempFilesDirectory().path + "/" + archiveName
initial = .archiveImportFailed(archivePath: archivePath)
case .passphrase:
initial = .passphrase(passphrase: "")
}
if initial == nil {
UserDefaults.standard.removeObject(forKey: DEFAULT_MIGRATION_TO_STAGE)
try? FileManager.default.removeItem(at: getMigrationTempFilesDirectory())
}
return initial
}
static func save(_ state: MigrationToDeviceState?) {
if let state {
UserDefaults.standard.setValue(encodeJSON(state), forKey: DEFAULT_MIGRATION_TO_STAGE)
} else {
UserDefaults.standard.removeObject(forKey: DEFAULT_MIGRATION_TO_STAGE)
}
}
}
enum MigrationToState: Equatable {
case pasteOrScanLink
case linkDownloading(link: String)
case downloadProgress(downloadedBytes: Int64, totalBytes: Int64, fileId: Int64, link: String, archivePath: String, ctrl: chat_ctrl?)
case downloadFailed(totalBytes: Int64, link: String, archivePath: String)
case archiveImport(archivePath: String)
case archiveImportFailed(archivePath: String)
case passphrase(passphrase: String)
case migrationConfirmation(status: DBMigrationResult, passphrase: String, useKeychain: Bool)
case migration(passphrase: String, confirmation: MigrationConfirmation, useKeychain: Bool)
case onion(appSettings: AppSettings)
}
private enum MigrateToDeviceViewAlert: Identifiable {
case chatImportedWithErrors(title: LocalizedStringKey = "Chat database imported",
text: LocalizedStringKey = "Some non-fatal errors occurred during import - you may see Chat console for more details.")
case wrongPassphrase(title: LocalizedStringKey = "Wrong passphrase!", message: LocalizedStringKey = "Enter correct passphrase.")
case invalidConfirmation(title: LocalizedStringKey = "Invalid migration confirmation")
case keychainError(_ title: LocalizedStringKey = "Keychain error")
case databaseError(_ title: LocalizedStringKey = "Database error", message: String)
case unknownError(_ title: LocalizedStringKey = "Unknown error", message: String)
case error(title: LocalizedStringKey, error: String = "")
var id: String {
switch self {
case .chatImportedWithErrors: return "chatImportedWithErrors"
case .wrongPassphrase: return "wrongPassphrase"
case .invalidConfirmation: return "invalidConfirmation"
case .keychainError: return "keychainError"
case let .databaseError(title, message): return "\(title) \(message)"
case let .unknownError(title, message): return "\(title) \(message)"
case let .error(title, _): return "error \(title)"
}
}
}
struct MigrateToDevice: View {
@EnvironmentObject var m: ChatModel
@Environment(\.dismiss) var dismiss: DismissAction
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@Binding var migrationState: MigrationToState?
@State private var useKeychain = storeDBPassphraseGroupDefault.get()
@State private var alert: MigrateToDeviceViewAlert?
private let tempDatabaseUrl = urlForTemporaryDatabase()
@State private var chatReceiver: MigrationChatReceiver? = nil
// Prevent from hiding the view until migration is finished or app deleted
@State private var backDisabled: Bool = false
@State private var showQRCodeScanner: Bool = true
var body: some View {
VStack {
switch migrationState {
case nil: EmptyView()
case .pasteOrScanLink:
pasteOrScanLinkView()
case let .linkDownloading(link):
linkDownloadingView(link)
case let .downloadProgress(downloaded, total, _, _, _, _):
downloadProgressView(downloaded, totalBytes: total)
case let .downloadFailed(total, link, archivePath):
downloadFailedView(totalBytes: total, link, archivePath)
case let .archiveImport(archivePath):
archiveImportView(archivePath)
case let .archiveImportFailed(archivePath):
archiveImportFailedView(archivePath)
case let .passphrase(passphrase):
PassphraseEnteringView(migrationState: $migrationState, currentKey: passphrase, alert: $alert)
case let .migrationConfirmation(status, passphrase, useKeychain):
migrationConfirmationView(status, passphrase, useKeychain)
case let .migration(passphrase, confirmation, useKeychain):
migrationView(passphrase, confirmation, useKeychain)
case let .onion(appSettings):
OnionView(appSettings: appSettings, finishMigration: finishMigration)
}
}
.onAppear {
backDisabled = switch migrationState {
case nil, .pasteOrScanLink, .linkDownloading, .downloadProgress, .downloadFailed, .archiveImportFailed: false
case .archiveImport, .passphrase, .migrationConfirmation, .migration, .onion: true
}
}
.onChange(of: migrationState) { state in
backDisabled = switch state {
case nil, .pasteOrScanLink, .linkDownloading, .downloadProgress, .downloadFailed, .archiveImportFailed: false
case .archiveImport, .passphrase, .migrationConfirmation, .migration, .onion: true
}
}
.onDisappear {
Task {
if case .archiveImportFailed = migrationState {
// Original database is not exist, nothing is setup correctly for showing to a user yet. Return to clean state
deleteAppDatabaseAndFiles()
initChatAndMigrate()
} else if case let .downloadProgress(_, _, fileId, _, _, ctrl) = migrationState, let ctrl {
await stopArchiveDownloading(fileId, ctrl)
}
chatReceiver?.stopAndCleanUp()
if !backDisabled {
try? FileManager.default.removeItem(at: getMigrationTempFilesDirectory())
MigrationToDeviceState.save(nil)
}
}
}
.alert(item: $alert) { alert in
switch alert {
case let .chatImportedWithErrors(title, text):
return Alert(title: Text(title), message: Text(text))
case let .wrongPassphrase(title, message):
return Alert(title: Text(title), message: Text(message))
case let .invalidConfirmation(title):
return Alert(title: Text(title))
case let .keychainError(title):
return Alert(title: Text(title))
case let .databaseError(title, message):
return Alert(title: Text(title), message: Text(message))
case let .unknownError(title, message):
return Alert(title: Text(title), message: Text(message))
case let .error(title, error):
return Alert(title: Text(title), message: Text(error))
}
}
.interactiveDismissDisabled(backDisabled)
}
private func pasteOrScanLinkView() -> some View {
ZStack {
List {
Section("Scan QR code") {
ScannerInView(showQRCodeScanner: $showQRCodeScanner) { resp in
switch resp {
case let .success(r):
let link = r.string
if strHasSimplexFileLink(link.trimmingCharacters(in: .whitespaces)) {
migrationState = .linkDownloading(link: link.trimmingCharacters(in: .whitespaces))
} else {
alert = .error(title: "Invalid link", error: "The text you pasted is not a SimpleX link.")
}
case let .failure(e):
logger.error("processQRCode QR code error: \(e.localizedDescription)")
alert = .error(title: "Invalid link", error: "The text you pasted is not a SimpleX link.")
}
}
}
if developerTools {
Section("Or paste archive link") {
pasteLinkView()
}
}
}
}
}
private func pasteLinkView() -> some View {
Button {
if let str = UIPasteboard.general.string {
if strHasSimplexFileLink(str.trimmingCharacters(in: .whitespaces)) {
migrationState = .linkDownloading(link: str.trimmingCharacters(in: .whitespaces))
} else {
alert = .error(title: "Invalid link", error: "The text you pasted is not a SimpleX link.")
}
}
} label: {
Text("Tap to paste link")
}
.disabled(!ChatModel.shared.pasteboardHasStrings)
.frame(maxWidth: .infinity, alignment: .center)
}
private func linkDownloadingView(_ link: String) -> some View {
ZStack {
List {
Section {} header: {
Text("Downloading link details")
}
}
progressView()
}
.onAppear {
downloadLinkDetails(link)
}
}
private func downloadProgressView(_ downloadedBytes: Int64, totalBytes: Int64) -> some View {
ZStack {
List {
Section {} header: {
Text("Downloading archive")
}
}
let ratio = Float(downloadedBytes) / Float(max(totalBytes, 1))
MigrateFromDevice.largeProgressView(ratio, "\(Int(ratio * 100))%", "\(ByteCountFormatter.string(fromByteCount: downloadedBytes, countStyle: .binary)) downloaded")
}
}
private func downloadFailedView(totalBytes: Int64, _ link: String, _ archivePath: String) -> some View {
List {
Section {
Button(action: {
try? FileManager.default.removeItem(atPath: archivePath)
migrationState = .linkDownloading(link: link)
}) {
settingsRow("tray.and.arrow.down") {
Text("Repeat download").foregroundColor(.accentColor)
}
}
} header: {
Text("Download failed")
} footer: {
Text("You can give another try.")
.font(.callout)
}
}
.onAppear {
chatReceiver?.stopAndCleanUp()
try? FileManager.default.removeItem(atPath: archivePath)
MigrationToDeviceState.save(nil)
}
}
private func archiveImportView(_ archivePath: String) -> some View {
ZStack {
List {
Section {} header: {
Text("Importing archive")
}
}
progressView()
}
.onAppear {
importArchive(archivePath)
}
}
private func archiveImportFailedView(_ archivePath: String) -> some View {
List {
Section {
Button(action: {
migrationState = .archiveImport(archivePath: archivePath)
}) {
settingsRow("square.and.arrow.down") {
Text("Repeat import").foregroundColor(.accentColor)
}
}
} header: {
Text("Import failed")
} footer: {
Text("You can give another try.")
.font(.callout)
}
}
}
private func migrationConfirmationView(_ status: DBMigrationResult, _ passphrase: String, _ useKeychain: Bool) -> some View {
List {
let (header, button, footer, confirmation): (LocalizedStringKey, LocalizedStringKey?, String, MigrationConfirmation?) = switch status {
case let .errorMigration(_, migrationError):
switch migrationError {
case .upgrade:
("Database upgrade",
"Upgrade and open chat",
"",
.yesUp)
case .downgrade:
("Database downgrade",
"Downgrade and open chat",
NSLocalizedString("Warning: you may lose some data!", comment: ""),
.yesUpDown)
case let .migrationError(mtrError):
("Incompatible database version",
nil,
"\(NSLocalizedString("Error: ", comment: "")) \(DatabaseErrorView.mtrErrorDescription(mtrError))",
nil)
}
default: ("Error", nil, "Unknown error", nil)
}
Section {
if let button, let confirmation {
Button(action: {
migrationState = .migration(passphrase: passphrase, confirmation: confirmation, useKeychain: useKeychain)
}) {
settingsRow("square.and.arrow.down") {
Text(button).foregroundColor(.accentColor)
}
}
} else {
EmptyView()
}
} header: {
Text(header)
} footer: {
Text(footer)
.font(.callout)
}
}
}
private func migrationView(_ passphrase: String, _ confirmation: MigrationConfirmation, _ useKeychain: Bool) -> some View {
ZStack {
List {
Section {} header: {
Text("Migrating")
}
}
progressView()
}
.onAppear {
startChat(passphrase, confirmation, useKeychain)
}
}
struct OnionView: View {
@State var appSettings: AppSettings
@State private var onionHosts: OnionHosts = .no
var finishMigration: (AppSettings) -> Void
var body: some View {
List {
Section {
Button(action: {
var updated = appSettings.networkConfig!
let (hostMode, requiredHostMode) = onionHosts.hostMode
updated.hostMode = hostMode
updated.requiredHostMode = requiredHostMode
updated.socksProxy = nil
appSettings.networkConfig = updated
finishMigration(appSettings)
}) {
settingsRow("checkmark") {
Text("Apply").foregroundColor(.accentColor)
}
}
} header: {
Text("Confirm network settings")
} footer: {
Text("Please confirm that network settings are correct for this device.")
.font(.callout)
}
Section("Network settings") {
Picker("Use .onion hosts", selection: $onionHosts) {
ForEach(OnionHosts.values, id: \.self) { Text($0.text) }
}
.frame(height: 36)
}
}
}
}
private func downloadLinkDetails(_ link: String) {
let archiveTime = Date.now
let ts = archiveTime.ISO8601Format(Date.ISO8601FormatStyle(timeSeparator: .omitted))
let archiveName = "simplex-chat.\(ts).zip"
let archivePath = getMigrationTempFilesDirectory().appendingPathComponent(archiveName)
startDownloading(0, link, archivePath.path)
}
private func initTemporaryDatabase() -> (chat_ctrl, User)? {
let (status, ctrl) = chatInitTemporaryDatabase(url: tempDatabaseUrl)
showErrorOnMigrationIfNeeded(status, $alert)
do {
if let ctrl, let user = try startChatWithTemporaryDatabase(ctrl: ctrl) {
return (ctrl, user)
}
} catch let error {
logger.error("Error while starting chat in temporary database: \(error.localizedDescription)")
}
return nil
}
private func startDownloading(_ totalBytes: Int64, _ link: String, _ archivePath: String) {
Task {
guard let ctrlAndUser = initTemporaryDatabase() else {
return migrationState = .downloadFailed(totalBytes: totalBytes, link: link, archivePath: archivePath)
}
let (ctrl, user) = ctrlAndUser
chatReceiver = MigrationChatReceiver(ctrl: ctrl, databaseUrl: tempDatabaseUrl) { msg in
await MainActor.run {
switch msg {
case let .rcvFileProgressXFTP(_, _, receivedSize, totalSize, rcvFileTransfer):
migrationState = .downloadProgress(downloadedBytes: receivedSize, totalBytes: totalSize, fileId: rcvFileTransfer.fileId, link: link, archivePath: archivePath, ctrl: ctrl)
MigrationToDeviceState.save(.downloadProgress(link: link, archiveName: URL(fileURLWithPath: archivePath).lastPathComponent))
case .rcvStandaloneFileComplete:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// User closed the whole screen before new state was saved
if migrationState == nil {
MigrationToDeviceState.save(nil)
} else {
migrationState = .archiveImport(archivePath: archivePath)
MigrationToDeviceState.save(.archiveImport(archiveName: URL(fileURLWithPath: archivePath).lastPathComponent))
}
}
case .rcvFileError:
alert = .error(title: "Download failed", error: "File was deleted or link is invalid")
migrationState = .downloadFailed(totalBytes: totalBytes, link: link, archivePath: archivePath)
default:
logger.debug("unsupported event: \(msg.responseType)")
}
}
}
chatReceiver?.start()
let (res, error) = await downloadStandaloneFile(user: user, url: link, file: CryptoFile.plain(URL(fileURLWithPath: archivePath).lastPathComponent), ctrl: ctrl)
if res == nil {
await MainActor.run {
migrationState = .downloadFailed(totalBytes: totalBytes, link: link, archivePath: archivePath)
}
return alert = .error(title: "Error downloading the archive", error: error ?? "")
}
}
}
private func importArchive(_ archivePath: String) {
Task {
do {
if !hasChatCtrl() {
chatInitControllerRemovingDatabases()
}
try await apiDeleteStorage()
do {
let config = ArchiveConfig(archivePath: archivePath)
let archiveErrors = try await apiImportArchive(config: config)
if !archiveErrors.isEmpty {
alert = .chatImportedWithErrors()
}
await MainActor.run {
migrationState = .passphrase(passphrase: "")
MigrationToDeviceState.save(.passphrase)
}
} catch let error {
await MainActor.run {
migrationState = .archiveImportFailed(archivePath: archivePath)
}
alert = .error(title: "Error importing chat database", error: responseError(error))
}
} catch let error {
await MainActor.run {
migrationState = .archiveImportFailed(archivePath: archivePath)
}
alert = .error(title: "Error deleting chat database", error: responseError(error))
}
}
}
private func stopArchiveDownloading(_ fileId: Int64, _ ctrl: chat_ctrl) async {
_ = await apiCancelFile(fileId: fileId, ctrl: ctrl)
}
private func startChat(_ passphrase: String, _ confirmation: MigrationConfirmation, _ useKeychain: Bool) {
if useKeychain {
_ = kcDatabasePassword.set(passphrase)
} else {
_ = kcDatabasePassword.remove()
}
storeDBPassphraseGroupDefault.set(useKeychain)
initialRandomDBPassphraseGroupDefault.set(false)
AppChatState.shared.set(.active)
Task {
do {
resetChatCtrl()
try initializeChat(start: false, confirmStart: false, dbKey: passphrase, refreshInvitations: true, confirmMigrations: confirmation)
var appSettings = try apiGetAppSettings(settings: AppSettings.current.prepareForExport())
let hasOnionConfigured = appSettings.networkConfig?.socksProxy != nil || appSettings.networkConfig?.hostMode == .onionHost
appSettings.networkConfig?.socksProxy = nil
appSettings.networkConfig?.hostMode = .publicHost
appSettings.networkConfig?.requiredHostMode = true
await MainActor.run {
if hasOnionConfigured {
migrationState = .onion(appSettings: appSettings)
} else {
finishMigration(appSettings)
}
}
} catch let error {
hideView()
AlertManager.shared.showAlert(Alert(title: Text("Error starting chat"), message: Text(responseError(error))))
}
}
}
private func finishMigration(_ appSettings: AppSettings) {
do {
try? FileManager.default.removeItem(at: getMigrationTempFilesDirectory())
MigrationToDeviceState.save(nil)
appSettings.importIntoApp()
try SimpleX.startChat(refreshInvitations: true)
AlertManager.shared.showAlertMsg(title: "Chat migrated!", message: "Finalize migration on another device.")
} catch let error {
AlertManager.shared.showAlert(Alert(title: Text("Error starting chat"), message: Text(responseError(error))))
}
hideView()
}
private func hideView() {
onboardingStageDefault.set(.onboardingComplete)
m.onboardingStage = .onboardingComplete
dismiss()
}
private func strHasSimplexFileLink(_ text: String) -> Bool {
text.starts(with: "simplex:/file") || text.starts(with: "https://simplex.chat/file")
}
private static func urlForTemporaryDatabase() -> URL {
URL(fileURLWithPath: generateNewFileName(getMigrationTempFilesDirectory().path + "/" + "migration", "db", fullPath: true))
}
}
private struct PassphraseEnteringView: View {
@Binding var migrationState: MigrationToState?
@State private var useKeychain = true
@State var currentKey: String
@State private var verifyingPassphrase: Bool = false
@FocusState private var keyboardVisible: Bool
@Binding var alert: MigrateToDeviceViewAlert?
var body: some View {
ZStack {
List {
Section {
settingsRow("key", color: .secondary) {
Toggle("Save passphrase in Keychain", isOn: $useKeychain)
}
PassphraseField(key: $currentKey, placeholder: "Current passphrase…", valid: validKey(currentKey))
.focused($keyboardVisible)
Button(action: {
verifyingPassphrase = true
hideKeyboard()
Task {
let (status, _) = chatInitTemporaryDatabase(url: getAppDatabasePath(), key: currentKey, confirmation: .yesUp)
let success = switch status {
case .ok, .invalidConfirmation: true
default: false
}
if success {
await MainActor.run {
migrationState = .migration(passphrase: currentKey, confirmation: .yesUp, useKeychain: useKeychain)
}
} else if case .errorMigration = status {
await MainActor.run {
migrationState = .migrationConfirmation(status: status, passphrase: currentKey, useKeychain: useKeychain)
}
} else {
showErrorOnMigrationIfNeeded(status, $alert)
}
verifyingPassphrase = false
}
}) {
settingsRow("key", color: .secondary) {
Text("Open chat")
}
}
.disabled(verifyingPassphrase || currentKey.isEmpty)
} header: {
Text("Enter passphrase")
} footer: {
VStack(alignment: .leading, spacing: 16) {
if useKeychain {
Text("iOS Keychain is used to securely store passphrase - it allows receiving push notifications.")
} else {
Text("You have to enter passphrase every time the app starts - it is not stored on the device.")
Text("**Please note**: you will NOT be able to recover or change passphrase if you lose it.")
Text("**Warning**: Instant push notifications require passphrase saved in Keychain.")
}
}
.font(.callout)
.padding(.top, 1)
.onTapGesture { keyboardVisible = false }
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
keyboardVisible = true
}
}
}
if verifyingPassphrase {
progressView()
}
}
}
}
private func showErrorOnMigrationIfNeeded(_ status: DBMigrationResult, _ alert: Binding<MigrateToDeviceViewAlert?>) {
switch status {
case .invalidConfirmation:
alert.wrappedValue = .invalidConfirmation()
case .errorNotADatabase:
alert.wrappedValue = .wrongPassphrase()
case .errorKeychain:
alert.wrappedValue = .keychainError()
case let .errorSQL(_, error):
alert.wrappedValue = .databaseError(message: error)
case let .unknown(error):
alert.wrappedValue = .unknownError(message: error)
case .errorMigration: ()
case .ok: ()
}
}
private func progressView() -> some View {
VStack {
ProgressView().scaleEffect(2)
}
.frame(maxWidth: .infinity, maxHeight: .infinity )
}
private class MigrationChatReceiver {
let ctrl: chat_ctrl
let databaseUrl: URL
let processReceivedMsg: (ChatResponse) async -> Void
private var receiveLoop: Task<Void, Never>?
private var receiveMessages = true
init(ctrl: chat_ctrl, databaseUrl: URL, _ processReceivedMsg: @escaping (ChatResponse) async -> Void) {
self.ctrl = ctrl
self.databaseUrl = databaseUrl
self.processReceivedMsg = processReceivedMsg
}
func start() {
logger.debug("MigrationChatReceiver.start")
receiveMessages = true
if receiveLoop != nil { return }
receiveLoop = Task { await receiveMsgLoop() }
}
func receiveMsgLoop() async {
// TODO use function that has timeout
if let msg = await chatRecvMsg(ctrl) {
Task {
await TerminalItems.shared.add(.resp(.now, msg))
}
logger.debug("processReceivedMsg: \(msg.responseType)")
await processReceivedMsg(msg)
}
if self.receiveMessages {
_ = try? await Task.sleep(nanoseconds: 7_500_000)
await receiveMsgLoop()
}
}
func stopAndCleanUp() {
logger.debug("MigrationChatReceiver.stop")
receiveMessages = false
receiveLoop?.cancel()
receiveLoop = nil
chat_close_store(ctrl)
try? FileManager.default.removeItem(atPath: "\(databaseUrl.path)_chat.db")
try? FileManager.default.removeItem(atPath: "\(databaseUrl.path)_agent.db")
}
}
struct MigrateToDevice_Previews: PreviewProvider {
static var previews: some View {
MigrateToDevice(migrationState: Binding.constant(.pasteOrScanLink))
}
}
+54 -60
View File
@@ -86,7 +86,7 @@ struct NewChatView: View {
}
}
if case .connect = selection {
ConnectView(showQRCodeScanner: $showQRCodeScanner, pastedLink: $pastedLink, alert: $alert)
ConnectView(showQRCodeScanner: showQRCodeScanner, pastedLink: $pastedLink, alert: $alert)
.transition(.move(edge: .trailing))
}
}
@@ -284,7 +284,8 @@ private struct InviteView: View {
private struct ConnectView: View {
@Environment(\.dismiss) var dismiss: DismissAction
@Binding var showQRCodeScanner: Bool
@State var showQRCodeScanner = false
@State private var cameraAuthorizationStatus: AVAuthorizationStatus?
@Binding var pastedLink: String
@Binding var alert: NewChatViewAlert?
@State private var sheet: PlanAndConnectActionSheet?
@@ -294,13 +295,32 @@ private struct ConnectView: View {
Section("Paste the link you received") {
pasteLinkView()
}
Section("Or scan QR code") {
ScannerInView(showQRCodeScanner: $showQRCodeScanner, processQRCode: processQRCode)
}
scanCodeView()
}
.actionSheet(item: $sheet) { s in
planAndConnectActionSheet(s, dismiss: true, cleanup: { pastedLink = "" })
}
.onAppear {
let status = AVCaptureDevice.authorizationStatus(for: .video)
cameraAuthorizationStatus = status
if showQRCodeScanner {
switch status {
case .notDetermined: askCameraAuthorization()
case .restricted: showQRCodeScanner = false
case .denied: showQRCodeScanner = false
case .authorized: ()
@unknown default: askCameraAuthorization()
}
}
}
}
func askCameraAuthorization(_ cb: (() -> Void)? = nil) {
AVCaptureDevice.requestAccess(for: .video) { allowed in
cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video)
if allowed { cb?() }
}
}
@ViewBuilder private func pasteLinkView() -> some View {
@@ -331,45 +351,8 @@ private struct ConnectView: View {
}
}
private func processQRCode(_ resp: Result<ScanResult, ScanError>) {
switch resp {
case let .success(r):
let link = r.string
if strIsSimplexLink(r.string) {
connect(link)
} else {
alert = .newChatSomeAlert(alert: .someAlert(
alert: mkAlert(title: "Invalid QR code", message: "The code you scanned is not a SimpleX link QR code."),
id: "processQRCode: code is not a SimpleX link"
))
}
case let .failure(e):
logger.error("processQRCode QR code error: \(e.localizedDescription)")
alert = .newChatSomeAlert(alert: .someAlert(
alert: mkAlert(title: "Invalid QR code", message: "Error scanning code: \(e.localizedDescription)"),
id: "processQRCode: failure"
))
}
}
private func connect(_ link: String) {
planAndConnect(
link,
showAlert: { alert = .planAndConnectAlert(alert: $0) },
showActionSheet: { sheet = $0 },
dismiss: true,
incognito: nil
)
}
}
struct ScannerInView: View {
@Binding var showQRCodeScanner: Bool
let processQRCode: (_ resp: Result<ScanResult, ScanError>) -> Void
@State private var cameraAuthorizationStatus: AVAuthorizationStatus?
var body: some View {
Group {
private func scanCodeView() -> some View {
Section("Or scan QR code") {
if showQRCodeScanner, case .authorized = cameraAuthorizationStatus {
CodeScannerView(codeTypes: [.qr], scanMode: .continuous, completion: processQRCode)
.aspectRatio(1, contentMode: .fit)
@@ -413,26 +396,37 @@ struct ScannerInView: View {
.disabled(cameraAuthorizationStatus == .restricted)
}
}
.onAppear {
let status = AVCaptureDevice.authorizationStatus(for: .video)
cameraAuthorizationStatus = status
if showQRCodeScanner {
switch status {
case .notDetermined: askCameraAuthorization()
case .restricted: showQRCodeScanner = false
case .denied: showQRCodeScanner = false
case .authorized: ()
@unknown default: askCameraAuthorization()
}
}
private func processQRCode(_ resp: Result<ScanResult, ScanError>) {
switch resp {
case let .success(r):
let link = r.string
if strIsSimplexLink(r.string) {
connect(link)
} else {
alert = .newChatSomeAlert(alert: .someAlert(
alert: mkAlert(title: "Invalid QR code", message: "The code you scanned is not a SimpleX link QR code."),
id: "processQRCode: code is not a SimpleX link"
))
}
case let .failure(e):
logger.error("processQRCode QR code error: \(e.localizedDescription)")
alert = .newChatSomeAlert(alert: .someAlert(
alert: mkAlert(title: "Invalid QR code", message: "Error scanning code: \(e.localizedDescription)"),
id: "processQRCode: failure"
))
}
}
func askCameraAuthorization(_ cb: (() -> Void)? = nil) {
AVCaptureDevice.requestAccess(for: .video) { allowed in
cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video)
if allowed { cb?() }
}
private func connect(_ link: String) {
planAndConnect(
link,
showAlert: { alert = .planAndConnectAlert(alert: $0) },
showActionSheet: { sheet = $0 },
dismiss: true,
incognito: nil
)
}
}
@@ -166,10 +166,8 @@ private func createProfile(_ displayName: String, showAlert: (UserProfileAlert)
)
let m = ChatModel.shared
do {
AppChatState.shared.set(.active)
m.currentUser = try apiCreateActiveUser(profile)
// .isEmpty check is redundant here, but it makes it clearer what is going on
if m.users.isEmpty || m.users.allSatisfy({ $0.user.hidden }) {
if m.users.isEmpty {
try startChat()
withAnimation {
onboardingStageDefault.set(.step3_CreateSimpleXAddress)
@@ -7,7 +7,6 @@
//
import SwiftUI
import SimpleXChat
struct SimpleXInfo: View {
@EnvironmentObject var m: ChatModel
@@ -45,15 +44,6 @@ struct SimpleXInfo: View {
if onboarding {
OnboardingActionButton()
Spacer()
Button {
m.migrationState = .pasteOrScanLink
} label: {
Label("Migrate from another device", systemImage: "tray.and.arrow.down")
.font(.subheadline)
}
.padding(.bottom, 8)
.frame(maxWidth: .infinity)
}
Button {
@@ -64,24 +54,9 @@ struct SimpleXInfo: View {
}
.padding(.bottom, 8)
.frame(maxWidth: .infinity)
}
.frame(minHeight: g.size.height)
}
.sheet(isPresented: Binding(
get: { m.migrationState != nil },
set: { _ in
m.migrationState = nil
MigrationToDeviceState.save(nil) }
)) {
NavigationView {
VStack(alignment: .leading) {
MigrateToDevice(migrationState: $m.migrationState)
}
.navigationTitle("Migrate here")
.background(colorScheme == .light ? Color(uiColor: .tertiarySystemGroupedBackground) : .clear)
}
}
.sheet(isPresented: $showHowItWorks) {
HowItWorks(onboarding: onboarding)
}
@@ -112,7 +87,6 @@ struct SimpleXInfo: View {
struct OnboardingActionButton: View {
@EnvironmentObject var m: ChatModel
@Environment(\.colorScheme) var colorScheme
var body: some View {
if m.currentUser == nil {
@@ -137,21 +111,6 @@ struct OnboardingActionButton: View {
.frame(maxWidth: .infinity)
.padding(.bottom)
}
private func actionButton(_ label: LocalizedStringKey, action: @escaping () -> Void) -> some View {
Button {
withAnimation {
action()
}
} label: {
HStack {
Text(label).font(.title2)
Image(systemName: "greaterthan")
}
}
.frame(maxWidth: .infinity)
.padding(.bottom)
}
}
struct SimpleXInfo_Previews: PreviewProvider {
@@ -344,37 +344,6 @@ private let versionDescriptions: [VersionDescription] = [
description: "Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!"
),
]
),
VersionDescription(
version: "v5.6",
post: URL(string: "https://simplex.chat/blog/20240323-simplex-network-privacy-non-profit-v5-6-quantum-resistant-e2e-encryption-simple-migration.html"),
features: [
FeatureDescription(
icon: "key",
title: "Quantum resistant encryption",
description: "Enable in direct chats (BETA)!"
),
FeatureDescription(
icon: "tray.and.arrow.up",
title: "App data migration",
description: "Migrate to another device via QR code."
),
FeatureDescription(
icon: "phone",
title: "Picture-in-picture calls",
description: "Use the app while in the call."
),
FeatureDescription(
icon: "hand.raised",
title: "Safer groups",
description: "Admins can block a member for all."
),
FeatureDescription(
icon: "character",
title: "Hungarian interface",
description: "Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!"
),
]
)
]
@@ -58,7 +58,7 @@ struct ConnectDesktopView: View {
var body: some View {
if viaSettings {
viewBody
.modifier(BackButton(label: "Back", disabled: Binding.constant(false)) {
.modifier(BackButton(label: "Back") {
if m.activeRemoteCtrl {
alert = .disconnectDesktop(action: .back)
} else {
@@ -1,72 +0,0 @@
//
// AppSettings.swift
// SimpleX (iOS)
//
// Created by Avently on 26.02.2024.
// Copyright © 2024 SimpleX Chat. All rights reserved.
//
import Foundation
import SimpleXChat
import SwiftUI
extension AppSettings {
public func importIntoApp() {
let def = UserDefaults.standard
if var val = networkConfig {
// migrating from Android/desktop BUT shouldn't be here ever because it should be changed in migration stage
if case .onionViaSocks = val.hostMode {
val.hostMode = .publicHost
val.requiredHostMode = true
}
val.socksProxy = nil
setNetCfg(val)
}
if let val = privacyEncryptLocalFiles { privacyEncryptLocalFilesGroupDefault.set(val) }
if let val = privacyAcceptImages {
privacyAcceptImagesGroupDefault.set(val)
def.setValue(val, forKey: DEFAULT_PRIVACY_ACCEPT_IMAGES)
}
if let val = privacyLinkPreviews { def.setValue(val, forKey: DEFAULT_PRIVACY_LINK_PREVIEWS) }
if let val = privacyShowChatPreviews { def.setValue(val, forKey: DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS) }
if let val = privacySaveLastDraft { def.setValue(val, forKey: DEFAULT_PRIVACY_SAVE_LAST_DRAFT) }
if let val = privacyProtectScreen { def.setValue(val, forKey: DEFAULT_PRIVACY_PROTECT_SCREEN) }
if let val = notificationMode { ChatModel.shared.notificationMode = val.toNotificationsMode() }
if let val = notificationPreviewMode { ntfPreviewModeGroupDefault.set(val) }
if let val = webrtcPolicyRelay { def.setValue(val, forKey: DEFAULT_WEBRTC_POLICY_RELAY) }
if let val = webrtcICEServers { def.setValue(val, forKey: DEFAULT_WEBRTC_ICE_SERVERS) }
if let val = confirmRemoteSessions { def.setValue(val, forKey: DEFAULT_CONFIRM_REMOTE_SESSIONS) }
if let val = connectRemoteViaMulticast { def.setValue(val, forKey: DEFAULT_CONNECT_REMOTE_VIA_MULTICAST) }
if let val = connectRemoteViaMulticastAuto { def.setValue(val, forKey: DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO) }
if let val = developerTools { def.setValue(val, forKey: DEFAULT_DEVELOPER_TOOLS) }
if let val = confirmDBUpgrades { confirmDBUpgradesGroupDefault.set(val) }
if let val = androidCallOnLockScreen { def.setValue(val.rawValue, forKey: ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN) }
if let val = iosCallKitEnabled { callKitEnabledGroupDefault.set(val) }
if let val = iosCallKitCallsInRecents { def.setValue(val, forKey: DEFAULT_CALL_KIT_CALLS_IN_RECENTS) }
}
public static var current: AppSettings {
let def = UserDefaults.standard
var c = AppSettings.defaults
c.networkConfig = getNetCfg()
c.privacyEncryptLocalFiles = privacyEncryptLocalFilesGroupDefault.get()
c.privacyAcceptImages = privacyAcceptImagesGroupDefault.get()
c.privacyLinkPreviews = def.bool(forKey: DEFAULT_PRIVACY_LINK_PREVIEWS)
c.privacyShowChatPreviews = def.bool(forKey: DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS)
c.privacySaveLastDraft = def.bool(forKey: DEFAULT_PRIVACY_SAVE_LAST_DRAFT)
c.privacyProtectScreen = def.bool(forKey: DEFAULT_PRIVACY_PROTECT_SCREEN)
c.notificationMode = AppSettingsNotificationMode.from(ChatModel.shared.notificationMode)
c.notificationPreviewMode = ntfPreviewModeGroupDefault.get()
c.webrtcPolicyRelay = def.bool(forKey: DEFAULT_WEBRTC_POLICY_RELAY)
c.webrtcICEServers = def.stringArray(forKey: DEFAULT_WEBRTC_ICE_SERVERS)
c.confirmRemoteSessions = def.bool(forKey: DEFAULT_CONFIRM_REMOTE_SESSIONS)
c.connectRemoteViaMulticast = def.bool(forKey: DEFAULT_CONNECT_REMOTE_VIA_MULTICAST)
c.connectRemoteViaMulticastAuto = def.bool(forKey: DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO)
c.developerTools = def.bool(forKey: DEFAULT_DEVELOPER_TOOLS)
c.confirmDBUpgrades = confirmDBUpgradesGroupDefault.get()
c.androidCallOnLockScreen = AppSettingsLockScreenCalls(rawValue: def.string(forKey: ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN)!)
c.iosCallKitEnabled = callKitEnabledGroupDefault.get()
c.iosCallKitCallsInRecents = def.bool(forKey: DEFAULT_CALL_KIT_CALLS_IN_RECENTS)
return c
}
}
@@ -12,7 +12,6 @@ import SimpleXChat
struct DeveloperView: View {
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@AppStorage(GROUP_DEFAULT_CONFIRM_DB_UPGRADES, store: groupDefaults) private var confirmDatabaseUpgrades = false
@AppStorage(GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED, store: groupDefaults) private var pqExperimentalEnabled = false
@Environment(\.colorScheme) var colorScheme
var body: some View {
@@ -44,32 +43,27 @@ struct DeveloperView: View {
(developerTools ? Text("Show:") : Text("Hide:")) + Text(" ") + Text("Database IDs and Transport isolation option.")
}
if developerTools {
Section {
settingsRow("key") {
Toggle("Post-quantum E2EE", isOn: $pqExperimentalEnabled)
.onChange(of: pqExperimentalEnabled) {
setPQExperimentalEnabled($0)
}
}
} header: {
Text(String("Experimental"))
} footer: {
Text(String("In this version applies only to new contacts."))
}
}
// Section {
// settingsRow("arrow.up.doc") {
// Toggle("Send videos and files via XFTP", isOn: $xftpSendEnabled)
// .onChange(of: xftpSendEnabled) { _ in
// do {
// try setXFTPConfig(getXFTPCfg())
// } catch {
// logger.error("setXFTPConfig: cannot set XFTP config \(responseError(error))")
// }
// }
// }
// } header: {
// Text("Experimental")
// } footer: {
// if xftpSendEnabled {
// Text("v4.6.1+ is required to receive via XFTP.")
// }
// }
}
}
}
private func setPQExperimentalEnabled(_ enable: Bool) {
do {
try apiSetPQEncryption(enable)
} catch let error {
let err = responseError(error)
logger.error("apiSetPQEncryption \(err)")
}
}
}
struct DeveloperView_Previews: PreviewProvider {
@@ -76,10 +76,6 @@ struct NotificationsView: View {
Text(m.notificationPreview.label)
}
}
if let server = m.notificationServer {
smpServers("Push server", [server])
}
} header: {
Text("Push notifications")
} footer: {
@@ -91,9 +87,6 @@ struct NotificationsView: View {
}
}
.disabled(legacyDatabase)
.onAppear {
(m.savedToken, m.tokenStatus, m.notificationMode, m.notificationServer) = apiGetNtfToken()
}
}
private func notificationAlert(_ alert: NotificationAlert, _ token: DeviceToken) -> Alert {
@@ -132,7 +125,6 @@ struct NotificationsView: View {
m.tokenStatus = .new
notificationMode = .off
m.notificationMode = .off
m.notificationServer = nil
}
} catch let error {
await MainActor.run {
@@ -143,13 +135,11 @@ struct NotificationsView: View {
}
default:
do {
let _ = try await apiRegisterToken(token: token, notificationMode: mode)
let (_, tknStatus, ntfMode, ntfServer) = apiGetNtfToken()
let status = try await apiRegisterToken(token: token, notificationMode: mode)
await MainActor.run {
m.tokenStatus = tknStatus
notificationMode = ntfMode
m.notificationMode = ntfMode
m.notificationServer = ntfServer
m.tokenStatus = status
notificationMode = mode
m.notificationMode = mode
}
} catch let error {
await MainActor.run {
@@ -31,7 +31,7 @@ struct ProtocolServerView: View {
ProgressView().scaleEffect(2)
}
}
.modifier(BackButton(label: "Your \(proto) servers", disabled: Binding.constant(false)) {
.modifier(BackButton(label: "Your \(proto) servers") {
server = serverToEdit
dismiss()
})
@@ -117,7 +117,6 @@ struct ProtocolServerView: View {
struct BackButton: ViewModifier {
var label: LocalizedStringKey = "Back"
@Binding var disabled: Bool
var action: () -> Void
func body(content: Content) -> some View {
@@ -131,7 +130,6 @@ struct BackButton: ViewModifier {
Text(label)
}
}
.disabled(disabled)
}
}
}
@@ -95,7 +95,7 @@ struct ProtocolServersView: View {
.sheet(isPresented: $showScanProtoServer) {
ScanProtocolServer(servers: $servers)
}
.modifier(BackButton(disabled: Binding.constant(false)) {
.modifier(BackButton {
if saveDisabled {
dismiss()
justOpened = false
@@ -27,7 +27,7 @@ let DEFAULT_NOTIFICATION_ALERT_SHOWN = "notificationAlertShown"
let DEFAULT_WEBRTC_POLICY_RELAY = "webrtcPolicyRelay"
let DEFAULT_WEBRTC_ICE_SERVERS = "webrtcICEServers"
let DEFAULT_CALL_KIT_CALLS_IN_RECENTS = "callKitCallsInRecents"
let DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages" // unused. Use GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES instead
let DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages"
let DEFAULT_PRIVACY_LINK_PREVIEWS = "privacyLinkPreviews"
let DEFAULT_PRIVACY_SIMPLEX_LINK_MODE = "privacySimplexLinkMode"
let DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS = "privacyShowChatPreviews"
@@ -51,8 +51,6 @@ let DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE = "showHiddenProfilesNotice"
let DEFAULT_SHOW_MUTE_PROFILE_ALERT = "showMuteProfileAlert"
let DEFAULT_WHATS_NEW_VERSION = "defaultWhatsNewVersion"
let DEFAULT_ONBOARDING_STAGE = "onboardingStage"
let DEFAULT_MIGRATION_TO_STAGE = "migrationToStage"
let DEFAULT_MIGRATION_FROM_STAGE = "migrationFromStage"
let DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME = "customDisappearingMessageTime"
let DEFAULT_SHOW_UNREAD_AND_FAVORITES = "showUnreadAndFavorites"
let DEFAULT_DEVICE_NAME_FOR_REMOTE_ACCESS = "deviceNameForRemoteAccess"
@@ -60,8 +58,6 @@ let DEFAULT_CONFIRM_REMOTE_SESSIONS = "confirmRemoteSessions"
let DEFAULT_CONNECT_REMOTE_VIA_MULTICAST = "connectRemoteViaMulticast"
let DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO = "connectRemoteViaMulticastAuto"
let ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN = "androidCallOnLockScreen"
let appDefaults: [String: Any] = [
DEFAULT_SHOW_LA_NOTICE: false,
DEFAULT_LA_NOTICE_SHOWN: false,
@@ -97,7 +93,6 @@ let appDefaults: [String: Any] = [
DEFAULT_CONFIRM_REMOTE_SESSIONS: false,
DEFAULT_CONNECT_REMOTE_VIA_MULTICAST: true,
DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO: true,
ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN: AppSettingsLockScreenCalls.show.rawValue
]
// not used anymore
@@ -153,14 +148,10 @@ struct SettingsView: View {
@EnvironmentObject var chatModel: ChatModel
@EnvironmentObject var sceneDelegate: SceneDelegate
@Binding var showSettings: Bool
@State private var showProgress: Bool = false
var body: some View {
ZStack {
settingsView()
if showProgress {
progressView()
}
if let la = chatModel.laRequest {
LocalAuthView(authRequest: la)
}
@@ -211,17 +202,9 @@ struct SettingsView: View {
} label: {
settingsRow("desktopcomputer") { Text("Use from desktop") }
}
NavigationLink {
MigrateFromDevice(showSettings: $showSettings, showProgressOnSettings: $showProgress)
.navigationTitle("Migrate device")
.navigationBarTitleDisplayMode(.large)
} label: {
settingsRow("tray.and.arrow.up") { Text("Migrate to another device") }
}
}
.disabled(chatModel.chatRunning != true)
Section("Settings") {
NavigationLink {
NotificationsView()
@@ -366,13 +349,6 @@ struct SettingsView: View {
}
}
private func progressView() -> some View {
VStack {
ProgressView().scaleEffect(2)
}
.frame(maxWidth: .infinity, maxHeight: .infinity )
}
private enum NotificationAlert {
case enable
case error(LocalizedStringKey, String)
@@ -47,7 +47,7 @@ struct UserAddressView: View {
userAddressScrollView()
} else {
userAddressScrollView()
.modifier(BackButton(disabled: Binding.constant(false)) {
.modifier(BackButton {
if savedAAS == aas {
dismiss()
} else {
@@ -276,7 +276,6 @@ struct UserProfilesView: View {
// Deleting the last visible user while having hidden one(s)
try await deleteUser()
try await changeActiveUserAsync_(nil, viewPwd: nil)
try? await stopChatAsync()
await MainActor.run {
onboardingStageDefault.set(.step1_SimpleXInfo)
m.onboardingStage = .step1_SimpleXInfo
@@ -107,10 +107,6 @@
<target>%@ свързан</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ е свързан!</target>
@@ -131,10 +127,6 @@
<target>%@ сървъри</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ иска да се свърже!</target>
@@ -227,7 +219,6 @@
</trans-unit>
<trans-unit id="%lld messages blocked by admin" xml:space="preserve">
<source>%lld messages blocked by admin</source>
<target>%lld съобщения, блокирани от администратора</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
@@ -350,10 +341,6 @@
<target>**Най-поверително**: не използвайте сървъра за известия SimpleX Chat, периодично проверявайте съобщенията във фонов режим (зависи от това колко често използвате приложението).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Моля, обърнете внимание**: НЯМА да можете да възстановите или промените паролата, ако я загубите.</target>
@@ -369,10 +356,6 @@
<target>**Внимание**: Незабавните push известия изискват парола, запазена в Keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e криптиран**аудио разговор</target>
@@ -629,10 +612,6 @@
<target>Промяната на адреса ще бъде прекъсната. Ще се използва старият адрес за получаване.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Админите могат да създадат линкове за присъединяване към групи.</target>
@@ -665,7 +644,6 @@
</trans-unit>
<trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>All messages will be deleted - this cannot be undone!</source>
<target>Всички съобщения ще бъдат изтрити - това не може да бъде отменено!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve">
@@ -688,10 +666,6 @@
<target>Всички ваши контакти ще останат свързани. Актуализацията на профила ще бъде изпратена до вашите контакти.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Позволи</target>
@@ -817,10 +791,6 @@
<target>Компилация на приложението: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>Приложението криптира нови локални файлове (с изключение на видеоклипове).</target>
@@ -856,18 +826,6 @@
<target>Изглед</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Прикачи</target>
@@ -965,7 +923,6 @@
</trans-unit>
<trans-unit id="Block for all" xml:space="preserve">
<source>Block for all</source>
<target>Блокирай за всички</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
@@ -980,7 +937,6 @@
</trans-unit>
<trans-unit id="Block member for all?" xml:space="preserve">
<source>Block member for all?</source>
<target>Блокиране на член за всички?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
@@ -990,7 +946,6 @@
</trans-unit>
<trans-unit id="Blocked by admin" xml:space="preserve">
<source>Blocked by admin</source>
<target>Блокиран от админ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
@@ -1058,10 +1013,6 @@
<target>Отказ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Няма достъп до Keychain за запазване на паролата за базата данни</target>
@@ -1163,10 +1114,6 @@
<target>Чатът е спрян. Ако вече сте използвали тази база данни на друго устройство, трябва да я прехвърлите обратно, преди да стартирате чата отново.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Чат настройки</target>
@@ -1187,10 +1134,6 @@
<target>Китайски и Испански интерфейс</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Избери файл</target>
@@ -1218,7 +1161,6 @@
</trans-unit>
<trans-unit id="Clear private notes?" xml:space="preserve">
<source>Clear private notes?</source>
<target>Изчистване на лични бележки?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Clear verification" xml:space="preserve">
@@ -1261,10 +1203,6 @@
<target>Потвърди актуализаациите на базата данни</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Потвърди новата парола…</target>
@@ -1275,14 +1213,6 @@
<target>Потвърди парола</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Свързване</target>
@@ -1529,12 +1459,10 @@ This is your own one-time link!</source>
</trans-unit>
<trans-unit id="Created at" xml:space="preserve">
<source>Created at</source>
<target>Създаден на</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Created at: %@" xml:space="preserve">
<source>Created at: %@</source>
<target>Създаден на: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Created on %@" xml:space="preserve">
@@ -1542,10 +1470,6 @@ This is your own one-time link!</source>
<target>Създаден на %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Линкът се създава…</target>
@@ -1766,10 +1690,6 @@ This cannot be undone!</source>
<target>Изтрий базата данни</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Изтрий файл</target>
@@ -2022,7 +1942,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Discover via local network" xml:space="preserve">
<source>Discover via local network</source>
<target>Откриване през локалната мрежа</target>
<target>Открий през локалната мрежа</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
@@ -2060,23 +1980,11 @@ This cannot be undone!</source>
<target>Понижи версията и отвори чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Свали файл</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Дублирано име!</target>
@@ -2132,10 +2040,6 @@ This cannot be undone!</source>
<target>Активиране за всички</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Активирай незабавни известия?</target>
@@ -2251,10 +2155,6 @@ This cannot be undone!</source>
<target>Въведи име на групата…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Въведи парола…</target>
@@ -2315,10 +2215,6 @@ This cannot be undone!</source>
<target>Грешка при добавяне на член(ове)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Грешка при промяна на адреса</target>
@@ -2356,7 +2252,6 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Error creating message" xml:space="preserve">
<source>Error creating message</source>
<target>Грешка при създаване на съобщение</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve">
@@ -2409,10 +2304,6 @@ This cannot be undone!</source>
<target>Грешка при изтриване на потребителския профил</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Грешка при активирането на потвърждениeто за доставка!</target>
@@ -2488,10 +2379,6 @@ This cannot be undone!</source>
<target>Грешка при запазване на парола в Кeychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Грешка при запазване на потребителска парола</target>
@@ -2562,14 +2449,6 @@ This cannot be undone!</source>
<target>Грешка при актуализиране на поверителността на потребителя</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Грешка: </target>
@@ -2620,10 +2499,6 @@ This cannot be undone!</source>
<target>Експортиран архив на базата данни.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Експортиране на архив на базата данни…</target>
@@ -2694,14 +2569,6 @@ This cannot be undone!</source>
<target>Филтрирайте непрочетените и любимите чатове.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Най-накрая ги имаме! 🚀</target>
@@ -2992,10 +2859,6 @@ This cannot be undone!</source>
<target>Как да използвате вашите сървъри</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>ICE сървъри (по един на ред)</target>
@@ -3061,17 +2924,8 @@ This cannot be undone!</source>
<target>Импортиране на база данни</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Подобрена доставка на съобщения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved privacy and security" xml:space="preserve">
@@ -3084,10 +2938,6 @@ This cannot be undone!</source>
<target>Подобрена конфигурация на сървъра</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>В отговор на</target>
@@ -3200,10 +3050,6 @@ This cannot be undone!</source>
<target>Невалиден линк</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Невалидно име!</target>
@@ -3307,7 +3153,6 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Join group conversations" xml:space="preserve">
<source>Join group conversations</source>
<target>Присъединяване към групи</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join group?" xml:space="preserve">
@@ -3572,10 +3417,6 @@ This is your link for group %@!</source>
<target>Текст на съобщението</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Съобщения</target>
@@ -3591,47 +3432,11 @@ This is your link for group %@!</source>
<target>Съобщенията от %@ ще бъдат показани!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Архивът на базата данни се мигрира…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Грешка при мигриране:</target>
@@ -3991,10 +3796,6 @@ This is your link for group %@!</source>
<target>Отвори група</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Отвори потребителските профили</target>
@@ -4010,19 +3811,11 @@ This is your link for group %@!</source>
<target>Приложението се отваря…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Или сканирай QR код</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Или покажи този код</target>
@@ -4070,7 +3863,6 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Past member %@" xml:space="preserve">
<source>Past member %@</source>
<target>Бивш член %@</target>
<note>past/unknown group member</note>
</trans-unit>
<trans-unit id="Paste desktop address" xml:space="preserve">
@@ -4085,7 +3877,6 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Paste link to connect!" xml:space="preserve">
<source>Paste link to connect!</source>
<target>Поставете линк, за да се свържете!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
@@ -4108,10 +3899,6 @@ This is your link for group %@!</source>
<target>Постоянна грешка при декриптиране</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Моля, попитайте вашия контакт, за да активирате изпращане на гласови съобщения.</target>
@@ -4132,10 +3919,6 @@ This is your link for group %@!</source>
<target>Моля, проверете вашите настройки и тези вашия за контакт.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4193,10 +3976,6 @@ Error: %@</source>
<target>Въжможно е пръстовият отпечатък на сертификата в адреса на сървъра да е неправилен</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Запазете последната чернова на съобщението с прикачени файлове.</target>
@@ -4234,7 +4013,6 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Private notes" xml:space="preserve">
<source>Private notes</source>
<target>Лични бележки</target>
<note>name of notes to self</note>
</trans-unit>
<trans-unit id="Profile and server connections" xml:space="preserve">
@@ -4332,14 +4110,6 @@ Error: %@</source>
<target>Push известия</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Оценете приложението</target>
@@ -4427,7 +4197,6 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Recent history and improved [directory bot](simplex:/contact#/?v=1-4&amp;smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." xml:space="preserve">
<source>Recent history and improved [directory bot](simplex:/contact#/?v=1-4&amp;smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).</source>
<target>Скорошна история и подобрен [bot за директория за групи](simplex:/contact#/?v=1-4&amp;smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPd jdLW3%23%2F%3Fv%3D1-2% 26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Recipients see updates as you type them." xml:space="preserve">
@@ -4525,23 +4294,11 @@ Error: %@</source>
<target>Изпрати отново заявката за свързване?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Изпрати отново заявката за присъединяване?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Отговори</target>
@@ -4642,10 +4399,6 @@ Error: %@</source>
<target>SMP сървъри</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Запази</target>
@@ -4733,7 +4486,6 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Saved message" xml:space="preserve">
<source>Saved message</source>
<target>Запазено съобщение</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Scan QR code" xml:space="preserve">
@@ -4768,7 +4520,6 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Search bar accepts invitation links." xml:space="preserve">
<source>Search bar accepts invitation links.</source>
<target>Лентата за търсене приема линк за връзка.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
@@ -5011,10 +4762,6 @@ Error: %@</source>
<target>Задай kод за достъп</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Задай парола за експортиране</target>
@@ -5070,10 +4817,6 @@ Error: %@</source>
<target>Сподели с контактите</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Показване на обажданията в хронологията на телефона</target>
@@ -5214,10 +4957,6 @@ Error: %@</source>
<target>Спри SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Спрете чата, за да активирате действията с базата данни</target>
@@ -5258,10 +4997,6 @@ Error: %@</source>
<target>Спри споделянето на адреса?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Изпрати</target>
@@ -5509,14 +5244,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Това действие не може да бъде отменено - вашият профил, контакти, съобщения и файлове ще бъдат безвъзвратно загубени.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Името на това устройство</target>
@@ -5631,7 +5358,6 @@ You will be prompted to complete authentication before this feature is enabled.<
</trans-unit>
<trans-unit id="Turkish interface" xml:space="preserve">
<source>Turkish interface</source>
<target>Турски интерфейс</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Turn off" xml:space="preserve">
@@ -5656,7 +5382,6 @@ You will be prompted to complete authentication before this feature is enabled.<
</trans-unit>
<trans-unit id="Unblock for all" xml:space="preserve">
<source>Unblock for all</source>
<target>Отблокирай за всички</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member" xml:space="preserve">
@@ -5666,7 +5391,6 @@ You will be prompted to complete authentication before this feature is enabled.<
</trans-unit>
<trans-unit id="Unblock member for all?" xml:space="preserve">
<source>Unblock member for all?</source>
<target>Отблокиране на член за всички?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member?" xml:space="preserve">
@@ -5811,19 +5535,11 @@ To connect, please ask your contact to create another connection link and check
<target>Актуализирай и отвори чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Качи файл</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Използвай .onion хостове</target>
@@ -5874,10 +5590,6 @@ To connect, please ask your contact to create another connection link and check
<target>Използвай сървър</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Потребителски профил</target>
@@ -5895,35 +5607,27 @@ To connect, please ask your contact to create another connection link and check
</trans-unit>
<trans-unit id="Verify code with desktop" xml:space="preserve">
<source>Verify code with desktop</source>
<target>Потвърди кода с настолното устройство</target>
<target>Потвръди кода с настолното устройство</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection" xml:space="preserve">
<source>Verify connection</source>
<target>Потвърди връзка</target>
<target>Потвръди връзките</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection security" xml:space="preserve">
<source>Verify connection security</source>
<target>Потвърди сигурността на връзката</target>
<target>Потвръди сигурността на връзката</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connections" xml:space="preserve">
<source>Verify connections</source>
<target>Потвърждение за свързване</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Потвръди връзките</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Потвърди кода за сигурност</target>
<target>Потвръди кода за сигурност</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Via browser" xml:space="preserve">
@@ -6011,10 +5715,6 @@ To connect, please ask your contact to create another connection link and check
<target>Изчаква се получаването на видеото</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Предупреждение: Може да загубите някои данни!</target>
@@ -6035,10 +5735,6 @@ To connect, please ask your contact to create another connection link and check
<target>Съобщение при посрещане</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Какво е новото</target>
@@ -6061,7 +5757,6 @@ To connect, please ask your contact to create another connection link and check
</trans-unit>
<trans-unit id="With encrypted files and media." xml:space="preserve">
<source>With encrypted files and media.</source>
<target>С криптирани файлове и медия.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="With optional welcome message." xml:space="preserve">
@@ -6071,7 +5766,6 @@ To connect, please ask your contact to create another connection link and check
</trans-unit>
<trans-unit id="With reduced battery usage." xml:space="preserve">
<source>With reduced battery usage.</source>
<target>С намален разход на батерията.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Wrong database passphrase" xml:space="preserve">
@@ -6094,10 +5788,6 @@ To connect, please ask your contact to create another connection link and check
<target>Вие</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Вие приехте връзката</target>
@@ -6185,10 +5875,6 @@ Repeat join request?</source>
<target>Можете да ги активирате по-късно през настройките за "Поверителност и сигурност" на приложението.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Можете да скриете или заглушите известията за потребителски профил - плъзнете надясно.</target>
@@ -6583,17 +6269,15 @@ SimpleX сървърите не могат да видят вашия профи
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>блокиран</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
<target>блокиран %@</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>блокиран от админ</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6622,7 +6306,7 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="changed address for you" xml:space="preserve">
<source>changed address for you</source>
<target>адреса за изпращане е променен</target>
<target>променен е адреса за вас</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="changed role of %@ to %@" xml:space="preserve">
@@ -6717,7 +6401,6 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="contact %@ changed to %@" xml:space="preserve">
<source>contact %1$@ changed to %2$@</source>
<target>името на контакта %1$@ е променено на %2$@</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="contact has e2e encryption" xml:space="preserve">
@@ -6992,7 +6675,6 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="member %@ changed to %@" xml:space="preserve">
<source>member %1$@ changed to %2$@</source>
<target>името на члена %1$@ е променено на %2$@</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="member connected" xml:space="preserve">
@@ -7023,7 +6705,7 @@ SimpleX сървърите не могат да видят вашия профи
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>модерирано от %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7092,10 +6774,6 @@ SimpleX сървърите не могат да видят вашия профи
<target>peer-to-peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>получен отговор…</target>
@@ -7123,12 +6801,10 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="removed contact address" xml:space="preserve">
<source>removed contact address</source>
<target>премахнат адрес за контакт</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="removed profile picture" xml:space="preserve">
<source>removed profile picture</source>
<target>премахната профилна снимка</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="removed you" xml:space="preserve">
@@ -7163,18 +6839,12 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="set new contact address" xml:space="preserve">
<source>set new contact address</source>
<target>зададен нов адрес за контакт</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="set new profile picture" xml:space="preserve">
<source>set new profile picture</source>
<target>зададена нова профилна снимка</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>стартиране…</target>
@@ -7192,7 +6862,6 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="unblocked %@" xml:space="preserve">
<source>unblocked %@</source>
<target>отблокиран %@</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="unknown" xml:space="preserve">
@@ -7202,7 +6871,6 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="unknown status" xml:space="preserve">
<source>unknown status</source>
<target>неизвестен статус</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="updated group profile" xml:space="preserve">
@@ -7212,7 +6880,6 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="updated profile" xml:space="preserve">
<source>updated profile</source>
<target>актуализиран профил</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="v%@" xml:space="preserve">
@@ -7287,17 +6954,16 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="you blocked %@" xml:space="preserve">
<source>you blocked %@</source>
<target>вие блокирахте %@</target>
<note>snd group event chat item</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<target>адреса за получаване е променен</target>
<target>променихте адреса</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="you changed address for %@" xml:space="preserve">
<source>you changed address for %@</source>
<target>променихте адреса получаване за %@</target>
<target>променихте адреса за %@</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="you changed role for yourself to %@" xml:space="preserve">
@@ -7332,7 +6998,6 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit>
<trans-unit id="you unblocked %@" xml:space="preserve">
<source>you unblocked %@</source>
<target>вие отблокирахте %@</target>
<note>snd group event chat item</note>
</trans-unit>
<trans-unit id="you: " xml:space="preserve">
@@ -107,10 +107,6 @@
<target>%@ připojen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ je připojen!</target>
@@ -131,10 +127,6 @@
<target>%@ servery</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ se chce připojit!</target>
@@ -340,10 +332,6 @@
<target>**Nejsoukromější**: nepoužívejte server oznámení SimpleX Chat, pravidelně kontrolujte zprávy na pozadí (závisí na tom, jak často aplikaci používáte).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Upozornění**: Pokud heslo ztratíte, NEBUDETE jej moci obnovit ani změnit.</target>
@@ -359,10 +347,6 @@
<target>**Upozornění**: Okamžitě doručovaná oznámení vyžadují přístupové heslo uložené v Klíčence.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e šifrovaný** audio hovor</target>
@@ -614,10 +598,6 @@
<target>Změna adresy bude přerušena. Budou použity staré přijímací adresy.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Správci mohou vytvářet odkazy pro připojení ke skupinám.</target>
@@ -671,10 +651,6 @@
<target>Všechny vaše kontakty zůstanou připojeny. Aktualizace profilu bude odeslána vašim kontaktům.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Povolit</target>
@@ -798,10 +774,6 @@
<target>Sestavení aplikace: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>Aplikace šifruje nové místní soubory (s výjimkou videí).</target>
@@ -837,18 +809,6 @@
<target>Vzhled</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Připojit</target>
@@ -1029,10 +989,6 @@
<target>Zrušit</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Nelze získat přístup ke klíčence pro uložení hesla databáze</target>
@@ -1133,10 +1089,6 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Předvolby chatu</target>
@@ -1157,10 +1109,6 @@
<target>Čínské a Španělské rozhranní</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Vybrat soubor</target>
@@ -1230,10 +1178,6 @@
<target>Potvrdit aktualizaci databáze</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Potvrdit novou heslovou frázi…</target>
@@ -1244,14 +1188,6 @@
<target>Potvrdit heslo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Připojit</target>
@@ -1492,10 +1428,6 @@ This is your own one-time link!</source>
<target>Vytvořeno na %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<note>No comment provided by engineer.</note>
@@ -1711,10 +1643,6 @@ This cannot be undone!</source>
<target>Odstranění databáze</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Smazat soubor</target>
@@ -1999,23 +1927,11 @@ This cannot be undone!</source>
<target>Snížit a otevřít chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Stáhnout soubor</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Duplicitní zobrazované jméno!</target>
@@ -2070,10 +1986,6 @@ This cannot be undone!</source>
<target>Povolit pro všechny</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Povolit okamžitá oznámení?</target>
@@ -2185,10 +2097,6 @@ This cannot be undone!</source>
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Zadejte přístupovou frázi…</target>
@@ -2247,10 +2155,6 @@ This cannot be undone!</source>
<target>Chyba přidávání člena(ů)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Chuba změny adresy</target>
@@ -2340,10 +2244,6 @@ This cannot be undone!</source>
<target>Chyba mazání uživatelského profilu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Chyba povolení potvrzení o doručení!</target>
@@ -2418,10 +2318,6 @@ This cannot be undone!</source>
<target>Při ukládání přístupové fráze do klíčenky došlo k chybě</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Chyba ukládání hesla uživatele</target>
@@ -2491,14 +2387,6 @@ This cannot be undone!</source>
<target>Chyba aktualizace soukromí uživatele</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Chyba: </target>
@@ -2548,10 +2436,6 @@ This cannot be undone!</source>
<target>Exportovaný archiv databáze.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Exportuji archiv databáze…</target>
@@ -2621,14 +2505,6 @@ This cannot be undone!</source>
<target>Filtrovat nepřečtené a oblíbené chaty.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Konečně je máme! 🚀</target>
@@ -2914,10 +2790,6 @@ This cannot be undone!</source>
<target>Jak používat servery</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>Servery ICE (jeden na řádek)</target>
@@ -2983,14 +2855,6 @@ This cannot be undone!</source>
<target>Import databáze</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<note>No comment provided by engineer.</note>
@@ -3005,10 +2869,6 @@ This cannot be undone!</source>
<target>Vylepšená konfigurace serveru</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>V odpovědi na</target>
@@ -3116,10 +2976,6 @@ This cannot be undone!</source>
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
@@ -3475,10 +3331,6 @@ This is your link for group %@!</source>
<target>Text zprávy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Zprávy</target>
@@ -3493,47 +3345,11 @@ This is your link for group %@!</source>
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Přenášení archivu databáze…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Chyba přenášení:</target>
@@ -3889,10 +3705,6 @@ This is your link for group %@!</source>
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Otevřít uživatelské profily</target>
@@ -3907,18 +3719,10 @@ This is your link for group %@!</source>
<source>Opening app…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<note>No comment provided by engineer.</note>
@@ -3999,10 +3803,6 @@ This is your link for group %@!</source>
<target>Chyba dešifrování</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Prosím, požádejte kontaktní osobu, aby umožnila odesílání hlasových zpráv.</target>
@@ -4023,10 +3823,6 @@ This is your link for group %@!</source>
<target>Zkontrolujte prosím nastavení své i svého kontaktu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4082,10 +3878,6 @@ Error: %@</source>
<target>Je možné, že otisk certifikátu v adrese serveru je nesprávný</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Zachování posledního návrhu zprávy s přílohami.</target>
@@ -4218,14 +4010,6 @@ Error: %@</source>
<target>Nabízená oznámení</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Ohodnoťte aplikaci</target>
@@ -4408,22 +4192,10 @@ Error: %@</source>
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Odpověď</target>
@@ -4523,10 +4295,6 @@ Error: %@</source>
<target>SMP servery</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Uložit</target>
@@ -4886,10 +4654,6 @@ Error: %@</source>
<target>Nastavit heslo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Nastavení přístupové fráze pro export</target>
@@ -4944,10 +4708,6 @@ Error: %@</source>
<target>Sdílet s kontakty</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Ukaž hovory v historii telefonu</target>
@@ -5087,10 +4847,6 @@ Error: %@</source>
<target>Zastavit SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Zastavte chat pro povolení akcí databáze</target>
@@ -5131,10 +4887,6 @@ Error: %@</source>
<target>Přestat sdílet adresu?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Odeslat</target>
@@ -5377,14 +5129,6 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován
<target>Tuto akci nelze vzít zpět - váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
@@ -5665,19 +5409,11 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Zvýšit a otevřít chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Nahrát soubor</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Použít hostitele .onion</target>
@@ -5726,10 +5462,6 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Použít server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Profil uživatele</target>
@@ -5762,14 +5494,6 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Ověření bezpečnostního kódu</target>
@@ -5857,10 +5581,6 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Čekám na video</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Upozornění: můžete ztratit nějaká data!</target>
@@ -5881,10 +5601,6 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Uvítací zpráva</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Co je nového</target>
@@ -5938,10 +5654,6 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Vy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Přijali jste spojení</target>
@@ -6021,10 +5733,6 @@ Repeat join request?</source>
<target>Můžete je povolit později v nastavení Soukromí &amp; Bezpečnosti aplikace</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.</target>
@@ -6408,7 +6116,7 @@ Servery SimpleX nevidí váš profil.</target>
</trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6416,7 +6124,7 @@ Servery SimpleX nevidí váš profil.</target>
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6842,7 +6550,7 @@ Servery SimpleX nevidí váš profil.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>moderovaný %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -6911,10 +6619,6 @@ Servery SimpleX nevidí váš profil.</target>
<target>peer-to-peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>obdržel odpověď…</target>
@@ -6986,10 +6690,6 @@ Servery SimpleX nevidí váš profil.</target>
<source>set new profile picture</source>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>začíná…</target>
@@ -107,11 +107,6 @@
<target>%@ wurde mit Ihnen verbunden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ heruntergeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ ist mit Ihnen verbunden!</target>
@@ -132,11 +127,6 @@
<target>%@-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<target>%@ hochgeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ will sich mit Ihnen verbinden!</target>
@@ -352,11 +342,6 @@
<target>**Beste Privatsphäre**: Es wird kein SimpleX-Chat-Benachrichtigungs-Server genutzt, Nachrichten werden in periodischen Abständen im Hintergrund geprüft (dies hängt davon ab, wie häufig Sie die App nutzen).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>**Bitte beachten Sie**: Aus Sicherheitsgründen wird die Nachrichtenentschlüsselung Ihrer Verbindungen abgebrochen, wenn Sie die gleiche Datenbank auf zwei Geräten nutzen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Bitte beachten Sie**: Das Passwort kann NICHT wiederhergestellt oder geändert werden, wenn Sie es vergessen haben oder verlieren.</target>
@@ -372,11 +357,6 @@
<target>**Warnung**: Sofortige Push-Benachrichtigungen erfordern die Eingabe eines Passworts, welches in Ihrem Schlüsselbund gespeichert ist.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Warnung**: Das Archiv wird gelöscht.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**E2E-verschlüsselter** Audioanruf</target>
@@ -633,11 +613,6 @@
<target>Der Wechsel der Empfängeradresse wird abgebrochen. Die bisherige Adresse wird weiter verwendet.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Administratoren können für ein Mitglied alle Funktionen blockieren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Administratoren können Links für den Beitritt zu Gruppen erzeugen.</target>
@@ -693,11 +668,6 @@
<target>Alle Ihre Kontakte bleiben verbunden. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>Alle Ihre Kontakte, Unterhaltungen und Dateien werden sicher verschlüsselt und in Daten-Paketen auf die konfigurierten XTFP-Server hochgeladen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Erlauben</target>
@@ -823,11 +793,6 @@
<target>App Build: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>App-Daten-Migration</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>Neue lokale Dateien (außer Video-Dateien) werden von der App verschlüsselt.</target>
@@ -863,21 +828,6 @@
<target>Erscheinungsbild</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Anwenden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Archivieren und Hochladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Datenbank wird archiviert</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Anhängen</target>
@@ -1068,11 +1018,6 @@
<target>Abbrechen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Migration abbrechen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Die App kann nicht auf den Schlüsselbund zugreifen, um das Datenbank-Passwort zu speichern</target>
@@ -1174,11 +1119,6 @@
<target>Der Chat ist angehalten. Wenn Sie diese Datenbank bereits auf einem anderen Gerät genutzt haben, sollten Sie diese vor dem Starten des Chats wieder zurückspielen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat wurde migriert!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Chat-Präferenzen</target>
@@ -1199,11 +1139,6 @@
<target>Chinesische und spanische Bedienoberfläche</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Wählen Sie auf dem neuen Gerät _Von einem anderen Gerät migrieren_ und scannen Sie den QR-Code.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Datei auswählen</target>
@@ -1274,11 +1209,6 @@
<target>Datenbank-Aktualisierungen bestätigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Bestätigen Sie die Netzwerkeinstellungen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Neues Passwort bestätigen…</target>
@@ -1289,16 +1219,6 @@
<target>Passwort bestätigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Für die Migration bestätigen Sie bitte, dass Sie sich an das Datenbank-Passwort erinnern.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<target>Hochladen bestätigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Verbinden</target>
@@ -1558,11 +1478,6 @@ Das ist Ihr eigener Einmal-Link!</target>
<target>Erstellt am %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<target>Archiv-Link erzeugen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Link wird erstellt…</target>
@@ -1783,11 +1698,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Datenbank löschen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<target>Datenbank auf diesem Gerät löschen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Datei löschen</target>
@@ -2078,26 +1988,11 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Datenbank herabstufen und den Chat öffnen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<target>Herunterladen fehlgeschlagen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Datei herunterladen</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<target>Archiv wird heruntergeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<target>Link-Details werden heruntergeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Doppelter Anzeigename!</target>
@@ -2153,11 +2048,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Für Alle aktivieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<target>Kann in direkten Chats aktiviert werden (BETA)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Sofortige Benachrichtigungen aktivieren?</target>
@@ -2273,11 +2163,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Geben Sie den Gruppennamen ein…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<target>Passwort eingeben</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Passwort eingeben…</target>
@@ -2338,11 +2223,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Fehler beim Hinzufügen von Mitgliedern</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<target>Fehler beim Zulassen der Kontakt-PQ-Verschlüsselung</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Fehler beim Wechseln der Empfängeradresse</target>
@@ -2433,11 +2313,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Fehler beim Löschen des Benutzerprofils</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<target>Fehler beim Herunterladen des Archivs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Fehler beim Aktivieren von Empfangsbestätigungen!</target>
@@ -2513,11 +2388,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Fehler beim Speichern des Passworts in den Schlüsselbund</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<target>Fehler beim Abspeichern der Einstellungen</target>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Fehler beim Speichern des Benutzer-Passworts</target>
@@ -2588,16 +2458,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Fehler beim Aktualisieren der Benutzer-Privatsphäre</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<target>Fehler beim Hochladen des Archivs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<target>Fehler bei der Überprüfung des Passworts:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Fehler: </target>
@@ -2648,11 +2508,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Exportiertes Datenbankarchiv.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<target>Die exportierte Datei ist nicht vorhanden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Exportieren des Datenbank-Archivs…</target>
@@ -2723,16 +2578,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Nach ungelesenen und favorisierten Chats filtern.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<target>Die Migration wird abgeschlossen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<target>Die Migration auf dem anderen Gerät wird abgeschlossen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Endlich haben wir sie! 🚀</target>
@@ -3023,11 +2868,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Wie Sie Ihre Server nutzen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<target>Ungarische Bedienoberfläche</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>ICE-Server (einer pro Zeile)</target>
@@ -3093,16 +2933,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Datenbank importieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<target>Import ist fehlgeschlagen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<target>Archiv wird importiert</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Verbesserte Zustellung von Nachrichten</target>
@@ -3118,11 +2948,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Verbesserte Serverkonfiguration</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<target>Um fortzufahren, sollte der Chat beendet werden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>Als Antwort auf</target>
@@ -3235,11 +3060,6 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Ungültiger Link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<target>Migrations-Bestätigung ungültig</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Ungültiger Name!</target>
@@ -3608,11 +3428,6 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Nachrichtentext</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<target>Die Nachricht ist zu lang</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Nachrichten</target>
@@ -3628,56 +3443,11 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Die Nachrichten von %@ werden angezeigt!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Nachrichten, Dateien und Anrufe sind durch **Ende-zu-Ende-Verschlüsselung** mit Perfect Forward Secrecy, Ablehnung und Einbruchs-Wiederherstellung geschützt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Nachrichten, Dateien und Anrufe sind durch **Quantum-resistente E2E-Verschlüsselung** mit Perfect Forward Secrecy, Ablehnung und Einbruchs-Wiederherstellung geschützt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<target>Gerät migrieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<target>Von einem anderen Gerät migrieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<target>Hierher migrieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<target>Auf ein anderes Gerät migrieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<target>Über einen QR-Code auf ein anderes Gerät migrieren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<target>Migrieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Datenbank-Archiv wird migriert…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<target>Migration abgeschlossen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Fehler bei der Migration:</target>
@@ -4037,11 +3807,6 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Gruppe öffnen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<target>Migration auf ein anderes Gerät öffnen</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Benutzerprofile öffnen</target>
@@ -4057,21 +3822,11 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>App wird geöffnet…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<target>Oder fügen Sie den Archiv-Link ein</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Oder den QR-Code scannen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<target>Oder teilen Sie diesen Datei-Link sicher</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Oder diesen QR-Code anzeigen</target>
@@ -4157,11 +3912,6 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Entschlüsselungsfehler</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<target>Bild-in-Bild-Anrufe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Bitten Sie Ihren Kontakt darum, das Senden von Sprachnachrichten zu aktivieren.</target>
@@ -4182,11 +3932,6 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Bitte überprüfen sie sowohl Ihre, als auch die Präferenzen Ihres Kontakts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<target>Bitte bestätigen Sie, dass die Netzwerkeinstellungen auf diesem Gerät richtig sind.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4244,11 +3989,6 @@ Fehler: %@</target>
<target>Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<target>Post-Quantum E2E-Verschlüsselung</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Den letzten Nachrichtenentwurf, auch mit seinen Anhängen, aufbewahren.</target>
@@ -4384,16 +4124,6 @@ Fehler: %@</target>
<target>Push-Benachrichtigungen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<target>Push-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<target>Quantum-resistente Verschlüsselung</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Bewerten Sie die App</target>
@@ -4579,26 +4309,11 @@ Fehler: %@</target>
<target>Verbindungsanfrage wiederholen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<target>Herunterladen wiederholen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<target>Import wiederholen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Verbindungsanfrage wiederholen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<target>Hochladen wiederholen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Antwort</target>
@@ -4699,11 +4414,6 @@ Fehler: %@</target>
<target>SMP-Server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<target>Sicherere Gruppen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Speichern</target>
@@ -4826,7 +4536,7 @@ Fehler: %@</target>
</trans-unit>
<trans-unit id="Search bar accepts invitation links." xml:space="preserve">
<source>Search bar accepts invitation links.</source>
<target>In der Suchleiste werden nun auch Einladungslinks akzeptiert.</target>
<target>Von der Suchleiste werden Einladungslinks akzeptiert.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
@@ -5069,11 +4779,6 @@ Fehler: %@</target>
<target>Zugangscode einstellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<target>Passwort festlegen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Passwort für den Export festlegen</target>
@@ -5129,11 +4834,6 @@ Fehler: %@</target>
<target>Mit Kontakten teilen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<target>QR-Code anzeigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Anrufliste anzeigen</target>
@@ -5274,11 +4974,6 @@ Fehler: %@</target>
<target>Stoppen Sie SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<target>Chat beenden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Chat beenden, um Datenbankaktionen zu erlauben</target>
@@ -5319,11 +5014,6 @@ Fehler: %@</target>
<target>Das Teilen der Adresse beenden?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<target>Chat wird beendet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Bestätigen</target>
@@ -5571,16 +5261,6 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
<target>Diese Aktion kann nicht rückgängig gemacht werden! Ihr Profil und Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<target>Dieser Chat ist durch Ende-zu-Ende-Verschlüsselung geschützt.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<target>Dieser Chat ist durch Quantum-resistente Ende-zu-Ende-Verschlüsselung geschützt.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Dieser Gerätename</target>
@@ -5875,21 +5555,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Aktualisieren und den Chat öffnen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<target>Hochladen fehlgeschlagen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Datei hochladen</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<target>Archiv wird hochgeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Verwende .onion-Hosts</target>
@@ -5940,11 +5610,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Server nutzen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<target>Die App kann während eines Anrufs genutzt werden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Benutzerprofil</target>
@@ -5980,16 +5645,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Verbindungen überprüfen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<target>Überprüfen Sie das Datenbank-Passwort</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Überprüfen Sie das Passwort</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Sicherheitscode überprüfen</target>
@@ -6080,11 +5735,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Auf das Video warten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<target>Warnung: Das Starten des Chats auf mehreren Geräten wird nicht unterstützt und wird zu Fehlern bei der Nachrichtenübermittlung führen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Warnung: Sie könnten einige Daten verlieren!</target>
@@ -6105,11 +5755,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Begrüßungsmeldung</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<target>Die Begrüßungsmeldung ist zu lang</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Was ist neu</target>
@@ -6165,11 +5810,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Profil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<target>Sie dürfen die selbe Datenbank **nicht** auf zwei Geräten nutzen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Sie haben die Verbindung akzeptiert</target>
@@ -6257,11 +5897,6 @@ Verbindungsanfrage wiederholen?</target>
<target>Sie können diese später in den Datenschutz &amp; Sicherheits-Einstellungen der App aktivieren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<target>Sie können es nochmal probieren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.</target>
@@ -6656,7 +6291,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>Blockiert</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6666,7 +6301,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>wurde vom Administrator blockiert</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6790,7 +6425,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="contact %@ changed to %@" xml:space="preserve">
<source>contact %1$@ changed to %2$@</source>
<target>Der Kontaktname wurde von %1$@ auf %2$@ geändert</target>
<target>Der Kontaktname %1$@ wurde auf %2$@ geändert</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="contact has e2e encryption" xml:space="preserve">
@@ -7065,7 +6700,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="member %@ changed to %@" xml:space="preserve">
<source>member %1$@ changed to %2$@</source>
<target>Der Mitgliedsname von %1$@ wurde auf %2$@ geändert</target>
<target>Der Mitgliedsname %1$@ wurde auf %2$@ geändert</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="member connected" xml:space="preserve">
@@ -7096,7 +6731,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>Von %@ moderiert</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7165,11 +6800,6 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
<target>Peer-to-Peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<target>Quantum-resistente E2E-Verschlüsselung</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>Antwort erhalten…</target>
@@ -7197,12 +6827,12 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="removed contact address" xml:space="preserve">
<source>removed contact address</source>
<target>Die Kontaktadresse wurde entfernt</target>
<target>Kontaktadresse wurde entfernt</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="removed profile picture" xml:space="preserve">
<source>removed profile picture</source>
<target>Das Profil-Bild wurde entfernt</target>
<target>Profil-Bild wurde entfernt</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="removed you" xml:space="preserve">
@@ -7237,19 +6867,14 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="set new contact address" xml:space="preserve">
<source>set new contact address</source>
<target>Es wurde eine neue Kontaktadresse festgelegt</target>
<target>Neue Kontaktadresse wurde festgelegt</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="set new profile picture" xml:space="preserve">
<source>set new profile picture</source>
<target>Es wurde ein neues Profil-Bild festgelegt</target>
<target>Neues Profil-Bild wurde festgelegt</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<target>Standard-Ende-zu-Ende-Verschlüsselung</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>Verbindung wird gestartet…</target>
@@ -107,11 +107,6 @@
<target>%@ connected</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ downloaded</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ is connected!</target>
@@ -132,11 +127,6 @@
<target>%@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<target>%@ uploaded</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ wants to connect!</target>
@@ -352,11 +342,6 @@
<target>**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</target>
@@ -372,11 +357,6 @@
<target>**Warning**: Instant push notifications require passphrase saved in Keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Warning**: the archive will be removed.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e encrypted** audio call</target>
@@ -633,11 +613,6 @@
<target>Address change will be aborted. Old receiving address will be used.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Admins can block a member for all.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Admins can create the links to join groups.</target>
@@ -693,11 +668,6 @@
<target>All your contacts will remain connected. Profile update will be sent to your contacts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Allow</target>
@@ -823,11 +793,6 @@
<target>App build: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>App data migration</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>App encrypts new local files (except videos).</target>
@@ -863,21 +828,6 @@
<target>Appearance</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Apply</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Archive and upload</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Archiving database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Attach</target>
@@ -1068,11 +1018,6 @@
<target>Cancel</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Cancel migration</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Cannot access keychain to save database password</target>
@@ -1174,11 +1119,6 @@
<target>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat migrated!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Chat preferences</target>
@@ -1199,11 +1139,6 @@
<target>Chinese and Spanish interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Choose _Migrate from another device_ on the new device and scan QR code.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Choose file</target>
@@ -1274,11 +1209,6 @@
<target>Confirm database upgrades</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Confirm network settings</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Confirm new passphrase…</target>
@@ -1289,16 +1219,6 @@
<target>Confirm password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Confirm that you remember database passphrase to migrate it.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<target>Confirm upload</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Connect</target>
@@ -1558,11 +1478,6 @@ This is your own one-time link!</target>
<target>Created on %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<target>Creating archive link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Creating link…</target>
@@ -1783,11 +1698,6 @@ This cannot be undone!</target>
<target>Delete database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<target>Delete database from this device</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Delete file</target>
@@ -2078,26 +1988,11 @@ This cannot be undone!</target>
<target>Downgrade and open chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<target>Download failed</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Download file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<target>Downloading archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<target>Downloading link details</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Duplicate display name!</target>
@@ -2153,11 +2048,6 @@ This cannot be undone!</target>
<target>Enable for all</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<target>Enable in direct chats (BETA)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Enable instant notifications?</target>
@@ -2273,11 +2163,6 @@ This cannot be undone!</target>
<target>Enter group name…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<target>Enter passphrase</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Enter passphrase…</target>
@@ -2338,11 +2223,6 @@ This cannot be undone!</target>
<target>Error adding member(s)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<target>Error allowing contact PQ encryption</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Error changing address</target>
@@ -2433,11 +2313,6 @@ This cannot be undone!</target>
<target>Error deleting user profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<target>Error downloading the archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Error enabling delivery receipts!</target>
@@ -2513,11 +2388,6 @@ This cannot be undone!</target>
<target>Error saving passphrase to keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<target>Error saving settings</target>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Error saving user password</target>
@@ -2588,16 +2458,6 @@ This cannot be undone!</target>
<target>Error updating user privacy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<target>Error uploading the archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<target>Error verifying passphrase:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Error: </target>
@@ -2648,11 +2508,6 @@ This cannot be undone!</target>
<target>Exported database archive.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<target>Exported file doesn't exist</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Exporting database archive…</target>
@@ -2723,16 +2578,6 @@ This cannot be undone!</target>
<target>Filter unread and favorite chats.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<target>Finalize migration</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<target>Finalize migration on another device.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Finally, we have them! 🚀</target>
@@ -3023,11 +2868,6 @@ This cannot be undone!</target>
<target>How to use your servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<target>Hungarian interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>ICE servers (one per line)</target>
@@ -3093,16 +2933,6 @@ This cannot be undone!</target>
<target>Import database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<target>Import failed</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<target>Importing archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Improved message delivery</target>
@@ -3118,11 +2948,6 @@ This cannot be undone!</target>
<target>Improved server configuration</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<target>In order to continue, chat should be stopped.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>In reply to</target>
@@ -3235,11 +3060,6 @@ This cannot be undone!</target>
<target>Invalid link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<target>Invalid migration confirmation</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Invalid name!</target>
@@ -3608,11 +3428,6 @@ This is your link for group %@!</target>
<target>Message text</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<target>Message too large</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Messages</target>
@@ -3628,56 +3443,11 @@ This is your link for group %@!</target>
<target>Messages from %@ will be shown!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<target>Migrate device</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<target>Migrate from another device</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<target>Migrate here</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<target>Migrate to another device</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<target>Migrate to another device via QR code.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<target>Migrating</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Migrating database archive…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<target>Migration complete</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Migration error:</target>
@@ -4037,11 +3807,6 @@ This is your link for group %@!</target>
<target>Open group</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<target>Open migration to another device</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Open user profiles</target>
@@ -4057,21 +3822,11 @@ This is your link for group %@!</target>
<target>Opening app…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<target>Or paste archive link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Or scan QR code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<target>Or securely share this file link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Or show this code</target>
@@ -4157,11 +3912,6 @@ This is your link for group %@!</target>
<target>Permanent decryption error</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<target>Picture-in-picture calls</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Please ask your contact to enable sending voice messages.</target>
@@ -4182,11 +3932,6 @@ This is your link for group %@!</target>
<target>Please check yours and your contact preferences.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<target>Please confirm that network settings are correct for this device.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4244,11 +3989,6 @@ Error: %@</target>
<target>Possibly, certificate fingerprint in server address is incorrect</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<target>Post-quantum E2EE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Preserve the last message draft, with attachments.</target>
@@ -4384,16 +4124,6 @@ Error: %@</target>
<target>Push notifications</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<target>Push server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<target>Quantum resistant encryption</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Rate the app</target>
@@ -4579,26 +4309,11 @@ Error: %@</target>
<target>Repeat connection request?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<target>Repeat download</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<target>Repeat import</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Repeat join request?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<target>Repeat upload</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Reply</target>
@@ -4699,11 +4414,6 @@ Error: %@</target>
<target>SMP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<target>Safer groups</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Save</target>
@@ -5069,11 +4779,6 @@ Error: %@</target>
<target>Set passcode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<target>Set passphrase</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Set passphrase to export</target>
@@ -5129,11 +4834,6 @@ Error: %@</target>
<target>Share with contacts</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<target>Show QR code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Show calls in phone history</target>
@@ -5274,11 +4974,6 @@ Error: %@</target>
<target>Stop SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<target>Stop chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Stop chat to enable database actions</target>
@@ -5319,11 +5014,6 @@ Error: %@</target>
<target>Stop sharing address?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<target>Stopping chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Submit</target>
@@ -5571,16 +5261,6 @@ It can happen because of some bug or when the connection is compromised.</target
<target>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<target>This chat is protected by end-to-end encryption.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<target>This chat is protected by quantum resistant end-to-end encryption.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>This device name</target>
@@ -5875,21 +5555,11 @@ To connect, please ask your contact to create another connection link and check
<target>Upgrade and open chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<target>Upload failed</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Upload file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<target>Uploading archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Use .onion hosts</target>
@@ -5940,11 +5610,6 @@ To connect, please ask your contact to create another connection link and check
<target>Use server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<target>Use the app while in the call.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>User profile</target>
@@ -5980,16 +5645,6 @@ To connect, please ask your contact to create another connection link and check
<target>Verify connections</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<target>Verify database passphrase</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Verify passphrase</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Verify security code</target>
@@ -6080,11 +5735,6 @@ To connect, please ask your contact to create another connection link and check
<target>Waiting for video</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<target>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Warning: you may lose some data!</target>
@@ -6105,11 +5755,6 @@ To connect, please ask your contact to create another connection link and check
<target>Welcome message</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<target>Welcome message is too long</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>What's new</target>
@@ -6165,11 +5810,6 @@ To connect, please ask your contact to create another connection link and check
<target>You</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<target>You **must not** use the same database on two devices.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>You accepted connection</target>
@@ -6257,11 +5897,6 @@ Repeat join request?</target>
<target>You can enable them later via app Privacy &amp; Security settings.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<target>You can give another try.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>You can hide or mute a user profile - swipe it to the right.</target>
@@ -6656,7 +6291,7 @@ SimpleX servers cannot see your profile.</target>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>blocked</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6666,7 +6301,7 @@ SimpleX servers cannot see your profile.</target>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>blocked by admin</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -7096,7 +6731,7 @@ SimpleX servers cannot see your profile.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>moderated by %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7165,11 +6800,6 @@ SimpleX servers cannot see your profile.</target>
<target>peer-to-peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<target>quantum resistant e2e encryption</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>received answer…</target>
@@ -7245,11 +6875,6 @@ SimpleX servers cannot see your profile.</target>
<target>set new profile picture</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<target>standard end-to-end encryption</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>starting…</target>
@@ -107,11 +107,6 @@
<target>%@ conectado</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ downloaded</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ ¡está conectado!</target>
@@ -132,10 +127,6 @@
<target>Servidores %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>¡ %@ quiere contactar!</target>
@@ -228,7 +219,6 @@
</trans-unit>
<trans-unit id="%lld messages blocked by admin" xml:space="preserve">
<source>%lld messages blocked by admin</source>
<target>%lld mensajes bloqueados por el administrador</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
@@ -351,11 +341,6 @@
<target>**Más privado**: no se usa el servidor de notificaciones de SimpleX Chat, los mensajes se comprueban periódicamente en segundo plano (dependiendo de la frecuencia con la que utilices la aplicación).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>**Tenga en cuenta**: usar la misma base de datos en dos dispositivos interrumpirá el descifrado de mensajes de sus conexiones, como protección de seguridad.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Atención**: NO podrás recuperar o cambiar la contraseña si la pierdes.</target>
@@ -371,11 +356,6 @@
<target>**Advertencia**: Las notificaciones automáticas instantáneas requieren una contraseña guardada en Keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Atención**: el archivo será eliminado.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>Llamada con **cifrado de extremo a extremo **</target>
@@ -632,11 +612,6 @@
<target>El cambio de dirección se cancelará. Se usará la antigua dirección de recepción.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Los admins pueden bloquear un miembro por todos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Los administradores pueden crear enlaces para unirse a grupos.</target>
@@ -669,7 +644,6 @@
</trans-unit>
<trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>All messages will be deleted - this cannot be undone!</source>
<target>Todos los mensajes serán borrados. ¡No podrá deshacerse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve">
@@ -692,11 +666,6 @@
<target>Todos tus contactos permanecerán conectados. La actualización del perfil se enviará a tus contactos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>Todos sus contactos, conversaciones y archivos se cifrarán de forma segura y se subirán en fragmentos hacia puntos XFTP configurados.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Se permite</target>
@@ -822,11 +791,6 @@
<target>Compilación app: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>Migración de datos de la aplicación</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>Cifrado de los nuevos archivos locales (excepto vídeos).</target>
@@ -862,21 +826,6 @@
<target>Apariencia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Aplicar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Archivar y transferir</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Archivando base de datos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Adjuntar</target>
@@ -974,7 +923,6 @@
</trans-unit>
<trans-unit id="Block for all" xml:space="preserve">
<source>Block for all</source>
<target>Bloquear para todos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
@@ -989,7 +937,6 @@
</trans-unit>
<trans-unit id="Block member for all?" xml:space="preserve">
<source>Block member for all?</source>
<target>¿Bloqear miembro para todos?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
@@ -999,7 +946,6 @@
</trans-unit>
<trans-unit id="Blocked by admin" xml:space="preserve">
<source>Blocked by admin</source>
<target>Bloqueado por el administrador</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
@@ -1067,11 +1013,6 @@
<target>Cancelar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Cancelar migración</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Keychain inaccesible para guardar la contraseña de la base de datos</target>
@@ -1173,11 +1114,6 @@
<target>Chat está detenido. Si estás usando esta base de datos en otro dispositivo, deberías transferirla de vuelta antes de iniciarlo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat transferido !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Preferencias de Chat</target>
@@ -1198,11 +1134,6 @@
<target>Interfaz en chino y español</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Elija _Migrar desde otro dispositivo_ en el nuevo dispositivo y escanee el código QR.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Elije archivo</target>
@@ -1230,7 +1161,6 @@
</trans-unit>
<trans-unit id="Clear private notes?" xml:space="preserve">
<source>Clear private notes?</source>
<target>¿Borrar notas privadas?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Clear verification" xml:space="preserve">
@@ -1273,11 +1203,6 @@
<target>Confirmar actualizaciones de la bases de datos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Confirmar los ajustes de red</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Confirme nueva contraseña…</target>
@@ -1288,15 +1213,6 @@
<target>Confirmar contraseña</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Confirme que recuerda la frase secreta de la base de datos para migrarla.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Conectar</target>
@@ -1543,12 +1459,10 @@ This is your own one-time link!</source>
</trans-unit>
<trans-unit id="Created at" xml:space="preserve">
<source>Created at</source>
<target>Creado</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Created at: %@" xml:space="preserve">
<source>Created at: %@</source>
<target>Creado: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Created on %@" xml:space="preserve">
@@ -1556,10 +1470,6 @@ This is your own one-time link!</source>
<target>Creado en %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Creando enlace…</target>
@@ -1780,10 +1690,6 @@ This cannot be undone!</source>
<target>Eliminar base de datos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Eliminar archivo</target>
@@ -2051,7 +1957,6 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<target>No enviar historial a miembros nuevos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
@@ -2074,23 +1979,11 @@ This cannot be undone!</source>
<target>Degradar y abrir Chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Descargar archivo</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>¡Nombre mostrado duplicado!</target>
@@ -2146,10 +2039,6 @@ This cannot be undone!</source>
<target>Activar para todos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>¿Activar notificación instantánea?</target>
@@ -2265,10 +2154,6 @@ This cannot be undone!</source>
<target>Nombre del grupo…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Introduce la contraseña…</target>
@@ -2329,10 +2214,6 @@ This cannot be undone!</source>
<target>Error al añadir miembro(s)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Error al cambiar servidor</target>
@@ -2370,7 +2251,6 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Error creating message" xml:space="preserve">
<source>Error creating message</source>
<target>Error al crear mensaje</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve">
@@ -2423,10 +2303,6 @@ This cannot be undone!</source>
<target>Error al eliminar perfil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>¡Error al activar confirmaciones de entrega!</target>
@@ -2502,10 +2378,6 @@ This cannot be undone!</source>
<target>Error al guardar contraseña en Keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Error al guardar contraseña de usuario</target>
@@ -2576,14 +2448,6 @@ This cannot be undone!</source>
<target>Error al actualizar privacidad de usuario</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Error: </target>
@@ -2634,10 +2498,6 @@ This cannot be undone!</source>
<target>Archivo de base de datos exportado.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Exportando base de datos…</target>
@@ -2708,14 +2568,6 @@ This cannot be undone!</source>
<target>Filtra chats no leídos y favoritos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>¡Por fin los tenemos! 🚀</target>
@@ -2978,7 +2830,6 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<target>El historial no se envía a miembros nuevos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
@@ -3006,10 +2857,6 @@ This cannot be undone!</source>
<target>Cómo usar los servidores</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>Servidores ICE (uno por línea)</target>
@@ -3075,17 +2922,8 @@ This cannot be undone!</source>
<target>Importar base de datos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Entrega de mensajes mejorada</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved privacy and security" xml:space="preserve">
@@ -3098,10 +2936,6 @@ This cannot be undone!</source>
<target>Configuración del servidor mejorada</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>En respuesta a</target>
@@ -3206,7 +3040,6 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<target>¡Nombre mostrado no válido!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
@@ -3214,10 +3047,6 @@ This cannot be undone!</source>
<target>Enlace no válido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>¡Nombre no válido!</target>
@@ -3321,7 +3150,6 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Join group conversations" xml:space="preserve">
<source>Join group conversations</source>
<target>Unirse a la conversación del grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join group?" xml:space="preserve">
@@ -3586,10 +3414,6 @@ This is your link for group %@!</source>
<target>Contacto y texto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Mensajes</target>
@@ -3605,47 +3429,11 @@ This is your link for group %@!</source>
<target>¡Los mensajes de %@ serán mostrados!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Migrando base de datos…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Error de migración:</target>
@@ -4005,10 +3793,6 @@ This is your link for group %@!</source>
<target>Grupo abierto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Abrir perfil de usuario</target>
@@ -4024,19 +3808,11 @@ This is your link for group %@!</source>
<target>Iniciando aplicación…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>O escanear código QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>O mostrar este código</target>
@@ -4084,7 +3860,6 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Past member %@" xml:space="preserve">
<source>Past member %@</source>
<target>Miembro pasado %@</target>
<note>past/unknown group member</note>
</trans-unit>
<trans-unit id="Paste desktop address" xml:space="preserve">
@@ -4099,7 +3874,6 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Paste link to connect!" xml:space="preserve">
<source>Paste link to connect!</source>
<target>Pegar enlace para conectar!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
@@ -4122,10 +3896,6 @@ This is your link for group %@!</source>
<target>Error permanente descifrado</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Solicita que tu contacto habilite el envío de mensajes de voz.</target>
@@ -4146,10 +3916,6 @@ This is your link for group %@!</source>
<target>Comprueba tus preferencias y las de tu contacto.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4207,10 +3973,6 @@ Error: %@</target>
<target>Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Conserva el último borrador del mensaje con los datos adjuntos.</target>
@@ -4248,7 +4010,6 @@ Error: %@</target>
</trans-unit>
<trans-unit id="Private notes" xml:space="preserve">
<source>Private notes</source>
<target>Notas privadas</target>
<note>name of notes to self</note>
</trans-unit>
<trans-unit id="Profile and server connections" xml:space="preserve">
@@ -4346,14 +4107,6 @@ Error: %@</target>
<target>Notificaciones automáticas</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Valora la aplicación</target>
@@ -4441,7 +4194,6 @@ Error: %@</target>
</trans-unit>
<trans-unit id="Recent history and improved [directory bot](simplex:/contact#/?v=1-4&amp;smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." xml:space="preserve">
<source>Recent history and improved [directory bot](simplex:/contact#/?v=1-4&amp;smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).</source>
<target>Historial reciente y [bot del directorio](simplex:/contact#/?v=1-4&amp;smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) mejorados.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Recipients see updates as you type them." xml:space="preserve">
@@ -4539,23 +4291,11 @@ Error: %@</target>
<target>¿Repetir solicitud de conexión?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>¿Repetir solicitud de admisión?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Responder</target>
@@ -4656,10 +4396,6 @@ Error: %@</target>
<target>Servidores SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Guardar</target>
@@ -4747,7 +4483,6 @@ Error: %@</target>
</trans-unit>
<trans-unit id="Saved message" xml:space="preserve">
<source>Saved message</source>
<target>Mensaje guardado</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Scan QR code" xml:space="preserve">
@@ -4782,7 +4517,6 @@ Error: %@</target>
</trans-unit>
<trans-unit id="Search bar accepts invitation links." xml:space="preserve">
<source>Search bar accepts invitation links.</source>
<target>La barra de búsqueda acepta enlaces de invitación.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
@@ -4897,7 +4631,6 @@ Error: %@</target>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<target>Enviar hasta 100 últimos mensajes a los miembros nuevos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
@@ -5025,10 +4758,6 @@ Error: %@</target>
<target>Código autodestrucción</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Escribe la contraseña para exportar</target>
@@ -5084,10 +4813,6 @@ Error: %@</target>
<target>Compartir con contactos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Mostrar llamadas en el historial del teléfono</target>
@@ -5228,10 +4953,6 @@ Error: %@</target>
<target>Detener SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Detén SimpleX para habilitar las acciones sobre la base de datos</target>
@@ -5272,10 +4993,6 @@ Error: %@</target>
<target>¿Dejar de compartir la dirección?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Enviar</target>
@@ -5510,27 +5227,19 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
</trans-unit>
<trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve">
<source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source>
<target>Esta acción es irreversible. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán.</target>
<target>Esta acción no se puede deshacer. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." xml:space="preserve">
<source>This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</source>
<target>Esta acción es irreversible. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos.</target>
<target>Esta acción no se puede deshacer. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." xml:space="preserve">
<source>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</source>
<target>Esta acción es irreversible. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.</target>
<target>Esta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Nombre del dispositivo</target>
@@ -5538,7 +5247,6 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<target>Éste nombre mostrado no es válido. Por favor, elije otro nombre.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
@@ -5645,7 +5353,6 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
</trans-unit>
<trans-unit id="Turkish interface" xml:space="preserve">
<source>Turkish interface</source>
<target>Interfaz en turco</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Turn off" xml:space="preserve">
@@ -5670,7 +5377,6 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
</trans-unit>
<trans-unit id="Unblock for all" xml:space="preserve">
<source>Unblock for all</source>
<target>Desbloquear para todos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member" xml:space="preserve">
@@ -5680,7 +5386,6 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
</trans-unit>
<trans-unit id="Unblock member for all?" xml:space="preserve">
<source>Unblock member for all?</source>
<target>¿Desbloquear miembro para todos?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member?" xml:space="preserve">
@@ -5783,7 +5488,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<target>Hasta 100 últimos mensajes son enviados a los miembros nuevos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
@@ -5826,19 +5530,11 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Actualizar y abrir Chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Subir archivo</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Usar hosts .onion</target>
@@ -5889,10 +5585,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Usar servidor</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Perfil de usuario</target>
@@ -5928,14 +5620,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Verificar conexiones</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Comprobar código de seguridad</target>
@@ -5978,7 +5662,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<target>Historial visible</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
@@ -6026,10 +5709,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Esperando el vídeo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Atención: ¡puedes perder algunos datos!</target>
@@ -6050,10 +5729,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Mensaje de bienvenida</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Novedades</target>
@@ -6076,7 +5751,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
</trans-unit>
<trans-unit id="With encrypted files and media." xml:space="preserve">
<source>With encrypted files and media.</source>
<target>Con cifrado de archivos y multimedia.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="With optional welcome message." xml:space="preserve">
@@ -6086,7 +5760,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
</trans-unit>
<trans-unit id="With reduced battery usage." xml:space="preserve">
<source>With reduced battery usage.</source>
<target>Con uso reducido de batería.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Wrong database passphrase" xml:space="preserve">
@@ -6109,10 +5782,6 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Tú</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Has aceptado la conexión</target>
@@ -6200,10 +5869,6 @@ Repeat join request?</source>
<target>Puedes activarlos más tarde en la configuración de Privacidad y Seguridad.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Puedes ocultar o silenciar un perfil deslizándolo a la derecha.</target>
@@ -6598,17 +6263,15 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>bloqueado</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
<target>%@ bloqueado</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>bloqueado por el administrador</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6732,7 +6395,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="contact %@ changed to %@" xml:space="preserve">
<source>contact %1$@ changed to %2$@</source>
<target>el contacto %1$@ ha cambiado a %2$@</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="contact has e2e encryption" xml:space="preserve">
@@ -7007,7 +6669,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="member %@ changed to %@" xml:space="preserve">
<source>member %1$@ changed to %2$@</source>
<target>el miembro %1$@ ha cambiado a %2$@</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="member connected" xml:space="preserve">
@@ -7038,7 +6699,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>moderado por %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7107,10 +6768,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
<target>p2p</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>respuesta recibida…</target>
@@ -7138,12 +6795,10 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="removed contact address" xml:space="preserve">
<source>removed contact address</source>
<target>dirección de contacto eliminada</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="removed profile picture" xml:space="preserve">
<source>removed profile picture</source>
<target>imagen de perfil eliminada</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="removed you" xml:space="preserve">
@@ -7178,18 +6833,12 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="set new contact address" xml:space="preserve">
<source>set new contact address</source>
<target>nueva dirección de contacto</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="set new profile picture" xml:space="preserve">
<source>set new profile picture</source>
<target>nueva imagen de perfil</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>inicializando…</target>
@@ -7207,7 +6856,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="unblocked %@" xml:space="preserve">
<source>unblocked %@</source>
<target>%@ desbloqueado</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="unknown" xml:space="preserve">
@@ -7217,7 +6865,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="unknown status" xml:space="preserve">
<source>unknown status</source>
<target>estado desconocido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="updated group profile" xml:space="preserve">
@@ -7227,7 +6874,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="updated profile" xml:space="preserve">
<source>updated profile</source>
<target>perfil actualizado</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="v%@" xml:space="preserve">
@@ -7302,7 +6948,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="you blocked %@" xml:space="preserve">
<source>you blocked %@</source>
<target>has bloqueado a %@</target>
<note>snd group event chat item</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
@@ -7347,7 +6992,6 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="you unblocked %@" xml:space="preserve">
<source>you unblocked %@</source>
<target>has desbloqueado a %@</target>
<note>snd group event chat item</note>
</trans-unit>
<trans-unit id="you: " xml:space="preserve">
@@ -105,10 +105,6 @@
<source>%@ connected</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ on yhdistetty!</target>
@@ -129,10 +125,6 @@
<target>%@ palvelimet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ haluaa muodostaa yhteyden!</target>
@@ -338,10 +330,6 @@
<target>**Yksityisin**: älä käytä SimpleX Chat -ilmoituspalvelinta, tarkista viestit ajoittain taustalla (riippuu siitä, kuinka usein käytät sovellusta).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Huomaa**: et voi palauttaa tai muuttaa tunnuslausetta, jos kadotat sen.</target>
@@ -357,10 +345,6 @@
<target>**Varoitus**: Välittömät push-ilmoitukset vaativat tunnuslauseen, joka on tallennettu Keychainiin.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e-salattu** äänipuhelu</target>
@@ -609,10 +593,6 @@
<target>Osoitteenmuutos keskeytetään. Käytetään vanhaa vastaanotto-osoitetta.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Ylläpitäjät voivat luoda linkkejä ryhmiin liittymiseen.</target>
@@ -666,10 +646,6 @@
<target>Kaikki kontaktisi pysyvät yhteydessä. Profiilipäivitys lähetetään kontakteillesi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Salli</target>
@@ -793,10 +769,6 @@
<target>Sovellusversio: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<note>No comment provided by engineer.</note>
@@ -831,18 +803,6 @@
<target>Ulkonäkö</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Liitä</target>
@@ -1022,10 +982,6 @@
<target>Peruuta</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Ei pääsyä avainnippuun tietokannan salasanan tallentamiseksi</target>
@@ -1126,10 +1082,6 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Chat-asetukset</target>
@@ -1150,10 +1102,6 @@
<target>Kiinalainen ja espanjalainen käyttöliittymä</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Valitse tiedosto</target>
@@ -1223,10 +1171,6 @@
<target>Vahvista tietokannan päivitykset</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Vahvista uusi tunnuslause…</target>
@@ -1237,14 +1181,6 @@
<target>Vahvista salasana</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Yhdistä</target>
@@ -1485,10 +1421,6 @@ This is your own one-time link!</source>
<target>Luotu %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<note>No comment provided by engineer.</note>
@@ -1704,10 +1636,6 @@ This cannot be undone!</source>
<target>Poista tietokanta</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Poista tiedosto</target>
@@ -1992,23 +1920,11 @@ This cannot be undone!</source>
<target>Alenna ja avaa keskustelu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Lataa tiedosto</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Päällekkäinen näyttönimi!</target>
@@ -2063,10 +1979,6 @@ This cannot be undone!</source>
<target>Salli kaikille</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Salli välittömät ilmoitukset?</target>
@@ -2177,10 +2089,6 @@ This cannot be undone!</source>
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Syötä tunnuslause…</target>
@@ -2239,10 +2147,6 @@ This cannot be undone!</source>
<target>Virhe lisättäessä jäseniä</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Virhe osoitteenvaihdossa</target>
@@ -2331,10 +2235,6 @@ This cannot be undone!</source>
<target>Virhe käyttäjäprofiilin poistamisessa</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Virhe toimituskuittauksien sallimisessa!</target>
@@ -2409,10 +2309,6 @@ This cannot be undone!</source>
<target>Virhe tunnuslauseen tallentamisessa avainnippuun</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Virhe käyttäjän salasanan tallentamisessa</target>
@@ -2481,14 +2377,6 @@ This cannot be undone!</source>
<target>Virhe päivitettäessä käyttäjän tietosuojaa</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Virhe: </target>
@@ -2538,10 +2426,6 @@ This cannot be undone!</source>
<target>Viety tietokanta-arkisto.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Tietokanta-arkiston vienti…</target>
@@ -2611,14 +2495,6 @@ This cannot be undone!</source>
<target>Suodata lukemattomia- ja suosikkikeskusteluja.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Vihdoinkin meillä! 🚀</target>
@@ -2904,10 +2780,6 @@ This cannot be undone!</source>
<target>Miten käytät palvelimiasi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>ICE-palvelimet (yksi per rivi)</target>
@@ -2973,14 +2845,6 @@ This cannot be undone!</source>
<target>Tuo tietokanta</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<note>No comment provided by engineer.</note>
@@ -2995,10 +2859,6 @@ This cannot be undone!</source>
<target>Parannettu palvelimen kokoonpano</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>Vastauksena</target>
@@ -3106,10 +2966,6 @@ This cannot be undone!</source>
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
@@ -3465,10 +3321,6 @@ This is your link for group %@!</source>
<target>Viestin teksti</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Viestit</target>
@@ -3483,47 +3335,11 @@ This is your link for group %@!</source>
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Siirretään tietokannan arkistoa…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Siirtovirhe:</target>
@@ -3877,10 +3693,6 @@ This is your link for group %@!</source>
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Avaa käyttäjäprofiilit</target>
@@ -3895,18 +3707,10 @@ This is your link for group %@!</source>
<source>Opening app…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<note>No comment provided by engineer.</note>
@@ -3987,10 +3791,6 @@ This is your link for group %@!</source>
<target>Pysyvä salauksen purkuvirhe</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Pyydä kontaktiasi sallimaan ääniviestien lähettäminen.</target>
@@ -4011,10 +3811,6 @@ This is your link for group %@!</source>
<target>Tarkista omasi ja kontaktin asetukset.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4070,10 +3866,6 @@ Error: %@</source>
<target>Palvelimen osoitteen varmenteen sormenjälki on mahdollisesti virheellinen</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Säilytä viimeinen viestiluonnos liitteineen.</target>
@@ -4206,14 +3998,6 @@ Error: %@</source>
<target>Push-ilmoitukset</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Arvioi sovellus</target>
@@ -4396,22 +4180,10 @@ Error: %@</source>
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Vastaa</target>
@@ -4511,10 +4283,6 @@ Error: %@</source>
<target>SMP-palvelimet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Tallenna</target>
@@ -4873,10 +4641,6 @@ Error: %@</source>
<target>Aseta pääsykoodi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Aseta tunnuslause vientiä varten</target>
@@ -4931,10 +4695,6 @@ Error: %@</source>
<target>Jaa kontaktien kanssa</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Näytä puhelut puhelinhistoriassa</target>
@@ -5073,10 +4833,6 @@ Error: %@</source>
<target>Lopeta SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Pysäytä keskustelu tietokantatoimien mahdollistamiseksi</target>
@@ -5117,10 +4873,6 @@ Error: %@</source>
<target>Lopeta osoitteen jakaminen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Lähetä</target>
@@ -5363,14 +5115,6 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t
<target>Tätä toimintoa ei voi kumota - profiilisi, kontaktisi, viestisi ja tiedostosi poistuvat peruuttamattomasti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
@@ -5650,19 +5394,11 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Päivitä ja avaa keskustelu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Lataa tiedosto</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Käytä .onion-isäntiä</target>
@@ -5711,10 +5447,6 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Käytä palvelinta</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Käyttäjäprofiili</target>
@@ -5747,14 +5479,6 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Tarkista turvakoodi</target>
@@ -5842,10 +5566,6 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Odottaa videota</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Varoitus: saatat menettää joitain tietoja!</target>
@@ -5866,10 +5586,6 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Tervetuloviesti</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Uusimmat</target>
@@ -5923,10 +5639,6 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Sinä</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Hyväksyit yhteyden</target>
@@ -6006,10 +5718,6 @@ Repeat join request?</source>
<target>Voit ottaa ne käyttöön myöhemmin sovelluksen Yksityisyys &amp; Turvallisuus -asetuksista.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Voit piilottaa tai mykistää käyttäjäprofiilin pyyhkäisemällä sitä oikealle.</target>
@@ -6393,7 +6101,7 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
</trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6401,7 +6109,7 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6827,7 +6535,7 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>%@ moderoi</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -6896,10 +6604,6 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<target>vertais</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>vastaus saatu…</target>
@@ -6970,10 +6674,6 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<source>set new profile picture</source>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>alkaa…</target>
@@ -107,11 +107,6 @@
<target>%@ connecté(e)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ téléchargé</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ est connecté·e !</target>
@@ -132,11 +127,6 @@
<target>Serveurs %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<target>%@ envoyé</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ veut se connecter !</target>
@@ -229,7 +219,6 @@
</trans-unit>
<trans-unit id="%lld messages blocked by admin" xml:space="preserve">
<source>%lld messages blocked by admin</source>
<target>%lld messages bloqués par l'administrateur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
@@ -352,11 +341,6 @@
<target>**Confidentiel** : ne pas utiliser le serveur de notifications SimpleX, vérification de nouveaux messages periodiquement en arrière plan (dépend de l'utilisation de l'app).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>**Remarque**: l'utilisation de la même base de données sur deux appareils interrompt le déchiffrement des messages provenant de vos connexions, par mesure de sécurité.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Veuillez noter** : vous NE pourrez PAS récupérer ou modifier votre phrase secrète si vous la perdez.</target>
@@ -372,11 +356,6 @@
<target>**Avertissement** : les notifications push instantanées nécessitent une phrase secrète enregistrée dans la keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Avertissement**: l'archive sera supprimée.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>appel audio **chiffré de bout en bout**</target>
@@ -633,11 +612,6 @@
<target>Le changement d'adresse sera annulé. L'ancienne adresse de réception sera utilisée.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Les admins peuvent bloquer un membre pour tous.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Les admins peuvent créer les liens qui permettent de rejoindre les groupes.</target>
@@ -693,11 +667,6 @@
<target>Tous vos contacts resteront connectés. La mise à jour du profil sera envoyée à vos contacts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>Tous vos contacts, conversations et fichiers seront chiffrés en toute sécurité et transférés par morceaux vers les relais XFTP configurés.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Autoriser</target>
@@ -823,11 +792,6 @@
<target>Build de l'app : %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>Transfert des données de l'application</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>L'application chiffre les nouveaux fichiers locaux (sauf les vidéos).</target>
@@ -863,21 +827,6 @@
<target>Apparence</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Appliquer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Archiver et transférer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Archivage de la base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Attacher</target>
@@ -975,7 +924,6 @@
</trans-unit>
<trans-unit id="Block for all" xml:space="preserve">
<source>Block for all</source>
<target>Bloqué pour tous</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
@@ -990,7 +938,6 @@
</trans-unit>
<trans-unit id="Block member for all?" xml:space="preserve">
<source>Block member for all?</source>
<target>Bloquer le membre pour tous?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
@@ -1000,7 +947,6 @@
</trans-unit>
<trans-unit id="Blocked by admin" xml:space="preserve">
<source>Blocked by admin</source>
<target>Bloqué par l'administrateur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
@@ -1068,11 +1014,6 @@
<target>Annuler</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Annuler le transfert</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Impossible d'accéder à la keychain pour enregistrer le mot de passe de la base de données</target>
@@ -1174,11 +1115,6 @@
<target>Le chat est arrêté. Si vous avez déjà utilisé cette base de données sur un autre appareil, vous devez la transférer à nouveau avant de démarrer le chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Messagerie transférée!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Préférences de chat</target>
@@ -1199,11 +1135,6 @@
<target>Interface en chinois et en espagnol</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Choisissez _Transferer depuis un autre appareil_ sur le nouvel appareil et scannez le code QR.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Choisir le fichier</target>
@@ -1274,11 +1205,6 @@
<target>Confirmer la mise à niveau de la base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Confirmer les paramètres réseau</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Confirmer la nouvelle phrase secrète…</target>
@@ -1289,16 +1215,6 @@
<target>Confirmer le mot de passe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Confirmer que vous vous souvenez de la phrase secrète de la base de données pour la transférer.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<target>Confirmer la transmission</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Se connecter</target>
@@ -1495,7 +1411,7 @@ Il s'agit de votre propre lien unique !</target>
</trans-unit>
<trans-unit id="Create an address to let people connect with you." xml:space="preserve">
<source>Create an address to let people connect with you.</source>
<target>Vous pouvez créer une adresse pour permettre aux autres utilisateurs de vous contacter.</target>
<target>Créez une adresse pour permettre aux gens de vous contacter.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
@@ -1558,11 +1474,6 @@ Il s'agit de votre propre lien unique !</target>
<target>Créé le %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<target>Création d'un lien d'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Création d'un lien…</target>
@@ -1783,11 +1694,6 @@ Cette opération ne peut être annulée !</target>
<target>Supprimer la base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<target>Supprimer la base de données de cet appareil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Supprimer le fichier</target>
@@ -2078,26 +1984,11 @@ Cette opération ne peut être annulée !</target>
<target>Rétrograder et ouvrir le chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<target>Échec du téléchargement</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Télécharger le fichier</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<target>Téléchargement de l'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<target>Téléchargement des détails du lien</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nom d'affichage en double !</target>
@@ -2153,11 +2044,6 @@ Cette opération ne peut être annulée !</target>
<target>Activer pour tous</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<target>Activé dans les conversations directes (BETA)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Activer les notifications instantanées?</target>
@@ -2273,11 +2159,6 @@ Cette opération ne peut être annulée !</target>
<target>Entrer un nom de groupe…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<target>Entrer la phrase secrète</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Entrez la phrase secrète…</target>
@@ -2338,11 +2219,6 @@ Cette opération ne peut être annulée !</target>
<target>Erreur lors de l'ajout de membre·s</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<target>Erreur lors de la négociation du chiffrement PQ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Erreur de changement d'adresse</target>
@@ -2433,11 +2309,6 @@ Cette opération ne peut être annulée !</target>
<target>Erreur lors de la suppression du profil utilisateur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<target>Erreur lors du téléchargement de l'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Erreur lors de l'activation des accusés de réception!</target>
@@ -2513,11 +2384,6 @@ Cette opération ne peut être annulée !</target>
<target>Erreur lors de l'enregistrement de la phrase de passe dans la keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<target>Erreur lors de l'enregistrement des paramètres</target>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Erreur d'enregistrement du mot de passe de l'utilisateur</target>
@@ -2588,16 +2454,6 @@ Cette opération ne peut être annulée !</target>
<target>Erreur de mise à jour de la confidentialité de l'utilisateur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<target>Erreur lors de l'envoi de l'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<target>Erreur lors de la vérification de la phrase secrète:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Erreur : </target>
@@ -2630,7 +2486,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Expand" xml:space="preserve">
<source>Expand</source>
<target>Étendre</target>
<target>Développer</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve">
@@ -2648,11 +2504,6 @@ Cette opération ne peut être annulée !</target>
<target>Archive de la base de données exportée.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<target>Le fichier exporté n'existe pas</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Exportation de l'archive de la base de données…</target>
@@ -2723,16 +2574,6 @@ Cette opération ne peut être annulée !</target>
<target>Filtrer les messages non lus et favoris.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<target>Finaliser le transfert</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<target>Finalisez le transfert sur l'autre appareil.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Enfin, les voilà ! 🚀</target>
@@ -3023,11 +2864,6 @@ Cette opération ne peut être annulée !</target>
<target>Comment utiliser vos serveurs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<target>Interface en hongrois</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>Serveurs ICE (un par ligne)</target>
@@ -3093,16 +2929,6 @@ Cette opération ne peut être annulée !</target>
<target>Importer la base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<target>Échec de l'importation</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<target>Importation de l'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Amélioration de la transmission des messages</target>
@@ -3118,11 +2944,6 @@ Cette opération ne peut être annulée !</target>
<target>Configuration de serveur améliorée</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<target>Pour continuer, le chat doit être interrompu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>En réponse à</target>
@@ -3235,11 +3056,6 @@ Cette opération ne peut être annulée !</target>
<target>Lien invalide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<target>Confirmation de migration invalide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Nom invalide !</target>
@@ -3608,11 +3424,6 @@ Voici votre lien pour le groupe %@ !</target>
<target>Texte du message</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<target>Message trop volumineux</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Messages</target>
@@ -3628,56 +3439,11 @@ Voici votre lien pour le groupe %@ !</target>
<target>Les messages de %@ seront affichés !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Les messages, fichiers et appels sont protégés par un chiffrement **de bout en bout** avec une confidentialité persistante, une répudiation et une récupération en cas d'effraction.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Les messages, fichiers et appels sont protégés par un chiffrement **2e2 résistant post-quantique** avec une confidentialité persistante, une répudiation et une récupération en cas d'effraction.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<target>Transférer l'appareil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<target>Transférer depuis un autre appareil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<target>Transférer ici</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<target>Transférer vers un autre appareil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<target>Transférer vers un autre appareil via un code QR.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<target>Transfert</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Migration de l'archive de la base de données…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<target>Transfert terminé</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Erreur de migration:</target>
@@ -4037,11 +3803,6 @@ Voici votre lien pour le groupe %@ !</target>
<target>Ouvrir le groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<target>Ouvrir le transfert vers un autre appareil</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Ouvrir les profils d'utilisateurs</target>
@@ -4057,21 +3818,11 @@ Voici votre lien pour le groupe %@ !</target>
<target>Ouverture de l'app…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<target>Ou coller le lien de l'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Ou scanner le code QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<target>Ou partagez en toute sécurité le lien de ce fichier</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Ou présenter ce code</target>
@@ -4157,11 +3908,6 @@ Voici votre lien pour le groupe %@ !</target>
<target>Erreur de déchiffrement</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<target>Appels picture-in-picture</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Veuillez demander à votre contact de permettre l'envoi de messages vocaux.</target>
@@ -4182,11 +3928,6 @@ Voici votre lien pour le groupe %@ !</target>
<target>Veuillez vérifier vos préférences ainsi que celles de votre contact.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<target>Veuillez confirmer que les paramètres réseau de cet appareil sont corrects.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4244,11 +3985,6 @@ Erreur: %@</target>
<target>Il est possible que l'empreinte du certificat dans l'adresse du serveur soit incorrecte</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<target>E2EE post-quantique</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Conserver le brouillon du dernier message, avec les pièces jointes.</target>
@@ -4384,16 +4120,6 @@ Erreur: %@</target>
<target>Notifications push</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<target>Serveur Push</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<target>Chiffrement résistant post-quantique</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Évaluer l'app</target>
@@ -4579,26 +4305,11 @@ Erreur: %@</target>
<target>Répéter la demande de connexion ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<target>Répéter le téléchargement</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<target>Répéter l'importation</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Répéter la requête d'adhésion ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<target>Répéter l'envoi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Répondre</target>
@@ -4699,11 +4410,6 @@ Erreur: %@</target>
<target>Serveurs SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<target>Groupes plus sûrs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Enregistrer</target>
@@ -5069,11 +4775,6 @@ Erreur: %@</target>
<target>Définir le code d'accès</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<target>Définir une phrase secrète</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Définir la phrase secrète pour l'export</target>
@@ -5129,11 +4830,6 @@ Erreur: %@</target>
<target>Partager avec vos contacts</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<target>Afficher le code QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Afficher les appels dans l'historique du téléphone</target>
@@ -5151,7 +4847,7 @@ Erreur: %@</target>
</trans-unit>
<trans-unit id="Show preview" xml:space="preserve">
<source>Show preview</source>
<target>Afficher l'aperçu</target>
<target>Montrer l'aperçu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show:" xml:space="preserve">
@@ -5274,11 +4970,6 @@ Erreur: %@</target>
<target>Arrêter SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<target>Arrêter le chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Arrêter le chat pour permettre des actions sur la base de données</target>
@@ -5319,11 +5010,6 @@ Erreur: %@</target>
<target>Cesser le partage d'adresse ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<target>Arrêt du chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Soumettre</target>
@@ -5571,16 +5257,6 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
<target>Cette action ne peut être annulée - votre profil, vos contacts, vos messages et vos fichiers seront irréversiblement perdus.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<target>Cette discussion est protégée par un chiffrement de bout en bout.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<target>Cette discussion est protégée par un chiffrement de bout en bout résistant post-quantique.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Nom de cet appareil</target>
@@ -5720,7 +5396,6 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
</trans-unit>
<trans-unit id="Unblock for all" xml:space="preserve">
<source>Unblock for all</source>
<target>Débloquer pour tous</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member" xml:space="preserve">
@@ -5730,7 +5405,6 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
</trans-unit>
<trans-unit id="Unblock member for all?" xml:space="preserve">
<source>Unblock member for all?</source>
<target>Débloquer le membre pour tous?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member?" xml:space="preserve">
@@ -5875,21 +5549,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Mettre à niveau et ouvrir le chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<target>Échec de l'envoi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Transférer le fichier</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<target>Envoi de l'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Utiliser les hôtes .onions</target>
@@ -5940,11 +5604,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Utiliser ce serveur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<target>Utiliser l'application pendant l'appel.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Profil d'utilisateur</target>
@@ -5957,7 +5616,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
<source>Using SimpleX Chat servers.</source>
<target>Vous utilisez les serveurs SimpleX.</target>
<target>Utilisation des serveurs SimpleX Chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify code with desktop" xml:space="preserve">
@@ -5980,16 +5639,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vérifier les connexions</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<target>Vérifier la phrase secrète de la base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Vérifier la phrase secrète</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Vérifier le code de sécurité</target>
@@ -6080,11 +5729,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>En attente de la vidéo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<target>Attention: démarrer une session de chat sur plusieurs appareils n'est pas pris en charge et entraînera des dysfonctionnements au niveau de la transmission des messages</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Attention : vous risquez de perdre des données !</target>
@@ -6105,11 +5749,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Message de bienvenue</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<target>Le message de bienvenue est trop long</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Quoi de neuf ?</target>
@@ -6122,7 +5761,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
<source>When people request to connect, you can accept or reject it.</source>
<target>Vous pouvez accepter ou refuser les demandes de contacts.</target>
<target>Lorsque des personnes demandent à se connecter, vous pouvez les accepter ou les refuser.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." xml:space="preserve">
@@ -6165,11 +5804,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vous</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<target>Vous **ne devez pas** utiliser la même base de données sur deux appareils.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Vous avez accepté la connexion</target>
@@ -6257,11 +5891,6 @@ Répéter la demande d'adhésion ?</target>
<target>Vous pouvez les activer ultérieurement via les paramètres de Confidentialité et Sécurité de l'application.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<target>Vous pouvez faire un nouvel essai.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.</target>
@@ -6294,7 +5923,7 @@ Répéter la demande d'adhésion ?</target>
</trans-unit>
<trans-unit id="You can share your address as a link or QR code - anybody can connect to you." xml:space="preserve">
<source>You can share your address as a link or QR code - anybody can connect to you.</source>
<target>Vous pouvez partager votre adresse sous la forme d'un lien ou d'un code QR - tout le monde peut l'utiliser pour vous contacter.</target>
<target>Vous pouvez partager votre adresse sous forme de lien ou de code QR - n'importe qui pourra se connecter à vous.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can start chat via app Settings / Database or by restarting the app" xml:space="preserve">
@@ -6615,12 +6244,12 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="agreeing encryption for %@…" xml:space="preserve">
<source>agreeing encryption for %@…</source>
<target>négociation du chiffrement avec %@…</target>
<target>accord sur le chiffrement pour %@…</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="agreeing encryption…" xml:space="preserve">
<source>agreeing encryption…</source>
<target>négociation du chiffrement…</target>
<target>accord sur le chiffrement…</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="always" xml:space="preserve">
@@ -6656,17 +6285,15 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>blocké</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
<target>%@ bloqué</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>bloqué par l'administrateur</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6695,7 +6322,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="changed address for you" xml:space="preserve">
<source>changed address for you</source>
<target>changement de l'adresse du contact</target>
<target>adresse modifiée pour vous</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="changed role of %@ to %@" xml:space="preserve">
@@ -7096,7 +6723,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>modéré par %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7165,11 +6792,6 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
<target>pair-à-pair</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<target>chiffrement e2e résistant post-quantique</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>réponse reçu…</target>
@@ -7237,19 +6859,14 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="set new contact address" xml:space="preserve">
<source>set new contact address</source>
<target>a changé d'adresse de contact</target>
<target>définir une nouvelle adresse de contact</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="set new profile picture" xml:space="preserve">
<source>set new profile picture</source>
<target>a changé d'image de profil</target>
<target>définir une nouvelle image de profil</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<target>chiffrement de bout en bout standard</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>lancement…</target>
@@ -7267,7 +6884,6 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="unblocked %@" xml:space="preserve">
<source>unblocked %@</source>
<target>%@ débloqué</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="unknown" xml:space="preserve">
@@ -7362,7 +6978,6 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="you blocked %@" xml:space="preserve">
<source>you blocked %@</source>
<target>vous avez bloqué %@</target>
<note>snd group event chat item</note>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
@@ -7407,7 +7022,6 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="you unblocked %@" xml:space="preserve">
<source>you unblocked %@</source>
<target>vous avez débloqué %@</target>
<note>snd group event chat item</note>
</trans-unit>
<trans-unit id="you: " xml:space="preserve">
@@ -1,15 +0,0 @@
{
"colors" : [
{
"idiom" : "universal",
"locale" : "hu"
}
],
"properties" : {
"localizable" : true
},
"info" : {
"version" : 1,
"author" : "xcode"
}
}
@@ -1,6 +0,0 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
File diff suppressed because it is too large Load Diff
@@ -1,23 +0,0 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0.000",
"alpha" : "1.000",
"blue" : "1.000",
"green" : "0.533"
}
},
"idiom" : "universal"
}
],
"properties" : {
"localizable" : true
},
"info" : {
"version" : 1,
"author" : "xcode"
}
}
@@ -1,6 +0,0 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -1,6 +0,0 @@
/* Bundle display name */
"CFBundleDisplayName" = "SimpleX NSE";
/* Bundle name */
"CFBundleName" = "SimpleX NSE";
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. All rights reserved.";
@@ -1,30 +0,0 @@
/* No comment provided by engineer. */
"_italic_" = "\\_italic_";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Add new contact**: to create your one-time QR Code or link for your contact.";
/* No comment provided by engineer. */
"*bold*" = "\\*bold*";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
/* No comment provided by engineer. */
"~strike~" = "\\~strike~";
/* call status */
"connecting call" = "connecting call…";
/* No comment provided by engineer. */
"Connecting server…" = "Connecting to server…";
/* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Connecting to server… (error: %@)";
/* rcv group event chat item */
"member connected" = "connected";
/* No comment provided by engineer. */
"No group!" = "Group not found!";
@@ -1,12 +0,0 @@
/* Bundle name */
"CFBundleName" = "SimpleX";
/* Privacy - Camera Usage Description */
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */
"NSPhotoLibraryAddUsageDescription" = "SimpleX needs access to Photo Library for saving captured and received media";
@@ -1,12 +0,0 @@
{
"developmentRegion" : "en",
"project" : "SimpleX.xcodeproj",
"targetLocale" : "hu",
"toolInfo" : {
"toolBuildNumber" : "15A240d",
"toolID" : "com.apple.dt.xcode",
"toolName" : "Xcode",
"toolVersion" : "15.0"
},
"version" : "1.0"
}
@@ -107,11 +107,6 @@
<target>%@ si è connesso/a</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ scaricati</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ è connesso/a!</target>
@@ -132,11 +127,6 @@
<target>Server %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<target>%@ caricati</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ si vuole connettere!</target>
@@ -352,11 +342,6 @@
<target>**Il più privato**: non usare il server di notifica di SimpleX Chat, controlla i messaggi periodicamente in secondo piano (dipende da quanto spesso usi l'app).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>**Nota bene**: usare lo stesso database su due dispositivi bloccherà la decifrazione dei messaggi dalle tue connessioni, come misura di sicurezza.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Nota bene**: NON potrai recuperare o cambiare la password se la perdi.</target>
@@ -372,11 +357,6 @@
<target>**Attenzione**: le notifiche push istantanee richiedono una password salvata nel portachiavi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Attenzione**: l'archivio verrà rimosso.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>Chiamata **crittografata e2e**</target>
@@ -633,11 +613,6 @@
<target>Il cambio di indirizzo verrà interrotto. Verrà usato il vecchio indirizzo di ricezione.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Gli amministratori possono bloccare un membro per tutti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Gli amministratori possono creare i link per entrare nei gruppi.</target>
@@ -693,11 +668,6 @@
<target>Tutti i tuoi contatti resteranno connessi. L'aggiornamento del profilo verrà inviato ai tuoi contatti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>Tutti i tuoi contatti, le conversazioni e i file verranno criptati in modo sicuro e caricati in blocchi sui relay XFTP configurati.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Consenti</target>
@@ -823,11 +793,6 @@
<target>Build dell'app: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>Migrazione dati dell'app</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>L'app cripta i nuovi file locali (eccetto i video).</target>
@@ -863,21 +828,6 @@
<target>Aspetto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Applica</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Archivia e carica</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Archiviazione del database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Allega</target>
@@ -1068,11 +1018,6 @@
<target>Annulla</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Annulla migrazione</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Impossibile accedere al portachiavi per salvare la password del database</target>
@@ -1174,11 +1119,6 @@
<target>La chat è ferma. Se hai già usato questo database su un altro dispositivo, dovresti trasferirlo prima di avviare la chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat migrata!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Preferenze della chat</target>
@@ -1199,11 +1139,6 @@
<target>Interfaccia cinese e spagnola</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Scegli _Migra da un altro dispositivo_ sul nuovo dispositivo e scansione il codice QR.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Scegli file</target>
@@ -1274,11 +1209,6 @@
<target>Conferma aggiornamenti database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Conferma le impostazioni di rete</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Conferma nuova password…</target>
@@ -1289,16 +1219,6 @@
<target>Conferma password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Conferma che ricordi la password del database da migrare.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<target>Conferma caricamento</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Connetti</target>
@@ -1558,11 +1478,6 @@ Questo è il tuo link una tantum!</target>
<target>Creato il %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<target>Creazione link dell'archivio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Creazione link…</target>
@@ -1783,11 +1698,6 @@ Non è reversibile!</target>
<target>Elimina database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<target>Elimina il database da questo dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Elimina file</target>
@@ -2078,26 +1988,11 @@ Non è reversibile!</target>
<target>Esegui downgrade e apri chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<target>Scaricamento fallito</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Scarica file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<target>Scaricamento archivio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<target>Scaricamento dettagli del link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nome da mostrare doppio!</target>
@@ -2153,11 +2048,6 @@ Non è reversibile!</target>
<target>Attiva per tutti</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<target>Attivala nelle chat dirette (BETA)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Attivare le notifiche istantanee?</target>
@@ -2273,11 +2163,6 @@ Non è reversibile!</target>
<target>Inserisci il nome del gruppo…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<target>Inserisci password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Inserisci la password…</target>
@@ -2338,11 +2223,6 @@ Non è reversibile!</target>
<target>Errore di aggiunta membro/i</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<target>Errore nel consentire la crittografia PQ al contatto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Errore nella modifica dell'indirizzo</target>
@@ -2433,11 +2313,6 @@ Non è reversibile!</target>
<target>Errore nell'eliminazione del profilo utente</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<target>Errore di scaricamento dell'archivio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Errore nell'attivazione delle ricevute di consegna!</target>
@@ -2513,11 +2388,6 @@ Non è reversibile!</target>
<target>Errore nel salvataggio della password nel portachiavi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<target>Errore di salvataggio delle impostazioni</target>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Errore nel salvataggio della password utente</target>
@@ -2588,16 +2458,6 @@ Non è reversibile!</target>
<target>Errore nell'aggiornamento della privacy dell'utente</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<target>Errore di invio dell'archivio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<target>Errore di verifica della password:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Errore: </target>
@@ -2648,11 +2508,6 @@ Non è reversibile!</target>
<target>Archivio database esportato.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<target>Il file esportato non esiste</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Esportazione archivio database…</target>
@@ -2723,16 +2578,6 @@ Non è reversibile!</target>
<target>Filtra le chat non lette e preferite.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<target>Finalizza la migrazione</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<target>Finalizza la migrazione su un altro dispositivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Finalmente le abbiamo! 🚀</target>
@@ -3023,11 +2868,6 @@ Non è reversibile!</target>
<target>Come usare i tuoi server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<target>Interfaccia in ungherese</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>Server ICE (uno per riga)</target>
@@ -3093,16 +2933,6 @@ Non è reversibile!</target>
<target>Importa database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<target>Importazione fallita</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<target>Importazione archivio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Consegna dei messaggi migliorata</target>
@@ -3118,11 +2948,6 @@ Non è reversibile!</target>
<target>Configurazione del server migliorata</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<target>Per continuare, la chat deve essere fermata.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>In risposta a</target>
@@ -3235,11 +3060,6 @@ Non è reversibile!</target>
<target>Link non valido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<target>Conferma di migrazione non valida</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Nome non valido!</target>
@@ -3608,11 +3428,6 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Testo del messaggio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<target>Messaggio troppo grande</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Messaggi</target>
@@ -3628,56 +3443,11 @@ Questo è il tuo link per il gruppo %@!</target>
<target>I messaggi da %@ verranno mostrati!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>I messaggi, i file e le chiamate sono protetti da **crittografia end-to-end** con perfect forward secrecy, ripudio e recupero da intrusione.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>I messaggi, i file e le chiamate sono protetti da **crittografia e2e resistente al quantistico** con perfect forward secrecy, ripudio e recupero da intrusione.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<target>Migra dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<target>Migra da un altro dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<target>Migra qui</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<target>Migra ad un altro dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<target>Migra ad un altro dispositivo via codice QR.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<target>Migrazione</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Migrazione archivio del database…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<target>Migrazione completata</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Errore di migrazione:</target>
@@ -4037,11 +3807,6 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Apri gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<target>Apri migrazione ad un altro dispositivo</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Apri i profili utente</target>
@@ -4057,21 +3822,11 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Apertura dell'app…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<target>O incolla il link dell'archivio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>O scansiona il codice QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<target>O condividi in modo sicuro questo link del file</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>O mostra questo codice</target>
@@ -4157,11 +3912,6 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Errore di decifrazione</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<target>Chiamate picture-in-picture</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Chiedi al tuo contatto di attivare l'invio dei messaggi vocali.</target>
@@ -4182,11 +3932,6 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Controlla le preferenze tue e del tuo contatto.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<target>Conferma che le impostazioni di rete sono corrette per questo dispositivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4244,11 +3989,6 @@ Errore: %@</target>
<target>Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<target>E2EE post-quantistica</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Conserva la bozza dell'ultimo messaggio, con gli allegati.</target>
@@ -4384,16 +4124,6 @@ Errore: %@</target>
<target>Notifiche push</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<target>Server push</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<target>Crittografia resistente al quantistico</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Valuta l'app</target>
@@ -4579,26 +4309,11 @@ Errore: %@</target>
<target>Ripetere la richiesta di connessione?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<target>Ripeti scaricamento</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<target>Ripeti importazione</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Ripetere la richiesta di ingresso?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<target>Ripeti caricamento</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Rispondi</target>
@@ -4699,11 +4414,6 @@ Errore: %@</target>
<target>Server SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<target>Gruppi più sicuri</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Salva</target>
@@ -5069,11 +4779,6 @@ Errore: %@</target>
<target>Imposta codice</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<target>Imposta password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Imposta la password per esportare</target>
@@ -5129,11 +4834,6 @@ Errore: %@</target>
<target>Condividi con i contatti</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<target>Mostra codice QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Mostra le chiamate nella cronologia del telefono</target>
@@ -5274,11 +4974,6 @@ Errore: %@</target>
<target>Ferma SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<target>Ferma la chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Ferma la chat per attivare le azioni del database</target>
@@ -5319,11 +5014,6 @@ Errore: %@</target>
<target>Smettere di condividere l'indirizzo?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<target>Arresto della chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Invia</target>
@@ -5571,16 +5261,6 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta
<target>Questa azione non può essere annullata: il tuo profilo, i contatti, i messaggi e i file andranno persi in modo irreversibile.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<target>Questa chat è protetta da crittografia end-to-end.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<target>Questa chat è protetta da crittografia end-to-end resistente al quantistico.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Il nome di questo dispositivo</target>
@@ -5875,21 +5555,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Aggiorna e apri chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<target>Invio fallito</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Invia file</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<target>Invio dell'archivio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Usa gli host .onion</target>
@@ -5940,11 +5610,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Usa il server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<target>Usa l'app mentre sei in chiamata.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Profilo utente</target>
@@ -5980,16 +5645,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Verifica le connessioni</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<target>Verifica password del database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Verifica password</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Verifica codice di sicurezza</target>
@@ -6002,7 +5657,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="Via secure quantum resistant protocol." xml:space="preserve">
<source>Via secure quantum resistant protocol.</source>
<target>Tramite protocollo sicuro resistente al quantistico.</target>
<target>Tramite protocollo sicuro resistente alla quantistica.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video call" xml:space="preserve">
@@ -6080,11 +5735,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>In attesa del video</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<target>Attenzione: avviare la chat su più dispositivi non è supportato e provocherà problemi di recapito dei messaggi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Attenzione: potresti perdere alcuni dati!</target>
@@ -6105,11 +5755,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Messaggio di benvenuto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<target>Il messaggio di benvenuto è troppo lungo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Novità</target>
@@ -6165,11 +5810,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Tu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<target>**Non devi** usare lo stesso database su due dispositivi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Hai accettato la connessione</target>
@@ -6257,11 +5897,6 @@ Ripetere la richiesta di ingresso?</target>
<target>Puoi attivarle più tardi nelle impostazioni di privacy e sicurezza dell'app.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<target>Puoi fare un altro tentativo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.</target>
@@ -6538,7 +6173,7 @@ Puoi annullare questa connessione e rimuovere il contatto (e riprovare più tard
</trans-unit>
<trans-unit id="Your profile **%@** will be shared." xml:space="preserve">
<source>Your profile **%@** will be shared.</source>
<target>Verrà condiviso il tuo profilo **%@**.</target>
<target>Il tuo profilo **%@** verrà condiviso.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your profile is stored on your device and shared only with your contacts.&#10;SimpleX servers cannot see your profile." xml:space="preserve">
@@ -6656,7 +6291,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>bloccato</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6666,7 +6301,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>bloccato dall'amministratore</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -7096,7 +6731,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>moderato da %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7165,11 +6800,6 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<target>peer-to-peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<target>crittografia e2e resistente al quantistico</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>risposta ricevuta…</target>
@@ -7245,11 +6875,6 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
<target>impostata nuova immagine del profilo</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<target>crittografia end-to-end standard</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>avvio…</target>
@@ -89,7 +89,6 @@
</trans-unit>
<trans-unit id="%@ and %@" xml:space="preserve">
<source>%@ and %@</source>
<target>%@ と %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@ connected" xml:space="preserve">
@@ -107,10 +106,6 @@
<target>%@ 接続中</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ 接続中!</target>
@@ -131,10 +126,6 @@
<target>%@ サーバー</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ が接続を希望しています!</target>
@@ -342,10 +333,6 @@
<target>**最もプライベート**: SimpleX Chat 通知サーバーを使用せず、バックグラウンドで定期的にメッセージをチェックします (アプリの使用頻度によって異なります)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**注意**: パスフレーズを紛失すると、パスフレーズを復元または変更できなくなります。</target>
@@ -361,10 +348,6 @@
<target>**警告**: 即時の プッシュ通知には、キーチェーンに保存されたパスフレーズが必要です。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e 暗号化**音声通話</target>
@@ -613,10 +596,6 @@
<target>アドレス変更は中止されます。古い受信アドレスが使用されます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>管理者はグループの参加リンクを生成できます。</target>
@@ -670,10 +649,6 @@
<target>すべての連絡先は維持されます。連絡先に更新されたプロフィールを送信します。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>許可</target>
@@ -797,10 +772,6 @@
<target>アプリのビルド: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>アプリは新しいローカルファイル(ビデオを除く)を暗号化します。</target>
@@ -836,18 +807,6 @@
<target>見た目</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>添付する</target>
@@ -1028,10 +987,6 @@
<target>中止</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>データベースのパスワードを保存するためのキーチェーンにアクセスできません</target>
@@ -1132,10 +1087,6 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>チャット設定</target>
@@ -1156,10 +1107,6 @@
<target>中国語とスペイン語UI</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>ファイルを選択</target>
@@ -1229,10 +1176,6 @@
<target>データベースのアップグレードを確認</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>新しいパスフレーズを確認…</target>
@@ -1243,14 +1186,6 @@
<target>パスワードを確認</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>接続</target>
@@ -1491,10 +1426,6 @@ This is your own one-time link!</source>
<target>%@ によって作成されました</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<note>No comment provided by engineer.</note>
@@ -1710,10 +1641,6 @@ This cannot be undone!</source>
<target>データベースを削除</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>ファイルの削除</target>
@@ -1998,23 +1925,11 @@ This cannot be undone!</source>
<target>ダウングレードしてチャットを開く</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>ファイルをダウンロード</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>表示の名前が重複してます!</target>
@@ -2069,10 +1984,6 @@ This cannot be undone!</source>
<target>すべて有効</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>即時通知を有効にしますか?</target>
@@ -2184,10 +2095,6 @@ This cannot be undone!</source>
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>暗証フレーズを入力…</target>
@@ -2246,10 +2153,6 @@ This cannot be undone!</source>
<target>メンバー追加にエラー発生</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>アドレス変更にエラー発生</target>
@@ -2339,10 +2242,6 @@ This cannot be undone!</source>
<target>ユーザのプロフィール削除にエラー発生</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<note>No comment provided by engineer.</note>
@@ -2416,10 +2315,6 @@ This cannot be undone!</source>
<target>キーチェーンにパスフレーズを保存にエラー発生</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>ユーザーパスワード保存エラー</target>
@@ -2488,14 +2383,6 @@ This cannot be undone!</source>
<target>ユーザープライバシーの更新のエラー</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>エラー : </target>
@@ -2545,10 +2432,6 @@ This cannot be undone!</source>
<target>データベースのアーカイブをエクスポートします。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>データベース アーカイブをエクスポートしています…</target>
@@ -2618,14 +2501,6 @@ This cannot be undone!</source>
<target>未読とお気に入りをフィルターします。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>ついに、私たちはそれらを手に入れました! 🚀</target>
@@ -2911,10 +2786,6 @@ This cannot be undone!</source>
<target>自分のサーバの使い方</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>ICEサーバ (1行に1サーバ)</target>
@@ -2980,14 +2851,6 @@ This cannot be undone!</source>
<target>データベースを読み込む</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<note>No comment provided by engineer.</note>
@@ -3002,10 +2865,6 @@ This cannot be undone!</source>
<target>サーバ設定の向上</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>返信先</target>
@@ -3113,10 +2972,6 @@ This cannot be undone!</source>
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
@@ -3471,10 +3326,6 @@ This is your link for group %@!</source>
<target>メッセージ内容</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>メッセージ</target>
@@ -3489,47 +3340,11 @@ This is your link for group %@!</source>
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>データベースのアーカイブを移行しています…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>移行エラー:</target>
@@ -3885,10 +3700,6 @@ This is your link for group %@!</source>
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>ユーザープロフィールを開く</target>
@@ -3903,18 +3714,10 @@ This is your link for group %@!</source>
<source>Opening app…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<note>No comment provided by engineer.</note>
@@ -3995,10 +3798,6 @@ This is your link for group %@!</source>
<target>永続的な復号化エラー</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>音声メッセージを有効にするように連絡相手に要求してください。</target>
@@ -4019,10 +3818,6 @@ This is your link for group %@!</source>
<target>あなたと連絡先の設定を確認してください。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4078,10 +3873,6 @@ Error: %@</source>
<target>サーバアドレスの証明証IDが正しくないかもしれません</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>添付を含めて、下書きを保存する。</target>
@@ -4214,14 +4005,6 @@ Error: %@</source>
<target>プッシュ通知</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>アプリを評価</target>
@@ -4403,22 +4186,10 @@ Error: %@</source>
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>返信</target>
@@ -4518,10 +4289,6 @@ Error: %@</source>
<target>SMPサーバ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>保存</target>
@@ -4873,10 +4640,6 @@ Error: %@</source>
<target>パスコードを設定する</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>暗証フレーズを設定してからエクスポート</target>
@@ -4931,10 +4694,6 @@ Error: %@</source>
<target>連絡先と共有する</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>通話履歴を表示</target>
@@ -5074,10 +4833,6 @@ Error: %@</source>
<target>SimpleX を停止</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>チャットを停止してデータベースアクションを有効にします</target>
@@ -5118,10 +4873,6 @@ Error: %@</source>
<target>アドレスの共有を停止しますか?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>送信</target>
@@ -5364,14 +5115,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>あなたのプロフィール、連絡先、メッセージ、ファイルが完全削除されます (※元に戻せません※)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
@@ -5650,19 +5393,11 @@ To connect, please ask your contact to create another connection link and check
<target>アップグレードしてチャットを開く</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>ファイルをアップロードする</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>.onionホストを使う</target>
@@ -5711,10 +5446,6 @@ To connect, please ask your contact to create another connection link and check
<target>サーバを使う</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>ユーザープロフィール</target>
@@ -5747,14 +5478,6 @@ To connect, please ask your contact to create another connection link and check
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>セキュリティコードを確認</target>
@@ -5842,10 +5565,6 @@ To connect, please ask your contact to create another connection link and check
<target>ビデオ待機中</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>警告: 一部のデータが失われる可能性があります!</target>
@@ -5866,10 +5585,6 @@ To connect, please ask your contact to create another connection link and check
<target>ウェルカムメッセージ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>新着情報</target>
@@ -5923,10 +5638,6 @@ To connect, please ask your contact to create another connection link and check
<target>あなた</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>接続を承認しました</target>
@@ -6006,10 +5717,6 @@ Repeat join request?</source>
<target>あとでアプリのプライバシーとセキュリティの設定から有効にすることができます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。</target>
@@ -6393,7 +6100,7 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
</trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6401,7 +6108,7 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6827,7 +6534,7 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>%@ によってモデレートされた</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -6896,10 +6603,6 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
<target>P2P</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>回答を受け取りました…</target>
@@ -6970,10 +6673,6 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
<source>set new profile picture</source>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>接続中…</target>
@@ -107,11 +107,6 @@
<target>%@ verbonden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ gedownload</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ is verbonden!</target>
@@ -132,11 +127,6 @@
<target>%@ servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<target>%@ geüpload</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ wil verbinding maken!</target>
@@ -352,11 +342,6 @@
<target>**Meest privé**: gebruik geen SimpleX Chat-notificatie server, controleer berichten regelmatig op de achtergrond (afhankelijk van hoe vaak u de app gebruikt).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>**Let op**: als u dezelfde database op twee apparaten gebruikt, wordt de decodering van berichten van uw verbindingen verbroken, als veiligheidsmaatregel.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Let op**: u kunt het wachtwoord NIET herstellen of wijzigen als u het kwijtraakt.</target>
@@ -372,11 +357,6 @@
<target>**Waarschuwing**: voor directe push meldingen is een wachtwoord vereist dat is opgeslagen in de Keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Waarschuwing**: het archief wordt verwijderd.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e versleuteld** audio gesprek</target>
@@ -633,11 +613,6 @@
<target>Adres wijziging wordt afgebroken. Het oude ontvangstadres wordt gebruikt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Beheerders kunnen een lid voor iedereen blokkeren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Beheerders kunnen de uitnodiging links naar groepen aanmaken.</target>
@@ -693,11 +668,6 @@
<target>Al uw contacten blijven verbonden. Profiel update wordt naar uw contacten verzonden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>Al uw contacten, gesprekken en bestanden worden veilig gecodeerd en in delen geüpload naar geconfigureerde XFTP-relays.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Toestaan</target>
@@ -823,11 +793,6 @@
<target>App build: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>Migratie van app-gegevens</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>App versleutelt nieuwe lokale bestanden (behalve video's).</target>
@@ -863,21 +828,6 @@
<target>Uiterlijk</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Toepassen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Archiveren en uploaden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Database archiveren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Bijvoegen</target>
@@ -1068,11 +1018,6 @@
<target>Annuleren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Migratie annuleren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Geen toegang tot de keychain om database wachtwoord op te slaan</target>
@@ -1174,11 +1119,6 @@
<target>Chat is gestopt. Als je deze database al op een ander apparaat hebt gebruikt, moet je deze terugzetten voordat je met chatten begint.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Chat gemigreerd!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Gesprek voorkeuren</target>
@@ -1199,11 +1139,6 @@
<target>Chinese en Spaanse interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Kies _Migreren vanaf een ander apparaat_ op het nieuwe apparaat en scan de QR-code.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Kies bestand</target>
@@ -1274,11 +1209,6 @@
<target>Bevestig database upgrades</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Bevestig netwerk instellingen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Bevestig nieuw wachtwoord…</target>
@@ -1289,16 +1219,6 @@
<target>Bevestig wachtwoord</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Bevestig dat u het wachtwoord voor de database onthoudt om deze te migreren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<target>Bevestig het uploaden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Verbind</target>
@@ -1558,11 +1478,6 @@ Dit is uw eigen eenmalige link!</target>
<target>Gemaakt op %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<target>Archief link maken</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Link maken…</target>
@@ -1783,11 +1698,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Database verwijderen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<target>Verwijder de database van dit apparaat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Verwijder bestand</target>
@@ -2078,26 +1988,11 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Downgraden en chat openen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<target>Download mislukt</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Download bestand</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<target>Archief downloaden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<target>Link gegevens downloaden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Dubbele weergavenaam!</target>
@@ -2153,11 +2048,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Inschakelen voor iedereen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<target>Activeer in directe chats (BETA)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Onmiddellijke meldingen inschakelen?</target>
@@ -2273,11 +2163,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Groep naam invoeren…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<target>Voer het wachtwoord in</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Voer wachtwoord in…</target>
@@ -2338,11 +2223,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Fout bij het toevoegen van leden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<target>Fout bij het toestaan van contact PQ-versleuteling</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Fout bij wijzigen van adres</target>
@@ -2433,11 +2313,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Fout bij het verwijderen van gebruikers profiel</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<target>Fout bij het downloaden van het archief</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Fout bij het inschakelen van ontvangst bevestiging!</target>
@@ -2513,11 +2388,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Fout bij opslaan van wachtwoord in de keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<target>Fout bij opslaan van instellingen</target>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Fout bij opslaan gebruikers wachtwoord</target>
@@ -2588,16 +2458,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Fout bij updaten van gebruikers privacy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<target>Fout bij het uploaden van het archief</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<target>Fout bij het verifiëren van het wachtwoord:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Fout: </target>
@@ -2648,11 +2508,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Geëxporteerd database archief.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<target>Geëxporteerd bestand bestaat niet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Database archief exporteren…</target>
@@ -2723,16 +2578,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Filter ongelezen en favoriete chats.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<target>Voltooi de migratie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<target>Voltooi de migratie op een ander apparaat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Eindelijk, we hebben ze! 🚀</target>
@@ -3023,11 +2868,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Hoe u uw servers gebruikt</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<target>Hongaarse interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>ICE servers (één per lijn)</target>
@@ -3093,16 +2933,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Database importeren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<target>Importeren is mislukt</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<target>Archief importeren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Verbeterde berichtbezorging</target>
@@ -3118,11 +2948,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Verbeterde serverconfiguratie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<target>Om verder te kunnen gaan, moet de chat worden gestopt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>In antwoord op</target>
@@ -3235,11 +3060,6 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Ongeldige link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<target>Ongeldige migratie bevestiging</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Ongeldige naam!</target>
@@ -3608,11 +3428,6 @@ Dit is jouw link voor groep %@!</target>
<target>Bericht tekst</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<target>Bericht te groot</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Berichten</target>
@@ -3628,56 +3443,11 @@ Dit is jouw link voor groep %@!</target>
<target>Berichten van %@ worden getoond!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Berichten, bestanden en oproepen worden beschermd door **end-to-end codering** met perfecte voorwaartse geheimhouding, afwijzing en inbraakherstel.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Berichten, bestanden en oproepen worden beschermd door **kwantumbestendige e2e encryptie** met perfecte voorwaartse geheimhouding, afwijzing en inbraakherstel.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<target>Apparaat migreren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<target>Migreer vanaf een ander apparaat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<target>Migreer hierheen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<target>Migreer naar een ander apparaat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<target>Migreer naar een ander apparaat via QR-code.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<target>Migreren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Database archief migreren…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<target>Migratie voltooid</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Migratiefout:</target>
@@ -4037,11 +3807,6 @@ Dit is jouw link voor groep %@!</target>
<target>Open groep</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<target>Open de migratie naar een ander apparaat</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Gebruikers profielen openen</target>
@@ -4057,21 +3822,11 @@ Dit is jouw link voor groep %@!</target>
<target>App openen…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<target>Of plak de archief link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Of scan de QR-code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<target>Of deel deze bestands link veilig</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Of laat deze code zien</target>
@@ -4157,11 +3912,6 @@ Dit is jouw link voor groep %@!</target>
<target>Decodering fout</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<target>Beeld-in-beeld oproepen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Vraag uw contact om het verzenden van spraak berichten in te schakelen.</target>
@@ -4182,11 +3932,6 @@ Dit is jouw link voor groep %@!</target>
<target>Controleer de uwe en uw contact voorkeuren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<target>Controleer of de netwerk instellingen correct zijn voor dit apparaat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4244,11 +3989,6 @@ Fout: %@</target>
<target>Mogelijk is de certificaat vingerafdruk in het server adres onjuist</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<target>Post-quantum E2EE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Bewaar het laatste berichtconcept, met bijlagen.</target>
@@ -4384,16 +4124,6 @@ Fout: %@</target>
<target>Push meldingen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<target>Push server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<target>quantum bestendige encryptie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Beoordeel de app</target>
@@ -4579,26 +4309,11 @@ Fout: %@</target>
<target>Verbindingsverzoek herhalen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<target>Herhaal het downloaden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<target>Herhaal import</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Deelnameverzoek herhalen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<target>Herhaal het uploaden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Antwoord</target>
@@ -4699,11 +4414,6 @@ Fout: %@</target>
<target>SMP servers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<target>Veiligere groepen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Opslaan</target>
@@ -4831,7 +4541,7 @@ Fout: %@</target>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
<source>Search or paste SimpleX link</source>
<target>Zoeken of plak een SimpleX link</target>
<target>Zoek of plak een SimpleX link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Secure queue" xml:space="preserve">
@@ -5069,11 +4779,6 @@ Fout: %@</target>
<target>Toegangscode instellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<target>Wachtwoord instellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Wachtwoord instellen om te exporteren</target>
@@ -5129,11 +4834,6 @@ Fout: %@</target>
<target>Delen met contacten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<target>Toon QR-code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Toon oproepen in de telefoongeschiedenis</target>
@@ -5274,11 +4974,6 @@ Fout: %@</target>
<target>Stop SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<target>Stop chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Stop de chat om database acties mogelijk te maken</target>
@@ -5319,11 +5014,6 @@ Fout: %@</target>
<target>Stop met het delen van adres?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<target>Chat stoppen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Indienen</target>
@@ -5571,16 +5261,6 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target>
<target>Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<target>Deze chat is beveiligd met end-to-end codering.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<target>Deze chat wordt beschermd door quantum bestendige end-to-end codering.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Deze apparaatnaam</target>
@@ -5875,21 +5555,11 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Upgrade en open chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<target>Upload mislukt</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Upload bestand</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<target>Archief uploaden</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Gebruik .onion-hosts</target>
@@ -5940,11 +5610,6 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Gebruik server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<target>Gebruik de app tijdens het gesprek.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Gebruikers profiel</target>
@@ -5980,16 +5645,6 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Controleer verbindingen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<target>Controleer het wachtwoord van de database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Controleer het wachtwoord</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Controleer de beveiligingscode</target>
@@ -6080,11 +5735,6 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Wachten op video</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<target>Waarschuwing: het starten van de chat op meerdere apparaten wordt niet ondersteund en zal leiden tot mislukte bezorging van berichten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Waarschuwing: u kunt sommige gegevens verliezen!</target>
@@ -6105,11 +5755,6 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Welkomst bericht</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<target>Welkomstbericht is te lang</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Wat is er nieuw</target>
@@ -6165,11 +5810,6 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Jij</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<target>U **mag** niet dezelfde database op twee apparaten gebruiken.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Je hebt de verbinding geaccepteerd</target>
@@ -6257,11 +5897,6 @@ Deelnameverzoek herhalen?</target>
<target>U kunt ze later inschakelen via de privacy- en beveiligingsinstellingen van de app.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<target>Je kunt het nog een keer proberen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.</target>
@@ -6656,7 +6291,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>geblokkeerd</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6666,7 +6301,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>geblokkeerd door beheerder</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6980,7 +6615,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
</trans-unit>
<trans-unit id="incognito via contact address link" xml:space="preserve">
<source>incognito via contact address link</source>
<target>incognito via contact adres link</target>
<target>incognito via contactadres link</target>
<note>chat list item description</note>
</trans-unit>
<trans-unit id="incognito via group link" xml:space="preserve">
@@ -7050,7 +6685,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
</trans-unit>
<trans-unit id="left" xml:space="preserve">
<source>left</source>
<target>is vertrokken</target>
<target>verlaten</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="marked deleted" xml:space="preserve">
@@ -7096,7 +6731,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>gemodereerd door %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7165,11 +6800,6 @@ SimpleX servers kunnen uw profiel niet zien.</target>
<target>peer-to-peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<target>quantum bestendige e2e-codering</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>antwoord gekregen…</target>
@@ -7245,11 +6875,6 @@ SimpleX servers kunnen uw profiel niet zien.</target>
<target>nieuwe profielfoto instellen</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<target>standaard end-to-end encryptie</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>beginnen…</target>
@@ -7302,7 +6927,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
</trans-unit>
<trans-unit id="via contact address link" xml:space="preserve">
<source>via contact address link</source>
<target>via contact adres link</target>
<target>via contactadres link</target>
<note>chat list item description</note>
</trans-unit>
<trans-unit id="via group link" xml:space="preserve">
@@ -107,11 +107,6 @@
<target>%@ połączony</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ pobrane</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ jest połączony!</target>
@@ -132,11 +127,6 @@
<target>%@ serwery</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<target>%@ wgrane</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ chce się połączyć!</target>
@@ -352,11 +342,6 @@
<target>**Najbardziej prywatny**: nie korzystaj z serwera powiadomień SimpleX Chat, sprawdzaj wiadomości okresowo w tle (zależy jak często korzystasz z aplikacji).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>*Uwaga*: używanie tej samej bazy danych na dwóch urządzeniach zepsuje odszyfrowywanie wiadomości twoich połączeń, jako zabezpieczenie.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Uwaga**: NIE będziesz w stanie odzyskać lub zmienić hasła, jeśli je stracisz.</target>
@@ -372,11 +357,6 @@
<target>**Uwaga**: Natychmiastowe powiadomienia push wymagają hasła zapisanego w Keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Ostrzeżenie**: archiwum zostanie usunięte.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**szyfrowane e2e** połączenie audio</target>
@@ -633,11 +613,6 @@
<target>Zmiana adresu zostanie przerwana. Użyty zostanie stary adres odbiorczy.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Administratorzy mogą blokować członka dla wszystkich.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Administratorzy mogą tworzyć linki do dołączania do grup.</target>
@@ -693,11 +668,6 @@
<target>Wszystkie Twoje kontakty pozostaną połączone. Aktualizacja profilu zostanie wysłana do Twoich kontaktów.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>Wszystkie twoje kontakty, konwersacje i pliki będą bezpiecznie szyfrowane i wgrywane w kawałkach do skonfigurowanych przekaźników XFTP.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Pozwól</target>
@@ -823,11 +793,6 @@
<target>Kompilacja aplikacji: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>Migracja danych aplikacji</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>Aplikacja szyfruje nowe lokalne pliki (bez filmów).</target>
@@ -863,21 +828,6 @@
<target>Wygląd</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Zastosuj</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Archiwizuj i prześlij</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Archiwizowanie bazy danych</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Dołącz</target>
@@ -1068,11 +1018,6 @@
<target>Anuluj</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Anuluj migrację</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Nie można uzyskać dostępu do pęku kluczy, aby zapisać hasło do bazy danych</target>
@@ -1174,11 +1119,6 @@
<target>Czat został zatrzymany. Jeśli korzystałeś już z tej bazy danych na innym urządzeniu, powinieneś przenieść ją z powrotem przed rozpoczęciem czatu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Czat zmigrowany!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Preferencje czatu</target>
@@ -1199,11 +1139,6 @@
<target>Chiński i hiszpański interfejs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Wybierz _Zmigruj z innego urządzenia_ na nowym urządzeniu i zeskanuj kod QR.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Wybierz plik</target>
@@ -1274,11 +1209,6 @@
<target>Potwierdź aktualizacje bazy danych</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Potwierdź ustawienia sieciowe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Potwierdź nowe hasło…</target>
@@ -1289,16 +1219,6 @@
<target>Potwierdź hasło</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Potwierdź, że pamiętasz hasło do bazy danych, aby ją zmigrować.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<target>Potwierdź wgranie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Połącz</target>
@@ -1558,11 +1478,6 @@ To jest twój jednorazowy link!</target>
<target>Utworzony w dniu %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<target>Tworzenie linku archiwum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Tworzenie linku…</target>
@@ -1783,11 +1698,6 @@ To nie może być cofnięte!</target>
<target>Usuń bazę danych</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<target>Usuń bazę danych z tego urządzenia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Usuń plik</target>
@@ -2078,26 +1988,11 @@ To nie może być cofnięte!</target>
<target>Obniż wersję i otwórz czat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<target>Pobieranie nie udane</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Pobierz plik</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<target>Pobieranie archiwum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<target>Pobieranie szczegółów linku</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Zduplikowana wyświetlana nazwa!</target>
@@ -2153,11 +2048,6 @@ To nie może być cofnięte!</target>
<target>Włącz dla wszystkich</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<target>Włącz w czatach bezpośrednich (BETA)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Włączyć natychmiastowe powiadomienia?</target>
@@ -2273,11 +2163,6 @@ To nie może być cofnięte!</target>
<target>Wpisz nazwę grupy…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<target>Wprowadź hasło</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Wprowadź hasło…</target>
@@ -2338,11 +2223,6 @@ To nie może być cofnięte!</target>
<target>Błąd dodawania członka(ów)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<target>Błąd pozwalania kontaktowi na szyfrowanie PQ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Błąd zmiany adresu</target>
@@ -2433,11 +2313,6 @@ To nie może być cofnięte!</target>
<target>Błąd usuwania profilu użytkownika</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<target>Błąd pobierania archiwum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Błąd włączania potwierdzeń dostawy!</target>
@@ -2513,11 +2388,6 @@ To nie może być cofnięte!</target>
<target>Błąd zapisu hasła do pęku kluczy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<target>Błąd zapisywania ustawień</target>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Błąd zapisu hasła użytkownika</target>
@@ -2588,16 +2458,6 @@ To nie może być cofnięte!</target>
<target>Błąd aktualizacji prywatności użytkownika</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<target>Błąd wgrywania archiwum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<target>Błąd weryfikowania hasła:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Błąd: </target>
@@ -2648,11 +2508,6 @@ To nie może być cofnięte!</target>
<target>Wyeksportowane archiwum bazy danych.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<target>Wyeksportowany plik nie istnieje</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Eksportowanie archiwum bazy danych…</target>
@@ -2723,16 +2578,6 @@ To nie może być cofnięte!</target>
<target>Filtruj nieprzeczytane i ulubione czaty.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<target>Dokończ migrację</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<target>Dokończ migrację na innym urządzeniu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>W końcu je mamy! 🚀</target>
@@ -3023,11 +2868,6 @@ To nie może być cofnięte!</target>
<target>Jak korzystać z Twoich serwerów</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<target>Węgierski interfejs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>Serwery ICE (po jednym na linię)</target>
@@ -3093,16 +2933,6 @@ To nie może być cofnięte!</target>
<target>Importuj bazę danych</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<target>Import nie udał się</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<target>Importowanie archiwum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Ulepszona dostawa wiadomości</target>
@@ -3118,11 +2948,6 @@ To nie może być cofnięte!</target>
<target>Ulepszona konfiguracja serwera</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<target>Aby konturować, czat musi zostać zatrzymany.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>W odpowiedzi na</target>
@@ -3235,11 +3060,6 @@ To nie może być cofnięte!</target>
<target>Nieprawidłowy link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<target>Nieprawidłowe potwierdzenie migracji</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Nieprawidłowa nazwa!</target>
@@ -3608,11 +3428,6 @@ To jest twój link do grupy %@!</target>
<target>Tekst wiadomości</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<target>Wiadomość jest zbyt duża</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Wiadomości</target>
@@ -3628,56 +3443,11 @@ To jest twój link do grupy %@!</target>
<target>Wiadomości od %@ zostaną pokazane!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Wiadomości, pliki i połączenia są chronione przez **szyfrowanie end-to-end** z doskonałym utajnianiem z wyprzedzeniem i odzyskiem po złamaniu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Wiadomości, pliki i połączenia są chronione przez **kwantowo odporne szyfrowanie end-to-end** z doskonałym utajnianiem z wyprzedzeniem i odzyskiem po złamaniu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<target>Zmigruj urządzenie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<target>Zmigruj z innego urządzenia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<target>Zmigruj tutaj</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<target>Zmigruj do innego urządzenia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<target>Zmigruj do innego urządzenia przez kod QR.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<target>Migrowanie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Migrowanie archiwum bazy danych…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<target>Migracja zakończona</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Błąd migracji:</target>
@@ -4037,11 +3807,6 @@ To jest twój link do grupy %@!</target>
<target>Grupa otwarta</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<target>Otwórz migrację na innym urządzeniu</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Otwórz profile użytkownika</target>
@@ -4057,21 +3822,11 @@ To jest twój link do grupy %@!</target>
<target>Otwieranie aplikacji…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<target>Lub wklej link archiwum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Lub zeskanuj kod QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<target>Lub bezpiecznie udostępnij ten link pliku</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Lub pokaż ten kod</target>
@@ -4157,11 +3912,6 @@ To jest twój link do grupy %@!</target>
<target>Stały błąd odszyfrowania</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<target>Połączenia obraz-w-obrazie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Poproś Twój kontakt o włączenie wysyłania wiadomości głosowych.</target>
@@ -4182,11 +3932,6 @@ To jest twój link do grupy %@!</target>
<target>Proszę sprawdzić preferencje Twoje i Twojego kontaktu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<target>Proszę potwierdzić, że ustawienia sieciowe są prawidłowe dla tego urządzenia.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4244,11 +3989,6 @@ Błąd: %@</target>
<target>Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<target>Postkwantowe E2EE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Zachowaj ostatnią wersję roboczą wiadomości wraz z załącznikami.</target>
@@ -4384,16 +4124,6 @@ Błąd: %@</target>
<target>Powiadomienia push</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<target>Serwer Push</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<target>Kwantowo odporne szyfrowanie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Oceń aplikację</target>
@@ -4579,26 +4309,11 @@ Błąd: %@</target>
<target>Powtórzyć prośbę połączenia?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<target>Powtórz pobieranie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<target>Powtórz importowanie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Powtórzyć prośbę dołączenia?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<target>Powtórz wgrywanie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Odpowiedz</target>
@@ -4699,11 +4414,6 @@ Błąd: %@</target>
<target>Serwery SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<target>Bezpieczniejsze grupy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Zapisz</target>
@@ -5069,11 +4779,6 @@ Błąd: %@</target>
<target>Ustaw pin</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<target>Ustaw hasło</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Ustaw hasło do eksportu</target>
@@ -5129,11 +4834,6 @@ Błąd: %@</target>
<target>Udostępnij kontaktom</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<target>Pokaż kod QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Pokaż połączenia w historii telefonu</target>
@@ -5274,11 +4974,6 @@ Błąd: %@</target>
<target>Zatrzymaj SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<target>Zatrzymaj czat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Zatrzymaj czat, aby umożliwić działania na bazie danych</target>
@@ -5319,11 +5014,6 @@ Błąd: %@</target>
<target>Przestać udostępniać adres?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<target>Zatrzymywanie czatu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Zatwierdź</target>
@@ -5571,16 +5261,6 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
<target>Tego działania nie można cofnąć - Twój profil, kontakty, wiadomości i pliki zostaną nieodwracalnie utracone.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<target>Ten czat jest chroniony przez szyfrowanie end-to-end.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<target>Ten czat jest chroniony przez kwantowo odporne szyfrowanie end-to-end.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Nazwa tego urządzenia</target>
@@ -5875,21 +5555,11 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Zaktualizuj i otwórz czat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<target>Wgrywanie nie udane</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Prześlij plik</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<target>Wgrywanie archiwum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Użyj hostów .onion</target>
@@ -5940,11 +5610,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Użyj serwera</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<target>Używaj aplikacji podczas połączenia.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Profil użytkownika</target>
@@ -5980,16 +5645,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Zweryfikuj połączenia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<target>Zweryfikuj hasło bazy danych</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Zweryfikuj hasło</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Weryfikuj kod bezpieczeństwa</target>
@@ -6080,11 +5735,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Oczekiwanie na film</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<target>Ostrzeżenie: rozpoczęcie czatu na wielu urządzeniach nie jest wspierane i spowoduje niepowodzenia dostarczania wiadomości</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Uwaga: możesz stracić niektóre dane!</target>
@@ -6105,11 +5755,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Wiadomość powitalna</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<target>Wiadomość powitalna jest zbyt długa</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Co nowego</target>
@@ -6165,11 +5810,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Ty</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<target>**Nie możesz** używać tej samej bazy na dwóch urządzeniach.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Zaakceptowałeś połączenie</target>
@@ -6257,11 +5897,6 @@ Powtórzyć prośbę dołączenia?</target>
<target>Możesz je włączyć później w ustawieniach Prywatności i Bezpieczeństwa aplikacji.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<target>Możesz spróbować ponownie.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.</target>
@@ -6656,7 +6291,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>zablokowany</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6666,7 +6301,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>zablokowany przez admina</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -7096,7 +6731,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>moderowany przez %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7165,11 +6800,6 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
<target>peer-to-peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<target>kwantowo odporne szyfrowanie e2e</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>otrzymano odpowiedź…</target>
@@ -7245,11 +6875,6 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
<target>ustaw nowe zdjęcie profilu</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<target>standardowe szyfrowanie end-to-end</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>uruchamianie…</target>
@@ -69,7 +69,7 @@
</trans-unit>
<trans-unit id="%@ is not verified" xml:space="preserve" approved="no">
<source>%@ is not verified</source>
<target state="translated">%@ não foi verificado(a)</target>
<target state="translated">%@ não foi verificado</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is verified" xml:space="preserve" approved="no">
@@ -84,12 +84,12 @@
</trans-unit>
<trans-unit id="%d days" xml:space="preserve" approved="no">
<source>%d days</source>
<target state="translated">%d dias</target>
<target state="translated">%d dia(s)</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d hours" xml:space="preserve" approved="no">
<source>%d hours</source>
<target state="translated">%d horas</target>
<target state="translated">%d hora(s)</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d min" xml:space="preserve" approved="no">
@@ -99,7 +99,7 @@
</trans-unit>
<trans-unit id="%d months" xml:space="preserve" approved="no">
<source>%d months</source>
<target state="translated">%d meses</target>
<target state="translated">%d mês(es)</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d sec" xml:space="preserve" approved="no">
@@ -109,7 +109,7 @@
</trans-unit>
<trans-unit id="%d skipped message(s)" xml:space="preserve" approved="no">
<source>%d skipped message(s)</source>
<target state="translated">%d mensagem(ns) omitida(s)</target>
<target state="translated">%d mensagem(ns) ignorada(s)</target>
<note>integrity error chat item</note>
</trans-unit>
<trans-unit id="%lld" xml:space="preserve" approved="no">
@@ -5189,51 +5189,6 @@ Isso pode acontecer por causa de algum bug ou quando a conexão está comprometi
<target state="translated">Desaparecerá: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="# %@" xml:space="preserve" approved="no">
<source># %@</source>
<target state="translated"># %@</target>
<note>copied message info title, # &lt;title&gt;</note>
</trans-unit>
<trans-unit id="## History" xml:space="preserve" approved="no">
<source>## History</source>
<target state="translated">## Histórico</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="## In reply to" xml:space="preserve" approved="no">
<source>## In reply to</source>
<target state="translated">## Em resposta a</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%@ connected" xml:space="preserve" approved="no">
<source>%@ connected</source>
<target state="translated">%@ conectado(a)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld members" xml:space="preserve" approved="no">
<source>%@, %@ and %lld members</source>
<target state="translated">%@, %@ e %lld membros</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@ connected" xml:space="preserve" approved="no">
<source>%@ and %@ connected</source>
<target state="translated">%@ e %@ conectados</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve" approved="no">
<source>%@, %@ and %lld other members connected</source>
<target state="translated">%@, %@ e %lld e outros membros se conectaram</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@" xml:space="preserve" approved="no">
<source>%@ and %@</source>
<target state="translated">%@ e %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ at %@:" xml:space="preserve" approved="no">
<source>%1$@ at %2$@:</source>
<target state="translated">%1$@ em %2$@:</target>
<note>copied message info, &lt;sender&gt; at &lt;time&gt;</note>
</trans-unit>
</body>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="pt-BR" datatype="plaintext">
@@ -107,11 +107,6 @@
<target>%@ соединен(а)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<target>%@ загружено</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>Установлено соединение с %@!</target>
@@ -132,11 +127,6 @@
<target>%@ серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<target>%@ загружено</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ хочет соединиться!</target>
@@ -352,11 +342,6 @@
<target>**Самый конфиденциальный**: не использовать сервер уведомлений SimpleX Chat, проверять сообщения периодически в фоновом режиме (зависит от того насколько часто Вы используете приложение).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<target>**Обратите внимание**: использование одной и той же базы данных на двух устройствах нарушит расшифровку сообщений от ваших контактов, как свойство защиты соединений.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Внимание**: Вы не сможете восстановить или поменять пароль, если Вы его потеряете.</target>
@@ -372,11 +357,6 @@
<target>**Внимание**: для работы мгновенных уведомлений пароль должен быть сохранен в Keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<target>**Внимание**: архив будет удален.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e зашифрованный** аудиозвонок</target>
@@ -633,11 +613,6 @@
<target>Изменение адреса будет прекращено. Будет использоваться старый адрес.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<target>Админы могут заблокировать члена группы.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Админы могут создать ссылки для вступления в группу.</target>
@@ -693,11 +668,6 @@
<target>Все Ваши контакты сохранятся. Обновленный профиль будет отправлен Вашим контактам.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<target>Все ваши контакты, разговоры и файлы будут надежно зашифрованы и загружены на выбранные XFTP серверы.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Разрешить</target>
@@ -823,11 +793,6 @@
<target>Сборка приложения: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<target>Миграция данных</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>Приложение шифрует новые локальные файлы (кроме видео).</target>
@@ -863,21 +828,6 @@
<target>Интерфейс</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<target>Применить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<target>Архивировать и загрузить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<target>Подготовка архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Прикрепить</target>
@@ -1068,11 +1018,6 @@
<target>Отменить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<target>Отменить миграцию</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Ошибка доступа к Keychain при сохранении пароля</target>
@@ -1174,11 +1119,6 @@
<target>Чат остановлен. Если вы уже использовали эту базу данных на другом устройстве, перенесите ее обратно до запуска чата.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<target>Чат мигрирован!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>Предпочтения</target>
@@ -1199,11 +1139,6 @@
<target>Китайский и Испанский интерфейс</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<target>Выберите _Мигрировать с другого устройства_ на новом устройстве и сосканируйте QR код.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Выбрать файл</target>
@@ -1274,11 +1209,6 @@
<target>Подтвердить обновление базы данных</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<target>Подтвердите настройки сети</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Подтвердите новый пароль…</target>
@@ -1289,16 +1219,6 @@
<target>Подтвердить пароль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<target>Подтвердите, что Вы помните пароль базы данных для ее миграции.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<target>Подтвердить загрузку</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Соединиться</target>
@@ -1558,11 +1478,6 @@ This is your own one-time link!</source>
<target>Дата создания %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<target>Создание ссылки на архив</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Создаётся ссылка…</target>
@@ -1783,11 +1698,6 @@ This cannot be undone!</source>
<target>Удалить данные чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<target>Удалить базу данных с этого устройства</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Удалить файл</target>
@@ -2078,26 +1988,11 @@ This cannot be undone!</source>
<target>Откатить версию и открыть чат</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<target>Ошибка загрузки</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Загрузка файла</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<target>Загрузка архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<target>Загрузка ссылки архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Имя профиля уже используется!</target>
@@ -2153,11 +2048,6 @@ This cannot be undone!</source>
<target>Включить для всех</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<target>Включите для контактов (BETA)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Включить мгновенные уведомления?</target>
@@ -2273,11 +2163,6 @@ This cannot be undone!</source>
<target>Введите имя группы…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<target>Введите пароль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Введите пароль…</target>
@@ -2338,11 +2223,6 @@ This cannot be undone!</source>
<target>Ошибка при добавлении членов группы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<target>Ошибка разрешения квантово-устойчивого шифрования</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Ошибка при изменении адреса</target>
@@ -2433,11 +2313,6 @@ This cannot be undone!</source>
<target>Ошибка удаления профиля пользователя</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<target>Ошибка загрузки архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Ошибка при включении отчётов о доставке!</target>
@@ -2513,11 +2388,6 @@ This cannot be undone!</source>
<target>Ошибка сохранения пароля в Keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<target>Ошибка сохранения настроек</target>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Ошибка при сохранении пароля пользователя</target>
@@ -2588,16 +2458,6 @@ This cannot be undone!</source>
<target>Ошибка при обновлении конфиденциальности</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<target>Ошибка загрузки архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<target>Ошибка подтверждения пароля:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Ошибка: </target>
@@ -2648,11 +2508,6 @@ This cannot be undone!</source>
<target>Архив чата экспортирован.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<target>Экспортированный файл не существует</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Архив чата экспортируется…</target>
@@ -2723,16 +2578,6 @@ This cannot be undone!</source>
<target>Фильтровать непрочитанные и избранные чаты.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<target>Завершить миграцию</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<target>Завершите миграцию на другом устройстве.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Наконец-то, мы их добавили! 🚀</target>
@@ -3023,11 +2868,6 @@ This cannot be undone!</source>
<target>Как использовать серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<target>Венгерский интерфейс</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>ICE серверы (один на строке)</target>
@@ -3093,16 +2933,6 @@ This cannot be undone!</source>
<target>Импорт архива чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<target>Ошибка импорта</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<target>Импорт архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<target>Улучшенная доставка сообщений</target>
@@ -3118,11 +2948,6 @@ This cannot be undone!</source>
<target>Улучшенная конфигурация серверов</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<target>Чтобы продолжить, чат должен быть остановлен.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>В ответ на</target>
@@ -3235,11 +3060,6 @@ This cannot be undone!</source>
<target>Ошибка ссылки</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<target>Ошибка подтверждения миграции</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<target>Неверное имя!</target>
@@ -3608,11 +3428,6 @@ This is your link for group %@!</source>
<target>Текст сообщения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<target>Сообщение слишком большое</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Сообщения</target>
@@ -3628,56 +3443,11 @@ This is your link for group %@!</source>
<target>Сообщения от %@ будут показаны!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Сообщения, файлы и звонки защищены **end-to-end шифрованием** с прямой секретностью (PFS), правдоподобным отрицанием и восстановлением от взлома.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<target>Сообщения, файлы и звонки защищены **квантово-устойчивым end-to-end шифрованием** с прямой секретностью (PFS), правдоподобным отрицанием и восстановлением от взлома.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<target>Мигрировать устройство</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<target>Миграция с другого устройства</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<target>Мигрировать сюда</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<target>Мигрировать на другое устройство</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<target>Мигрируйте на другое устройство через QR код.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<target>Миграция</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Данные чата перемещаются…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<target>Миграция завершена</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Ошибка при перемещении данных:</target>
@@ -4037,11 +3807,6 @@ This is your link for group %@!</source>
<target>Открыть группу</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<target>Открытие миграции на другое устройство</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Открыть профили пользователя</target>
@@ -4057,21 +3822,11 @@ This is your link for group %@!</source>
<target>Приложение отрывается…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<target>Или вставьте ссылку архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Или отсканируйте QR код</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<target>Или передайте эту ссылку</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Или покажите этот код</target>
@@ -4157,11 +3912,6 @@ This is your link for group %@!</source>
<target>Ошибка расшифровки</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<target>Звонки с картинкой-в-картинке</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Попросите у Вашего контакта разрешить отправку голосовых сообщений.</target>
@@ -4182,11 +3932,6 @@ This is your link for group %@!</source>
<target>Проверьте предпочтения Вашего контакта.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<target>Пожалуйста, подтвердите, что настройки сети верны для этого устройства.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4244,11 +3989,6 @@ Error: %@</source>
<target>Возможно, хэш сертификата в адресе сервера неверный</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<target>Квантово-устойчивое E2EE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Сохранить последний черновик, вместе с вложениями.</target>
@@ -4384,16 +4124,6 @@ Error: %@</source>
<target>Доставка уведомлений</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<target>Сервер уведомлений</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<target>Квантово-устойчивое шифрование</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Оценить приложение</target>
@@ -4579,26 +4309,11 @@ Error: %@</source>
<target>Повторить запрос на соединение?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<target>Повторить загрузку</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<target>Повторить импорт</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<target>Повторить запрос на вступление?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<target>Повторить загрузку</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Ответить</target>
@@ -4699,11 +4414,6 @@ Error: %@</source>
<target>SMP серверы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<target>Более безопасные группы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Сохранить</target>
@@ -5069,11 +4779,6 @@ Error: %@</source>
<target>Установить код доступа</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<target>Установить пароль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Установите пароль</target>
@@ -5129,11 +4834,6 @@ Error: %@</source>
<target>Поделиться с контактами</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<target>Показать QR код</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Показать звонки в истории телефона</target>
@@ -5274,11 +4974,6 @@ Error: %@</source>
<target>Остановить SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<target>Остановить чат</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Остановите чат, чтобы разблокировать операции с архивом чата</target>
@@ -5319,11 +5014,6 @@ Error: %@</source>
<target>Прекратить делиться адресом?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<target>Остановка чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Продолжить</target>
@@ -5571,16 +5261,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Это действие нельзя отменить — Ваш профиль, контакты, сообщения и файлы будут безвозвратно утеряны.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<target>Чат защищен end-to-end шифрованием.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<target>Чат защищен квантово-устойчивым end-to-end шифрованием.</target>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Имя этого устройства</target>
@@ -5875,21 +5555,11 @@ To connect, please ask your contact to create another connection link and check
<target>Обновить и открыть чат</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<target>Ошибка загрузки</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Загрузка файла</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<target>Загрузка архива</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Использовать .onion хосты</target>
@@ -5940,11 +5610,6 @@ To connect, please ask your contact to create another connection link and check
<target>Использовать сервер</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<target>Используйте приложение во время звонка.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Профиль чата</target>
@@ -5980,16 +5645,6 @@ To connect, please ask your contact to create another connection link and check
<target>Проверять соединения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<target>Проверка пароля базы данных</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<target>Проверить пароль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Подтвердить код безопасности</target>
@@ -6080,11 +5735,6 @@ To connect, please ask your contact to create another connection link and check
<target>Ожидание видео</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<target>Внимание: запуск чата на нескольких устройствах не поддерживается и приведет к сбоям доставки сообщений.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Предупреждение: Вы можете потерять какие то данные!</target>
@@ -6105,11 +5755,6 @@ To connect, please ask your contact to create another connection link and check
<target>Приветственное сообщение</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<target>Приветственное сообщение слишком длинное</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Новые функции</target>
@@ -6165,11 +5810,6 @@ To connect, please ask your contact to create another connection link and check
<target>Вы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<target>Вы **не должны** использовать одну и ту же базу данных на двух устройствах.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Вы приняли приглашение соединиться</target>
@@ -6257,11 +5897,6 @@ Repeat join request?</source>
<target>Вы можете включить их позже в настройках Конфиденциальности.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<target>Вы можете попробовать еще раз.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Вы можете скрыть профиль или выключить уведомления - потяните его вправо.</target>
@@ -6656,7 +6291,7 @@ SimpleX серверы не могут получить доступ к Ваше
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<target>заблокировано</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6666,7 +6301,7 @@ SimpleX серверы не могут получить доступ к Ваше
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<target>заблокировано администратором</target>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -7096,7 +6731,7 @@ SimpleX серверы не могут получить доступ к Ваше
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>удалено %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -7165,11 +6800,6 @@ SimpleX серверы не могут получить доступ к Ваше
<target>peer-to-peer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<target>квантово-устойчивое e2e шифрование</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>получен ответ…</target>
@@ -7245,11 +6875,6 @@ SimpleX серверы не могут получить доступ к Ваше
<target>установлена новая картинка профиля</target>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<target>стандартное end-to-end шифрование</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>инициализация…</target>
@@ -101,10 +101,6 @@
<source>%@ connected</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ เชื่อมต่อสำเร็จ!</target>
@@ -125,10 +121,6 @@
<target>%@ เซิร์ฟเวอร์</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ อยากเชื่อมต่อ!</target>
@@ -332,10 +324,6 @@
<target>**ส่วนตัวที่สุด**: ไม่ใช้เซิร์ฟเวอร์การแจ้งเตือนของ SimpleX Chat ตรวจสอบข้อความเป็นระยะในพื้นหลัง (ขึ้นอยู่กับความถี่ที่คุณใช้แอป)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**โปรดทราบ**: คุณจะไม่สามารถกู้คืนหรือเปลี่ยนรหัสผ่านได้หากคุณทำรหัสผ่านหาย</target>
@@ -351,10 +339,6 @@
<target>**คำเตือน**: การแจ้งเตือนแบบพุชทันทีจำเป็นต้องบันทึกรหัสผ่านไว้ใน Keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>การโทรเสียงแบบ **encrypted จากต้นจนจบ**</target>
@@ -601,10 +585,6 @@
<target>การเปลี่ยนแปลงที่อยู่จะถูกยกเลิก จะใช้ที่อยู่เก่าของผู้รับ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>ผู้ดูแลระบบสามารถสร้างลิงก์เพื่อเข้าร่วมกลุ่มต่างๆได้</target>
@@ -658,10 +638,6 @@
<target>ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่. ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่ การอัปเดตโปรไฟล์จะถูกส่งไปยังผู้ติดต่อของคุณ.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>อนุญาต</target>
@@ -785,10 +761,6 @@
<target>รุ่นแอป: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<note>No comment provided by engineer.</note>
@@ -823,18 +795,6 @@
<target>รูปร่างลักษณะ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>แนบ</target>
@@ -1014,10 +974,6 @@
<target>ยกเลิก</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>ไม่สามารถเข้าถึง keychain เพื่อบันทึกรหัสผ่านฐานข้อมูล</target>
@@ -1118,10 +1074,6 @@
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
<source>Chat preferences</source>
<target>ค่ากําหนดในการแชท</target>
@@ -1142,10 +1094,6 @@
<target>อินเทอร์เฟซภาษาจีนและสเปน</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>เลือกไฟล์</target>
@@ -1215,10 +1163,6 @@
<target>ยืนยันการอัพเกรดฐานข้อมูล</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>ยืนยันรหัสผ่านใหม่…</target>
@@ -1229,14 +1173,6 @@
<target>ยืนยันรหัสผ่าน</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>เชื่อมต่อ</target>
@@ -1474,10 +1410,6 @@ This is your own one-time link!</source>
<target>สร้างเมื่อ %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<note>No comment provided by engineer.</note>
@@ -1693,10 +1625,6 @@ This cannot be undone!</source>
<target>ลบฐานข้อมูล</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>ลบไฟล์</target>
@@ -1979,23 +1907,11 @@ This cannot be undone!</source>
<target>ปรับลดรุ่นและเปิดแชท</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>ดาวน์โหลดไฟล์</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>ชื่อที่แสดงซ้ำ!</target>
@@ -2050,10 +1966,6 @@ This cannot be undone!</source>
<target>เปิดใช้งานสําหรับทุกคน</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>เปิดใช้งานการแจ้งเตือนทันที?</target>
@@ -2163,10 +2075,6 @@ This cannot be undone!</source>
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>ใส่รหัสผ่าน</target>
@@ -2225,10 +2133,6 @@ This cannot be undone!</source>
<target>เกิดข้อผิดพลาดในการเพิ่มสมาชิก</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>เกิดข้อผิดพลาดในการเปลี่ยนที่อยู่</target>
@@ -2316,10 +2220,6 @@ This cannot be undone!</source>
<target>เกิดข้อผิดพลาดในการลบโปรไฟล์ผู้ใช้</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>เกิดข้อผิดพลาดในการเปิดใช้ใบเสร็จการจัดส่ง!</target>
@@ -2394,10 +2294,6 @@ This cannot be undone!</source>
<target>เกิดข้อผิดพลาดในการบันทึกรหัสผ่านไปยัง keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>เกิดข้อผิดพลาดในการบันทึกรหัสผ่านผู้ใช้</target>
@@ -2466,14 +2362,6 @@ This cannot be undone!</source>
<target>เกิดข้อผิดพลาดในการอัปเดตข้อมูลส่วนตัวของผู้ใช้</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>ผิดพลาด: </target>
@@ -2523,10 +2411,6 @@ This cannot be undone!</source>
<target>ที่เก็บถาวรฐานข้อมูลที่ส่งออก</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>กำลังส่งออกที่เก็บถาวรฐานข้อมูล…</target>
@@ -2596,14 +2480,6 @@ This cannot be undone!</source>
<target>กรองแชทที่ยังไม่อ่านและแชทโปรด</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>ในที่สุดเราก็มีแล้ว! 🚀</target>
@@ -2889,10 +2765,6 @@ This cannot be undone!</source>
<target>วิธีใช้เซิร์ฟเวอร์ของคุณ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>เซิร์ฟเวอร์ ICE (หนึ่งเครื่องต่อสาย)</target>
@@ -2958,14 +2830,6 @@ This cannot be undone!</source>
<target>นำเข้าฐานข้อมูล</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<note>No comment provided by engineer.</note>
@@ -2980,10 +2844,6 @@ This cannot be undone!</source>
<target>ปรับปรุงการกําหนดค่าเซิร์ฟเวอร์แล้ว</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>ในการตอบกลับถึง</target>
@@ -3090,10 +2950,6 @@ This cannot be undone!</source>
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
@@ -3448,10 +3304,6 @@ This is your link for group %@!</source>
<target>ข้อความ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>ข้อความ</target>
@@ -3466,47 +3318,11 @@ This is your link for group %@!</source>
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>กำลังย้ายข้อมูลที่เก็บถาวรของฐานข้อมูล…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>ข้อผิดพลาดในการย้ายข้อมูล:</target>
@@ -3858,10 +3674,6 @@ This is your link for group %@!</source>
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>เปิดโปรไฟล์ผู้ใช้</target>
@@ -3876,18 +3688,10 @@ This is your link for group %@!</source>
<source>Opening app…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<note>No comment provided by engineer.</note>
@@ -3968,10 +3772,6 @@ This is your link for group %@!</source>
<target>ข้อผิดพลาดในการถอดรหัสอย่างถาวร</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>โปรดขอให้ผู้ติดต่อของคุณเปิดใช้งานการส่งข้อความเสียง</target>
@@ -3992,10 +3792,6 @@ This is your link for group %@!</source>
<target>โปรดตรวจสอบความต้องการของคุณและการตั้งค่าผู้ติดต่อ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4051,10 +3847,6 @@ Error: %@</source>
<target>อาจเป็นไปได้ว่าลายนิ้วมือของ certificate ในที่อยู่เซิร์ฟเวอร์ไม่ถูกต้อง</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>เก็บข้อความที่ร่างไว้ล่าสุดพร้อมไฟล์แนบ</target>
@@ -4187,14 +3979,6 @@ Error: %@</source>
<target>การแจ้งเตือนแบบทันที</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>ให้คะแนนแอป</target>
@@ -4375,22 +4159,10 @@ Error: %@</source>
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>ตอบ</target>
@@ -4490,10 +4262,6 @@ Error: %@</source>
<target>เซิร์ฟเวอร์ SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>บันทึก</target>
@@ -4850,10 +4618,6 @@ Error: %@</source>
<target>ตั้งรหัสผ่าน</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>ตั้งรหัสผ่านเพื่อส่งออก</target>
@@ -4908,10 +4672,6 @@ Error: %@</source>
<target>แชร์กับผู้ติดต่อ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>แสดงการโทรในประวัติการโทร</target>
@@ -5048,10 +4808,6 @@ Error: %@</source>
<target>หยุด SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>หยุดการแชทเพื่อเปิดใช้งานการดำเนินการกับฐานข้อมูล</target>
@@ -5092,10 +4848,6 @@ Error: %@</source>
<target>หยุดแชร์ที่อยู่ไหม?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>ส่ง</target>
@@ -5338,14 +5090,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>การดำเนินการนี้ไม่สามารถยกเลิกได้ - โปรไฟล์ ผู้ติดต่อ ข้อความ และไฟล์ของคุณจะสูญหายไปอย่างถาวร</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
@@ -5624,19 +5368,11 @@ To connect, please ask your contact to create another connection link and check
<target>อัปเกรดและเปิดการแชท</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>อัปโหลดไฟล์</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>ใช้โฮสต์ .onion</target>
@@ -5683,10 +5419,6 @@ To connect, please ask your contact to create another connection link and check
<target>ใช้เซิร์ฟเวอร์</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>โปรไฟล์ผู้ใช้</target>
@@ -5719,14 +5451,6 @@ To connect, please ask your contact to create another connection link and check
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>ตรวจสอบรหัสความปลอดภัย</target>
@@ -5814,10 +5538,6 @@ To connect, please ask your contact to create another connection link and check
<target>กําลังรอวิดีโอ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>คำเตือน: คุณอาจสูญเสียข้อมูลบางส่วน!</target>
@@ -5838,10 +5558,6 @@ To connect, please ask your contact to create another connection link and check
<target>ข้อความต้อนรับ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>มีอะไรใหม่</target>
@@ -5895,10 +5611,6 @@ To connect, please ask your contact to create another connection link and check
<target>คุณ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>คุณยอมรับการเชื่อมต่อ</target>
@@ -5978,10 +5690,6 @@ Repeat join request?</source>
<target>คุณสามารถเปิดใช้งานได้ในภายหลังผ่านการตั้งค่าความเป็นส่วนตัวและความปลอดภัยของแอป</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>คุณสามารถซ่อนหรือปิดเสียงโปรไฟล์ผู้ใช้ - ปัดไปทางขวา</target>
@@ -6363,7 +6071,7 @@ SimpleX servers cannot see your profile.</source>
</trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6371,7 +6079,7 @@ SimpleX servers cannot see your profile.</source>
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6795,7 +6503,7 @@ SimpleX servers cannot see your profile.</source>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>กลั่นกรองโดย %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -6864,10 +6572,6 @@ SimpleX servers cannot see your profile.</source>
<target>เพื่อนต่อเพื่อน</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>ได้รับคำตอบ…</target>
@@ -6938,10 +6642,6 @@ SimpleX servers cannot see your profile.</source>
<source>set new profile picture</source>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>กำลังเริ่มต้น…</target>
File diff suppressed because it is too large Load Diff
@@ -107,10 +107,6 @@
<target>%@ підключено</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ downloaded" xml:space="preserve">
<source>%@ downloaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ підключено!</target>
@@ -131,10 +127,6 @@
<target>%@ сервери</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ uploaded" xml:space="preserve">
<source>%@ uploaded</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<source>%@ wants to connect!</source>
<target>%@ хоче підключитися!</target>
@@ -227,7 +219,6 @@
</trans-unit>
<trans-unit id="%lld messages blocked by admin" xml:space="preserve">
<source>%lld messages blocked by admin</source>
<target>%lld повідомлень заблоковано адміністратором</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
@@ -327,7 +318,6 @@
</trans-unit>
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
<target>**Додати контакт**: створити нове посилання-запрошення або підключитися за отриманим посиланням.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
@@ -337,7 +327,6 @@
</trans-unit>
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
<source>**Create group**: to create a new group.</source>
<target>**Створити групу**: створити нову групу.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
@@ -350,10 +339,6 @@
<target>**Найбільш приватний**: не використовуйте сервер сповіщень SimpleX Chat, періодично перевіряйте повідомлення у фоновому режимі (залежить від того, як часто ви користуєтесь додатком).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
<source>**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve">
<source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source>
<target>**Зверніть увагу: ви НЕ зможете відновити або змінити пароль, якщо втратите його.</target>
@@ -369,10 +354,6 @@
<target>**Попередження**: Для отримання миттєвих пуш-сповіщень потрібна парольна фраза, збережена у брелоку.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Warning**: the archive will be removed." xml:space="preserve">
<source>**Warning**: the archive will be removed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e encrypted** аудіодзвінок</target>
@@ -586,7 +567,6 @@
</trans-unit>
<trans-unit id="Add contact" xml:space="preserve">
<source>Add contact</source>
<target>Додати контакт</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add preset servers" xml:space="preserve">
@@ -629,10 +609,6 @@
<target>Зміна адреси буде скасована. Буде використано стару адресу отримання.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can block a member for all." xml:space="preserve">
<source>Admins can block a member for all.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Адміни можуть створювати посилання для приєднання до груп.</target>
@@ -665,7 +641,6 @@
</trans-unit>
<trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>All messages will be deleted - this cannot be undone!</source>
<target>Усі повідомлення будуть видалені - цю дію не можна скасувати!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve">
@@ -688,10 +663,6 @@
<target>Всі ваші контакти залишаться на зв'язку. Повідомлення про оновлення профілю буде надіслано вашим контактам.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
<source>Allow</source>
<target>Дозволити</target>
@@ -817,10 +788,6 @@
<target>Збірка програми: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App data migration" xml:space="preserve">
<source>App data migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
<source>App encrypts new local files (except videos).</source>
<target>Додаток шифрує нові локальні файли (крім відео).</target>
@@ -856,18 +823,6 @@
<target>Зовнішній вигляд</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Apply" xml:space="preserve">
<source>Apply</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archive and upload" xml:space="preserve">
<source>Archive and upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Archiving database" xml:space="preserve">
<source>Archiving database</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
<source>Attach</source>
<target>Прикріпити</target>
@@ -965,7 +920,6 @@
</trans-unit>
<trans-unit id="Block for all" xml:space="preserve">
<source>Block for all</source>
<target>Заблокувати для всіх</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
@@ -980,7 +934,6 @@
</trans-unit>
<trans-unit id="Block member for all?" xml:space="preserve">
<source>Block member for all?</source>
<target>Заблокувати учасника для всіх?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
@@ -990,7 +943,6 @@
</trans-unit>
<trans-unit id="Blocked by admin" xml:space="preserve">
<source>Blocked by admin</source>
<target>Заблокований адміністратором</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
@@ -1040,7 +992,6 @@
</trans-unit>
<trans-unit id="Camera not available" xml:space="preserve">
<source>Camera not available</source>
<target>Камера недоступна</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't invite contact!" xml:space="preserve">
@@ -1058,10 +1009,6 @@
<target>Скасувати</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel migration" xml:space="preserve">
<source>Cancel migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<source>Cannot access keychain to save database password</source>
<target>Не вдається отримати доступ до зв'язки ключів для збереження пароля до бази даних</target>
@@ -1160,11 +1107,6 @@
</trans-unit>
<trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve">
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<target>Чат зупинено. Якщо ви вже використовували цю базу даних на іншому пристрої, перенесіть її назад перед запуском чату.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat migrated!" xml:space="preserve">
<source>Chat migrated!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
@@ -1187,10 +1129,6 @@
<target>Інтерфейс китайською та іспанською мовами</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose _Migrate from another device_ on the new device and scan QR code." xml:space="preserve">
<source>Choose _Migrate from another device_ on the new device and scan QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Choose file" xml:space="preserve">
<source>Choose file</source>
<target>Виберіть файл</target>
@@ -1260,10 +1198,6 @@
<target>Підтвердити оновлення бази даних</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm network settings" xml:space="preserve">
<source>Confirm network settings</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve">
<source>Confirm new passphrase…</source>
<target>Підтвердіть нову парольну фразу…</target>
@@ -1274,14 +1208,6 @@
<target>Підтвердити пароль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
<source>Confirm that you remember database passphrase to migrate it.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm upload" xml:space="preserve">
<source>Confirm upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve">
<source>Connect</source>
<target>Підключіться</target>
@@ -1531,10 +1457,6 @@ This is your own one-time link!</source>
<target>Створено %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating archive link" xml:space="preserve">
<source>Creating archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<note>No comment provided by engineer.</note>
@@ -1750,10 +1672,6 @@ This cannot be undone!</source>
<target>Видалити базу даних</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete database from this device" xml:space="preserve">
<source>Delete database from this device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete file" xml:space="preserve">
<source>Delete file</source>
<target>Видалити файл</target>
@@ -2037,23 +1955,11 @@ This cannot be undone!</source>
<target>Пониження та відкритий чат</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download failed" xml:space="preserve">
<source>Download failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Download file" xml:space="preserve">
<source>Download file</source>
<target>Завантажити файл</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Downloading archive" xml:space="preserve">
<source>Downloading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Downloading link details" xml:space="preserve">
<source>Downloading link details</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Дублююче ім'я користувача!</target>
@@ -2108,10 +2014,6 @@ This cannot be undone!</source>
<target>Увімкнути для всіх</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable in direct chats (BETA)!" xml:space="preserve">
<source>Enable in direct chats (BETA)!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<source>Enable instant notifications?</source>
<target>Увімкнути миттєві сповіщення?</target>
@@ -2221,10 +2123,6 @@ This cannot be undone!</source>
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase" xml:space="preserve">
<source>Enter passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source>
<target>Введіть пароль…</target>
@@ -2283,10 +2181,6 @@ This cannot be undone!</source>
<target>Помилка додавання користувача(ів)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error allowing contact PQ encryption" xml:space="preserve">
<source>Error allowing contact PQ encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Помилка зміни адреси</target>
@@ -2374,10 +2268,6 @@ This cannot be undone!</source>
<target>Помилка видалення профілю користувача</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error downloading the archive" xml:space="preserve">
<source>Error downloading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling delivery receipts!" xml:space="preserve">
<source>Error enabling delivery receipts!</source>
<target>Помилка активації підтвердження доставлення!</target>
@@ -2452,10 +2342,6 @@ This cannot be undone!</source>
<target>Помилка збереження пароля на keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving settings" xml:space="preserve">
<source>Error saving settings</source>
<note>when migrating</note>
</trans-unit>
<trans-unit id="Error saving user password" xml:space="preserve">
<source>Error saving user password</source>
<target>Помилка збереження пароля користувача</target>
@@ -2524,14 +2410,6 @@ This cannot be undone!</source>
<target>Помилка оновлення конфіденційності користувача</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error uploading the archive" xml:space="preserve">
<source>Error uploading the archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
<source>Error verifying passphrase:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error: " xml:space="preserve">
<source>Error: </source>
<target>Помилка: </target>
@@ -2581,10 +2459,6 @@ This cannot be undone!</source>
<target>Експортований архів бази даних.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exported file doesn't exist" xml:space="preserve">
<source>Exported file doesn't exist</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Exporting database archive…" xml:space="preserve">
<source>Exporting database archive…</source>
<target>Експорт архіву бази даних…</target>
@@ -2654,14 +2528,6 @@ This cannot be undone!</source>
<target>Фільтруйте непрочитані та улюблені чати.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration" xml:space="preserve">
<source>Finalize migration</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finalize migration on another device." xml:space="preserve">
<source>Finalize migration on another device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
<source>Finally, we have them! 🚀</source>
<target>Нарешті, вони у нас є! 🚀</target>
@@ -2947,10 +2813,6 @@ This cannot be undone!</source>
<target>Як користуватися вашими серверами</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Hungarian interface" xml:space="preserve">
<source>Hungarian interface</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="ICE servers (one per line)" xml:space="preserve">
<source>ICE servers (one per line)</source>
<target>Сервери ICE (по одному на лінію)</target>
@@ -3016,14 +2878,6 @@ This cannot be undone!</source>
<target>Імпорт бази даних</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Import failed" xml:space="preserve">
<source>Import failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Importing archive" xml:space="preserve">
<source>Importing archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Improved message delivery" xml:space="preserve">
<source>Improved message delivery</source>
<note>No comment provided by engineer.</note>
@@ -3038,10 +2892,6 @@ This cannot be undone!</source>
<target>Покращена конфігурація сервера</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In order to continue, chat should be stopped." xml:space="preserve">
<source>In order to continue, chat should be stopped.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="In reply to" xml:space="preserve">
<source>In reply to</source>
<target>У відповідь на</target>
@@ -3149,10 +2999,6 @@ This cannot be undone!</source>
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid migration confirmation" xml:space="preserve">
<source>Invalid migration confirmation</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
@@ -3508,10 +3354,6 @@ This is your link for group %@!</source>
<target>Текст повідомлення</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message too large" xml:space="preserve">
<source>Message too large</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages" xml:space="preserve">
<source>Messages</source>
<target>Повідомлення</target>
@@ -3526,47 +3368,11 @@ This is your link for group %@!</source>
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate device" xml:space="preserve">
<source>Migrate device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate from another device" xml:space="preserve">
<source>Migrate from another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate here" xml:space="preserve">
<source>Migrate here</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device" xml:space="preserve">
<source>Migrate to another device</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrate to another device via QR code." xml:space="preserve">
<source>Migrate to another device via QR code.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating" xml:space="preserve">
<source>Migrating</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source>
<target>Перенесення архіву бази даних…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration complete" xml:space="preserve">
<source>Migration complete</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migration error:" xml:space="preserve">
<source>Migration error:</source>
<target>Помилка міграції:</target>
@@ -3920,10 +3726,6 @@ This is your link for group %@!</source>
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open migration to another device" xml:space="preserve">
<source>Open migration to another device</source>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source>
<target>Відкрити профілі користувачів</target>
@@ -3938,18 +3740,10 @@ This is your link for group %@!</source>
<source>Opening app…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or paste archive link" xml:space="preserve">
<source>Or paste archive link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or securely share this file link" xml:space="preserve">
<source>Or securely share this file link</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<note>No comment provided by engineer.</note>
@@ -4030,10 +3824,6 @@ This is your link for group %@!</source>
<target>Постійна помилка розшифрування</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Picture-in-picture calls" xml:space="preserve">
<source>Picture-in-picture calls</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
<source>Please ask your contact to enable sending voice messages.</source>
<target>Будь ласка, попросіть вашого контакту увімкнути відправку голосових повідомлень.</target>
@@ -4054,10 +3844,6 @@ This is your link for group %@!</source>
<target>Будь ласка, перевірте свої та контактні налаштування.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please confirm that network settings are correct for this device." xml:space="preserve">
<source>Please confirm that network settings are correct for this device.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
@@ -4113,10 +3899,6 @@ Error: %@</source>
<target>Можливо, в адресі сервера неправильно вказано відбиток сертифіката</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Post-quantum E2EE" xml:space="preserve">
<source>Post-quantum E2EE</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Зберегти чернетку останнього повідомлення з вкладеннями.</target>
@@ -4249,14 +4031,6 @@ Error: %@</source>
<target>Push-повідомлення</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Push server" xml:space="preserve">
<source>Push server</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Quantum resistant encryption" xml:space="preserve">
<source>Quantum resistant encryption</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Rate the app" xml:space="preserve">
<source>Rate the app</source>
<target>Оцініть додаток</target>
@@ -4439,22 +4213,10 @@ Error: %@</source>
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat download" xml:space="preserve">
<source>Repeat download</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat import" xml:space="preserve">
<source>Repeat import</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat upload" xml:space="preserve">
<source>Repeat upload</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve">
<source>Reply</source>
<target>Відповісти</target>
@@ -4554,10 +4316,6 @@ Error: %@</source>
<target>Сервери SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Safer groups" xml:space="preserve">
<source>Safer groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Зберегти</target>
@@ -4916,10 +4674,6 @@ Error: %@</source>
<target>Встановити пароль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase" xml:space="preserve">
<source>Set passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
<source>Set passphrase to export</source>
<target>Встановити ключову фразу для експорту</target>
@@ -4974,10 +4728,6 @@ Error: %@</source>
<target>Поділіться з контактами</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show QR code" xml:space="preserve">
<source>Show QR code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Show calls in phone history" xml:space="preserve">
<source>Show calls in phone history</source>
<target>Показувати дзвінки в історії дзвінків</target>
@@ -5116,10 +4866,6 @@ Error: %@</source>
<target>Зупинити SimpleX</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Stop chat" xml:space="preserve">
<source>Stop chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
<source>Stop chat to enable database actions</source>
<target>Зупиніть чат, щоб увімкнути дії з базою даних</target>
@@ -5160,10 +4906,6 @@ Error: %@</source>
<target>Припинити ділитися адресою?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Stopping chat" xml:space="preserve">
<source>Stopping chat</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Надіслати</target>
@@ -5406,14 +5148,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Цю дію неможливо скасувати - ваш профіль, контакти, повідомлення та файли будуть безповоротно втрачені.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This chat is protected by end-to-end encryption." xml:space="preserve">
<source>This chat is protected by end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This chat is protected by quantum resistant end-to-end encryption." xml:space="preserve">
<source>This chat is protected by quantum resistant end-to-end encryption.</source>
<note>E2EE info chat item</note>
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
@@ -5693,19 +5427,11 @@ To connect, please ask your contact to create another connection link and check
<target>Оновлення та відкритий чат</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload failed" xml:space="preserve">
<source>Upload failed</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Upload file" xml:space="preserve">
<source>Upload file</source>
<target>Завантажити файл</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Uploading archive" xml:space="preserve">
<source>Uploading archive</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use .onion hosts" xml:space="preserve">
<source>Use .onion hosts</source>
<target>Використовуйте хости .onion</target>
@@ -5754,10 +5480,6 @@ To connect, please ask your contact to create another connection link and check
<target>Використовувати сервер</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use the app while in the call." xml:space="preserve">
<source>Use the app while in the call.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Профіль користувача</target>
@@ -5790,14 +5512,6 @@ To connect, please ask your contact to create another connection link and check
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify database passphrase" xml:space="preserve">
<source>Verify database passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify passphrase" xml:space="preserve">
<source>Verify passphrase</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source>
<target>Підтвердіть код безпеки</target>
@@ -5885,10 +5599,6 @@ To connect, please ask your contact to create another connection link and check
<target>Чекаємо на відео</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: starting chat on multiple devices is not supported and will cause message delivery failures" xml:space="preserve">
<source>Warning: starting chat on multiple devices is not supported and will cause message delivery failures</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Warning: you may lose some data!" xml:space="preserve">
<source>Warning: you may lose some data!</source>
<target>Попередження: ви можете втратити деякі дані!</target>
@@ -5909,10 +5619,6 @@ To connect, please ask your contact to create another connection link and check
<target>Вітальне повідомлення</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Welcome message is too long" xml:space="preserve">
<source>Welcome message is too long</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="What's new" xml:space="preserve">
<source>What's new</source>
<target>Що нового</target>
@@ -5966,10 +5672,6 @@ To connect, please ask your contact to create another connection link and check
<target>Ти</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
<source>You **must not** use the same database on two devices.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
<source>You accepted connection</source>
<target>Ви прийняли підключення</target>
@@ -6049,10 +5751,6 @@ Repeat join request?</source>
<target>Ви можете увімкнути їх пізніше в налаштуваннях конфіденційності та безпеки програми.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can give another try." xml:space="preserve">
<source>You can give another try.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Ви можете приховати або вимкнути звук профілю користувача - проведіть по ньому вправо.</target>
@@ -6436,7 +6134,7 @@ SimpleX servers cannot see your profile.</source>
</trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="blocked %@" xml:space="preserve">
<source>blocked %@</source>
@@ -6444,7 +6142,7 @@ SimpleX servers cannot see your profile.</source>
</trans-unit>
<trans-unit id="blocked by admin" xml:space="preserve">
<source>blocked by admin</source>
<note>marked deleted chat item preview text</note>
<note>blocked chat item</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve">
<source>bold</source>
@@ -6870,7 +6568,7 @@ SimpleX servers cannot see your profile.</source>
<trans-unit id="moderated by %@" xml:space="preserve">
<source>moderated by %@</source>
<target>модерується %@</target>
<note>marked deleted chat item preview text</note>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve">
<source>months</source>
@@ -6939,10 +6637,6 @@ SimpleX servers cannot see your profile.</source>
<target>одноранговий</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="quantum resistant e2e encryption" xml:space="preserve">
<source>quantum resistant e2e encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="received answer…" xml:space="preserve">
<source>received answer…</source>
<target>отримали відповідь…</target>
@@ -7013,10 +6707,6 @@ SimpleX servers cannot see your profile.</source>
<source>set new profile picture</source>
<note>profile update event chat item</note>
</trans-unit>
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
<source>standard end-to-end encryption</source>
<note>chat item text</note>
</trans-unit>
<trans-unit id="starting…" xml:space="preserve">
<source>starting…</source>
<target>починаючи…</target>
File diff suppressed because it is too large Load Diff
@@ -453,6 +453,7 @@ var receiverStarted = false
let startLock = DispatchSemaphore(value: 1)
let suspendLock = DispatchSemaphore(value: 1)
var networkConfig: NetCfg = getNetCfg()
let xftpConfig: XFTPFileConfig? = getXFTPCfg()
// startChat uses semaphore startLock to ensure that only one didReceive thread can start chat controller
// Subsequent calls to didReceive will be waiting on semaphore and won't start chat again, as it will be .active
@@ -498,6 +499,7 @@ func doStartChat() -> DBMigrationResult? {
try setNetworkConfig(networkConfig)
try apiSetTempFolder(tempFolder: getTempFilesDirectory().path)
try apiSetFilesFolder(filesFolder: getAppFilesDirectory().path)
try setXFTPConfig(xftpConfig)
try apiSetEncryptLocalFiles(privacyEncryptLocalFilesGroupDefault.get())
// prevent suspension while starting chat
suspendLock.wait()
@@ -640,9 +642,7 @@ func receivedMsgNtf(_ res: ChatResponse) async -> (String, NSENotification)? {
cleanupDirectFile(aChatItem)
return nil
case let .sndFileRcvCancelled(_, aChatItem, _):
if let aChatItem = aChatItem {
cleanupDirectFile(aChatItem)
}
cleanupDirectFile(aChatItem)
return nil
case let .sndFileCompleteXFTP(_, aChatItem, _):
cleanupFile(aChatItem)
@@ -733,6 +733,12 @@ func apiSetFilesFolder(filesFolder: String) throws {
throw r
}
func setXFTPConfig(_ cfg: XFTPFileConfig?) throws {
let r = sendSimpleXCmd(.apiSetXFTPConfig(config: cfg))
if case .cmdOk = r { return }
throw r
}
func apiSetEncryptLocalFiles(_ enable: Bool) throws {
let r = sendSimpleXCmd(.apiSetEncryptLocalFiles(enable: enable))
if case .cmdOk = r { return }
@@ -1,9 +0,0 @@
/* Bundle display name */
"CFBundleDisplayName" = "SimpleX NSE";
/* Bundle name */
"CFBundleName" = "SimpleX NSE";
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. Minden jog fenntartva.";
+32 -59
View File
@@ -36,11 +36,6 @@
5C35CFC827B2782E00FB6C6D /* BGManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CFC727B2782E00FB6C6D /* BGManager.swift */; };
5C35CFCB27B2E91D00FB6C6D /* NtfManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CFCA27B2E91D00FB6C6D /* NtfManager.swift */; };
5C36027327F47AD5009F19D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C36027227F47AD5009F19D9 /* AppDelegate.swift */; };
5C371E742BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C371E6F2BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv-ghc9.6.3.a */; };
5C371E752BACC5D600100AD3 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C371E702BACC5D600100AD3 /* libgmpxx.a */; };
5C371E762BACC5D600100AD3 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C371E712BACC5D600100AD3 /* libffi.a */; };
5C371E772BACC5D600100AD3 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C371E722BACC5D600100AD3 /* libgmp.a */; };
5C371E782BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C371E732BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv.a */; };
5C3A88CE27DF50170060F1C2 /* DetermineWidth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3A88CD27DF50170060F1C2 /* DetermineWidth.swift */; };
5C3A88D127DF57800060F1C2 /* FramedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3A88D027DF57800060F1C2 /* FramedItemView.swift */; };
5C3CCFCC2AE6BD3100C3F0C3 /* ConnectDesktopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3CCFCB2AE6BD3100C3F0C3 /* ConnectDesktopView.swift */; };
@@ -66,6 +61,11 @@
5C7505A527B679EE00BE3227 /* NavLinkPlain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7505A427B679EE00BE3227 /* NavLinkPlain.swift */; };
5C7505A827B6D34800BE3227 /* ChatInfoToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7505A727B6D34800BE3227 /* ChatInfoToolbar.swift */; };
5C764E89279CBCB3000C6508 /* ChatModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C764E88279CBCB3000C6508 /* ChatModel.swift */; };
5C83A1AD2B5EF67D00AE0A4A /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C83A1A82B5EF67D00AE0A4A /* libgmp.a */; };
5C83A1AE2B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C83A1A92B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3-ghc9.6.3.a */; };
5C83A1AF2B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C83A1AA2B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3.a */; };
5C83A1B02B5EF67D00AE0A4A /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C83A1AB2B5EF67D00AE0A4A /* libffi.a */; };
5C83A1B12B5EF67D00AE0A4A /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C83A1AC2B5EF67D00AE0A4A /* libgmpxx.a */; };
5C8F01CD27A6F0D8007D2C8D /* CodeScanner in Frameworks */ = {isa = PBXBuildFile; productRef = 5C8F01CC27A6F0D8007D2C8D /* CodeScanner */; };
5C93292F29239A170090FFF9 /* ProtocolServersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C93292E29239A170090FFF9 /* ProtocolServersView.swift */; };
5C93293129239BED0090FFF9 /* ProtocolServerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C93293029239BED0090FFF9 /* ProtocolServerView.swift */; };
@@ -185,9 +185,6 @@
64E972072881BB22008DBC02 /* CIGroupInvitationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64E972062881BB22008DBC02 /* CIGroupInvitationView.swift */; };
64F1CC3B28B39D8600CD1FB1 /* IncognitoHelp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F1CC3A28B39D8600CD1FB1 /* IncognitoHelp.swift */; };
8C05382E2B39887E006436DC /* VideoUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C05382D2B39887E006436DC /* VideoUtils.swift */; };
8C69FE7D2B8C7D2700267E38 /* AppSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C69FE7C2B8C7D2700267E38 /* AppSettings.swift */; };
8C7D949A2B88952700B7B9E1 /* MigrateToDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C7D94992B88952700B7B9E1 /* MigrateToDevice.swift */; };
8C7DF3202B7CDB0A00C886D0 /* MigrateFromDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C7DF31F2B7CDB0A00C886D0 /* MigrateFromDevice.swift */; };
D7197A1829AE89660055C05A /* WebRTC in Frameworks */ = {isa = PBXBuildFile; productRef = D7197A1729AE89660055C05A /* WebRTC */; };
D72A9088294BD7A70047C86D /* NativeTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A9087294BD7A70047C86D /* NativeTextEditor.swift */; };
D741547829AF89AF0022400A /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547729AF89AF0022400A /* StoreKit.framework */; };
@@ -288,14 +285,6 @@
5C35CFC727B2782E00FB6C6D /* BGManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BGManager.swift; sourceTree = "<group>"; };
5C35CFCA27B2E91D00FB6C6D /* NtfManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NtfManager.swift; sourceTree = "<group>"; };
5C36027227F47AD5009F19D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
5C371E4E2BA9AAA200100AD3 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
5C371E4F2BA9AB6400100AD3 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = "hu.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = "<group>"; };
5C371E502BA9AB6400100AD3 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist.strings; sourceTree = "<group>"; };
5C371E6F2BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv-ghc9.6.3.a"; sourceTree = "<group>"; };
5C371E702BACC5D600100AD3 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5C371E712BACC5D600100AD3 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5C371E722BACC5D600100AD3 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5C371E732BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv.a"; sourceTree = "<group>"; };
5C3A88CD27DF50170060F1C2 /* DetermineWidth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetermineWidth.swift; sourceTree = "<group>"; };
5C3A88D027DF57800060F1C2 /* FramedItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FramedItemView.swift; sourceTree = "<group>"; };
5C3CCFCB2AE6BD3100C3F0C3 /* ConnectDesktopView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectDesktopView.swift; sourceTree = "<group>"; };
@@ -336,6 +325,11 @@
5C7505A427B679EE00BE3227 /* NavLinkPlain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavLinkPlain.swift; sourceTree = "<group>"; };
5C7505A727B6D34800BE3227 /* ChatInfoToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatInfoToolbar.swift; sourceTree = "<group>"; };
5C764E88279CBCB3000C6508 /* ChatModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatModel.swift; sourceTree = "<group>"; };
5C83A1A82B5EF67D00AE0A4A /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5C83A1A92B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3-ghc9.6.3.a"; sourceTree = "<group>"; };
5C83A1AA2B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3.a"; sourceTree = "<group>"; };
5C83A1AB2B5EF67D00AE0A4A /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5C83A1AC2B5EF67D00AE0A4A /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5C84FE9129A216C800D95B1A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
5C84FE9329A2179C00D95B1A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = "nl.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = "<group>"; };
5C84FE9429A2179C00D95B1A /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@@ -479,9 +473,6 @@
64E972062881BB22008DBC02 /* CIGroupInvitationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIGroupInvitationView.swift; sourceTree = "<group>"; };
64F1CC3A28B39D8600CD1FB1 /* IncognitoHelp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncognitoHelp.swift; sourceTree = "<group>"; };
8C05382D2B39887E006436DC /* VideoUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoUtils.swift; sourceTree = "<group>"; };
8C69FE7C2B8C7D2700267E38 /* AppSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettings.swift; sourceTree = "<group>"; };
8C7D94992B88952700B7B9E1 /* MigrateToDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrateToDevice.swift; sourceTree = "<group>"; };
8C7DF31F2B7CDB0A00C886D0 /* MigrateFromDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrateFromDevice.swift; sourceTree = "<group>"; };
D72A9087294BD7A70047C86D /* NativeTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeTextEditor.swift; sourceTree = "<group>"; };
D741547729AF89AF0022400A /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; };
D741547929AF90B00022400A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/PushKit.framework; sourceTree = DEVELOPER_DIR; };
@@ -523,13 +514,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5C371E752BACC5D600100AD3 /* libgmpxx.a in Frameworks */,
5C371E742BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv-ghc9.6.3.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
5C371E782BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv.a in Frameworks */,
5C371E762BACC5D600100AD3 /* libffi.a in Frameworks */,
5C371E772BACC5D600100AD3 /* libgmp.a in Frameworks */,
5C83A1B02B5EF67D00AE0A4A /* libffi.a in Frameworks */,
5C83A1AD2B5EF67D00AE0A4A /* libgmp.a in Frameworks */,
5C83A1AE2B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3-ghc9.6.3.a in Frameworks */,
5C83A1AF2B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
5C83A1B12B5EF67D00AE0A4A /* libgmpxx.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -562,7 +553,6 @@
5CB924DD27A8622200ACCCDD /* NewChat */,
5CFA59C22860B04D00863A68 /* Database */,
5CB634AB29E46CDB0066AD6B /* LocalAuth */,
8C7D94982B8894D300B7B9E1 /* Migration */,
5CA8D01B2AD9B076001FD661 /* RemoteAccess */,
5CB924DF27A8678B00ACCCDD /* UserSettings */,
5C2E261127A30FEA00F70299 /* TerminalView.swift */,
@@ -592,11 +582,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
5C371E712BACC5D600100AD3 /* libffi.a */,
5C371E722BACC5D600100AD3 /* libgmp.a */,
5C371E702BACC5D600100AD3 /* libgmpxx.a */,
5C371E6F2BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv-ghc9.6.3.a */,
5C371E732BACC5D600100AD3 /* libHSsimplex-chat-5.6.0.4-E0iWSIg8fcR48og4na41Dv.a */,
5C83A1AB2B5EF67D00AE0A4A /* libffi.a */,
5C83A1A82B5EF67D00AE0A4A /* libgmp.a */,
5C83A1AC2B5EF67D00AE0A4A /* libgmpxx.a */,
5C83A1A92B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3-ghc9.6.3.a */,
5C83A1AA2B5EF67D00AE0A4A /* libHSsimplex-chat-5.5.0.4-HTW6wkBBAjO2GDtnvnI9O3.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -776,7 +766,6 @@
64D0C2BF29F9688300B38D5F /* UserAddressView.swift */,
64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */,
5CEBD7472A5F115D00665FE2 /* SetDeliveryReceiptsView.swift */,
8C69FE7C2B8C7D2700267E38 /* AppSettings.swift */,
);
path = UserSettings;
sourceTree = "<group>";
@@ -904,15 +893,6 @@
path = Group;
sourceTree = "<group>";
};
8C7D94982B8894D300B7B9E1 /* Migration */ = {
isa = PBXGroup;
children = (
8C7DF31F2B7CDB0A00C886D0 /* MigrateFromDevice.swift */,
8C7D94992B88952700B7B9E1 /* MigrateToDevice.swift */,
);
path = Migration;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
@@ -1063,7 +1043,6 @@
uk,
bg,
tr,
hu,
);
mainGroup = 5CA059BD279559F40002BEB4;
packageReferences = (
@@ -1145,7 +1124,6 @@
5CBD285A295711D700EC2CF4 /* ImageUtils.swift in Sources */,
6419EC562AB8BC8B004A607A /* ContextInvitingContactMemberView.swift in Sources */,
5CE4407927ADB701007B033A /* EmojiItemView.swift in Sources */,
8C7D949A2B88952700B7B9E1 /* MigrateToDevice.swift in Sources */,
5C3F1D562842B68D00EC8A82 /* IntegrityErrorItemView.swift in Sources */,
5C029EAA283942EA004A9677 /* CallController.swift in Sources */,
5CBE6C142944CC12002D9531 /* ScanCodeView.swift in Sources */,
@@ -1201,7 +1179,6 @@
5CEBD7462A5C0A8F00665FE2 /* KeyboardPadding.swift in Sources */,
5C35CFC827B2782E00FB6C6D /* BGManager.swift in Sources */,
5CB634B129E5EFEA0066AD6B /* PasscodeView.swift in Sources */,
8C69FE7D2B8C7D2700267E38 /* AppSettings.swift in Sources */,
5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */,
5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */,
6442E0BA287F169300CEC0F9 /* AddGroupView.swift in Sources */,
@@ -1243,7 +1220,6 @@
5CB0BA92282713FD00B3292C /* CreateProfile.swift in Sources */,
5C5F2B7027EBC704006A9D5F /* ProfileImage.swift in Sources */,
5C9329412929248A0090FFF9 /* ScanProtocolServer.swift in Sources */,
8C7DF3202B7CDB0A00C886D0 /* MigrateFromDevice.swift in Sources */,
64AA1C6C27F3537400AC7277 /* DeletedItemView.swift in Sources */,
5C93293F2928E0FD0090FFF9 /* AudioRecPlay.swift in Sources */,
5C029EA82837DBB3004A9677 /* CICallItemView.swift in Sources */,
@@ -1355,7 +1331,6 @@
5C636F672AAB3D2400751C84 /* uk */,
5C5B67932ABAF56000DA9412 /* bg */,
5C245F3E2B501F13001CC39F /* tr */,
5C371E502BA9AB6400100AD3 /* hu */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@@ -1379,7 +1354,6 @@
5CE6C7B42AAB1527007F345C /* uk */,
5C5B67912ABAF4B500DA9412 /* bg */,
5C245F3C2B501E98001CC39F /* tr */,
5C371E4E2BA9AAA200100AD3 /* hu */,
);
name = Localizable.strings;
sourceTree = "<group>";
@@ -1402,7 +1376,6 @@
5C636F662AAB3D2400751C84 /* uk */,
5C5B67922ABAF56000DA9412 /* bg */,
5C245F3D2B501F13001CC39F /* tr */,
5C371E4F2BA9AB6400100AD3 /* hu */,
);
name = "SimpleX--iOS--InfoPlist.strings";
sourceTree = "<group>";
@@ -1536,7 +1509,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 204;
CURRENT_PROJECT_VERSION = 194;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1558,7 +1531,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 5.6;
MARKETING_VERSION = 5.5;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
PRODUCT_NAME = SimpleX;
SDKROOT = iphoneos;
@@ -1579,7 +1552,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 204;
CURRENT_PROJECT_VERSION = 194;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1601,7 +1574,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 5.6;
MARKETING_VERSION = 5.5;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
PRODUCT_NAME = SimpleX;
SDKROOT = iphoneos;
@@ -1660,7 +1633,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 204;
CURRENT_PROJECT_VERSION = 194;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1673,7 +1646,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6;
MARKETING_VERSION = 5.5;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1692,7 +1665,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 204;
CURRENT_PROJECT_VERSION = 194;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1705,7 +1678,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.6;
MARKETING_VERSION = 5.5;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1724,7 +1697,7 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 204;
CURRENT_PROJECT_VERSION = 194;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -1748,7 +1721,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Libraries/sim",
);
MARKETING_VERSION = 5.6;
MARKETING_VERSION = 5.5;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SDKROOT = iphoneos;
@@ -1770,7 +1743,7 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 204;
CURRENT_PROJECT_VERSION = 194;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -1794,7 +1767,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Libraries/sim",
);
MARKETING_VERSION = 5.6;
MARKETING_VERSION = 5.5;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SDKROOT = iphoneos;
+8 -46
View File
@@ -54,38 +54,6 @@ public func chatMigrateInit(_ useKey: String? = nil, confirmMigrations: Migratio
return result
}
public func chatInitTemporaryDatabase(url: URL, key: String? = nil, confirmation: MigrationConfirmation = .error) -> (DBMigrationResult, chat_ctrl?) {
let dbPath = url.path
let dbKey = key ?? randomDatabasePassword()
logger.debug("chatInitTemporaryDatabase path: \(dbPath)")
var temporaryController: chat_ctrl? = nil
var cPath = dbPath.cString(using: .utf8)!
var cKey = dbKey.cString(using: .utf8)!
var cConfirm = confirmation.rawValue.cString(using: .utf8)!
let cjson = chat_migrate_init_key(&cPath, &cKey, 1, &cConfirm, 0, &temporaryController)!
return (dbMigrationResult(fromCString(cjson)), temporaryController)
}
public func chatInitControllerRemovingDatabases() {
let dbPath = getAppDatabasePath().path
let fm = FileManager.default
// Remove previous databases, otherwise, can be .errorNotADatabase with nil controller
try? fm.removeItem(atPath: dbPath + CHAT_DB)
try? fm.removeItem(atPath: dbPath + AGENT_DB)
let dbKey = randomDatabasePassword()
logger.debug("chatInitControllerRemovingDatabases path: \(dbPath)")
var cPath = dbPath.cString(using: .utf8)!
var cKey = dbKey.cString(using: .utf8)!
var cConfirm = MigrationConfirmation.error.rawValue.cString(using: .utf8)!
chat_migrate_init_key(&cPath, &cKey, 1, &cConfirm, 0, &chatController)
// We need only controller, not databases
try? fm.removeItem(atPath: dbPath + CHAT_DB)
try? fm.removeItem(atPath: dbPath + AGENT_DB)
}
public func chatCloseStore() {
let err = fromCString(chat_close_store(getChatCtrl()))
if err != "" {
@@ -105,17 +73,17 @@ public func resetChatCtrl() {
migrationResult = nil
}
public func sendSimpleXCmd(_ cmd: ChatCommand, _ ctrl: chat_ctrl? = nil) -> ChatResponse {
public func sendSimpleXCmd(_ cmd: ChatCommand) -> ChatResponse {
var c = cmd.cmdString.cString(using: .utf8)!
let cjson = chat_send_cmd(ctrl ?? getChatCtrl(), &c)!
let cjson = chat_send_cmd(getChatCtrl(), &c)!
return chatResponse(fromCString(cjson))
}
// in microseconds
let MESSAGE_TIMEOUT: Int32 = 15_000_000
public func recvSimpleXMsg(_ ctrl: chat_ctrl? = nil) -> ChatResponse? {
if let cjson = chat_recv_msg_wait(ctrl ?? getChatCtrl(), MESSAGE_TIMEOUT) {
public func recvSimpleXMsg() -> ChatResponse? {
if let cjson = chat_recv_msg_wait(getChatCtrl(), MESSAGE_TIMEOUT) {
let s = fromCString(cjson)
return s == "" ? nil : chatResponse(s)
}
@@ -213,11 +181,13 @@ public func chatResponse(_ s: String) -> ChatResponse {
}
} else if type == "chatCmdError" {
if let jError = jResp["chatCmdError"] as? NSDictionary {
return .chatCmdError(user_: decodeUser_(jError), chatError: .invalidJSON(json: prettyJSON(jError) ?? ""))
let user: UserRef? = try? decodeObject(jError["user_"] as Any)
return .chatCmdError(user_: user, chatError: .invalidJSON(json: prettyJSON(jError) ?? ""))
}
} else if type == "chatError" {
if let jError = jResp["chatError"] as? NSDictionary {
return .chatError(user_: decodeUser_(jError), chatError: .invalidJSON(json: prettyJSON(jError) ?? ""))
let user: UserRef? = try? decodeObject(jError["user_"] as Any)
return .chatError(user_: user, chatError: .invalidJSON(json: prettyJSON(jError) ?? ""))
}
}
}
@@ -226,14 +196,6 @@ public func chatResponse(_ s: String) -> ChatResponse {
return ChatResponse.response(type: type ?? "invalid", json: json ?? s)
}
private func decodeUser_(_ jDict: NSDictionary) -> UserRef? {
if let user_ = jDict["user_"] {
try? decodeObject(user_ as Any)
} else {
nil
}
}
func parseChatData(_ jChat: Any) throws -> ChatData {
let jChatDict = jChat as! NSDictionary
let chatInfo: ChatInfo = try decodeObject(jChatDict["chatInfo"]!)
+26 -220
View File
@@ -31,16 +31,12 @@ public enum ChatCommand {
case apiSuspendChat(timeoutMicroseconds: Int)
case setTempFolder(tempFolder: String)
case setFilesFolder(filesFolder: String)
case apiSetXFTPConfig(config: XFTPFileConfig?)
case apiSetEncryptLocalFiles(enable: Bool)
case apiSetPQEncryption(enable: Bool)
case apiSetContactPQ(contactId: Int64, enable: Bool)
case apiExportArchive(config: ArchiveConfig)
case apiImportArchive(config: ArchiveConfig)
case apiDeleteStorage
case apiStorageEncryption(config: DBEncryptionConfig)
case testStorageEncryption(key: String)
case apiSaveSettings(settings: AppSettings)
case apiGetSettings(settings: AppSettings)
case apiGetChats(userId: Int64)
case apiGetChat(type: ChatType, id: Int64, pagination: ChatPagination, search: String)
case apiGetChatItemInfo(type: ChatType, id: Int64, itemId: Int64)
@@ -135,9 +131,6 @@ public enum ChatCommand {
case listRemoteCtrls
case stopRemoteCtrl
case deleteRemoteCtrl(remoteCtrlId: Int64)
case apiUploadStandaloneFile(userId: Int64, file: CryptoFile)
case apiDownloadStandaloneFile(userId: Int64, url: String, file: CryptoFile)
case apiStandaloneFileInfo(url: String)
// misc
case showVersion
case string(String)
@@ -169,16 +162,16 @@ public enum ChatCommand {
case let .apiSuspendChat(timeoutMicroseconds): return "/_app suspend \(timeoutMicroseconds)"
case let .setTempFolder(tempFolder): return "/_temp_folder \(tempFolder)"
case let .setFilesFolder(filesFolder): return "/_files_folder \(filesFolder)"
case let .apiSetXFTPConfig(cfg): if let cfg = cfg {
return "/_xftp on \(encodeJSON(cfg))"
} else {
return "/_xftp off"
}
case let .apiSetEncryptLocalFiles(enable): return "/_files_encrypt \(onOff(enable))"
case let .apiSetPQEncryption(enable): return "/pq \(onOff(enable))"
case let .apiSetContactPQ(contactId, enable): return "/_pq @\(contactId) \(onOff(enable))"
case let .apiExportArchive(cfg): return "/_db export \(encodeJSON(cfg))"
case let .apiImportArchive(cfg): return "/_db import \(encodeJSON(cfg))"
case .apiDeleteStorage: return "/_db delete"
case let .apiStorageEncryption(cfg): return "/_db encryption \(encodeJSON(cfg))"
case let .testStorageEncryption(key): return "/db test key \(key)"
case let .apiSaveSettings(settings): return "/_save app settings \(encodeJSON(settings))"
case let .apiGetSettings(settings): return "/_get app settings \(encodeJSON(settings))"
case let .apiGetChats(userId): return "/_get chats \(userId) pcc=on"
case let .apiGetChat(type, id, pagination, search): return "/_get chat \(ref(type, id)) \(pagination.cmdString)" +
(search == "" ? "" : " search=\(search)")
@@ -291,9 +284,6 @@ public enum ChatCommand {
case .listRemoteCtrls: return "/list remote ctrls"
case .stopRemoteCtrl: return "/stop remote ctrl"
case let .deleteRemoteCtrl(rcId): return "/delete remote ctrl \(rcId)"
case let .apiUploadStandaloneFile(userId, file): return "/_upload \(userId) \(file.filePath)"
case let .apiDownloadStandaloneFile(userId, link, file): return "/_download \(userId) \(link) \(file.filePath)"
case let .apiStandaloneFileInfo(link): return "/_download info \(link)"
case .showVersion: return "/version"
case let .string(str): return str
}
@@ -321,16 +311,12 @@ public enum ChatCommand {
case .apiSuspendChat: return "apiSuspendChat"
case .setTempFolder: return "setTempFolder"
case .setFilesFolder: return "setFilesFolder"
case .apiSetXFTPConfig: return "apiSetXFTPConfig"
case .apiSetEncryptLocalFiles: return "apiSetEncryptLocalFiles"
case .apiSetPQEncryption: return "apiSetPQEncryption"
case .apiSetContactPQ: return "apiSetContactPQ"
case .apiExportArchive: return "apiExportArchive"
case .apiImportArchive: return "apiImportArchive"
case .apiDeleteStorage: return "apiDeleteStorage"
case .apiStorageEncryption: return "apiStorageEncryption"
case .testStorageEncryption: return "testStorageEncryption"
case .apiSaveSettings: return "apiSaveSettings"
case .apiGetSettings: return "apiGetSettings"
case .apiGetChats: return "apiGetChats"
case .apiGetChat: return "apiGetChat"
case .apiGetChatItemInfo: return "apiGetChatItemInfo"
@@ -423,9 +409,6 @@ public enum ChatCommand {
case .listRemoteCtrls: return "listRemoteCtrls"
case .stopRemoteCtrl: return "stopRemoteCtrl"
case .deleteRemoteCtrl: return "deleteRemoteCtrl"
case .apiUploadStandaloneFile: return "apiUploadStandaloneFile"
case .apiDownloadStandaloneFile: return "apiDownloadStandaloneFile"
case .apiStandaloneFileInfo: return "apiStandaloneFileInfo"
case .showVersion: return "showVersion"
case .string: return "console command"
}
@@ -460,8 +443,6 @@ public enum ChatCommand {
return .apiUnhideUser(userId: userId, viewPwd: obfuscate(viewPwd))
case let .apiDeleteUser(userId, delSMPQueues, viewPwd):
return .apiDeleteUser(userId: userId, delSMPQueues: delSMPQueues, viewPwd: obfuscate(viewPwd))
case let .testStorageEncryption(key):
return .testStorageEncryption(key: obfuscate(key))
default: return self
}
}
@@ -610,28 +591,20 @@ public enum ChatResponse: Decodable, Error {
// receiving file events
case rcvFileAccepted(user: UserRef, chatItem: AChatItem)
case rcvFileAcceptedSndCancelled(user: UserRef, rcvFileTransfer: RcvFileTransfer)
case standaloneFileInfo(fileMeta: MigrationFileLinkData?)
case rcvStandaloneFileCreated(user: UserRef, rcvFileTransfer: RcvFileTransfer)
case rcvFileStart(user: UserRef, chatItem: AChatItem) // send by chats
case rcvFileProgressXFTP(user: UserRef, chatItem_: AChatItem?, receivedSize: Int64, totalSize: Int64, rcvFileTransfer: RcvFileTransfer)
case rcvFileStart(user: UserRef, chatItem: AChatItem)
case rcvFileProgressXFTP(user: UserRef, chatItem: AChatItem, receivedSize: Int64, totalSize: Int64)
case rcvFileComplete(user: UserRef, chatItem: AChatItem)
case rcvStandaloneFileComplete(user: UserRef, targetPath: String, rcvFileTransfer: RcvFileTransfer)
case rcvFileCancelled(user: UserRef, chatItem_: AChatItem?, rcvFileTransfer: RcvFileTransfer)
case rcvFileCancelled(user: UserRef, chatItem: AChatItem, rcvFileTransfer: RcvFileTransfer)
case rcvFileSndCancelled(user: UserRef, chatItem: AChatItem, rcvFileTransfer: RcvFileTransfer)
case rcvFileError(user: UserRef, chatItem_: AChatItem?, rcvFileTransfer: RcvFileTransfer)
case rcvFileError(user: UserRef, chatItem: AChatItem)
// sending file events
case sndFileStart(user: UserRef, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
case sndFileComplete(user: UserRef, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
case sndFileRcvCancelled(user: UserRef, chatItem_: AChatItem?, sndFileTransfer: SndFileTransfer)
case sndFileCancelled(user: UserRef, chatItem_: AChatItem?, fileTransferMeta: FileTransferMeta, sndFileTransfers: [SndFileTransfer])
case sndStandaloneFileCreated(user: UserRef, fileTransferMeta: FileTransferMeta) // returned by _upload
case sndFileStartXFTP(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta) // not used
case sndFileProgressXFTP(user: UserRef, chatItem_: AChatItem?, fileTransferMeta: FileTransferMeta, sentSize: Int64, totalSize: Int64)
case sndFileRedirectStartXFTP(user: UserRef, fileTransferMeta: FileTransferMeta, redirectMeta: FileTransferMeta)
case sndFileCancelled(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta, sndFileTransfers: [SndFileTransfer])
case sndFileRcvCancelled(user: UserRef, chatItem: AChatItem, sndFileTransfer: SndFileTransfer)
case sndFileProgressXFTP(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta, sentSize: Int64, totalSize: Int64)
case sndFileCompleteXFTP(user: UserRef, chatItem: AChatItem, fileTransferMeta: FileTransferMeta)
case sndStandaloneFileComplete(user: UserRef, fileTransferMeta: FileTransferMeta, rcvURIs: [String])
case sndFileCancelledXFTP(user: UserRef, chatItem_: AChatItem?, fileTransferMeta: FileTransferMeta)
case sndFileError(user: UserRef, chatItem_: AChatItem?, fileTransferMeta: FileTransferMeta)
case sndFileError(user: UserRef, chatItem: AChatItem)
// call events
case callInvitation(callInvitation: RcvCallInvitation)
case callOffer(user: UserRef, contact: Contact, callType: CallType, offer: WebRTCSession, sharedKey: String?, askConfirmation: Bool)
@@ -640,7 +613,7 @@ public enum ChatResponse: Decodable, Error {
case callEnded(user: UserRef, contact: Contact)
case callInvitations(callInvitations: [RcvCallInvitation])
case ntfTokenStatus(status: NtfTknStatus)
case ntfToken(token: DeviceToken, status: NtfTknStatus, ntfMode: NotificationsMode, ntfServer: String)
case ntfToken(token: DeviceToken, status: NtfTknStatus, ntfMode: NotificationsMode)
case ntfMessages(user_: User?, connEntity_: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo])
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgInfo)
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
@@ -651,16 +624,12 @@ public enum ChatResponse: Decodable, Error {
case remoteCtrlSessionCode(remoteCtrl_: RemoteCtrlInfo?, sessionCode: String)
case remoteCtrlConnected(remoteCtrl: RemoteCtrlInfo)
case remoteCtrlStopped(rcsState: RemoteCtrlSessionState, rcStopReason: RemoteCtrlStopReason)
// pq
case contactPQAllowed(user: UserRef, contact: Contact, pqEncryption: Bool)
case contactPQEnabled(user: UserRef, contact: Contact, pqEnabled: Bool)
// misc
case versionInfo(versionInfo: CoreVersionInfo, chatMigrations: [UpMigration], agentMigrations: [UpMigration])
case cmdOk(user: UserRef?)
case chatCmdError(user_: UserRef?, chatError: ChatError)
case chatError(user_: UserRef?, chatError: ChatError)
case archiveImported(archiveErrors: [ArchiveError])
case appSettings(appSettings: AppSettings)
public var responseType: String {
get {
@@ -773,26 +742,18 @@ public enum ChatResponse: Decodable, Error {
case .newMemberContactReceivedInv: return "newMemberContactReceivedInv"
case .rcvFileAccepted: return "rcvFileAccepted"
case .rcvFileAcceptedSndCancelled: return "rcvFileAcceptedSndCancelled"
case .standaloneFileInfo: return "standaloneFileInfo"
case .rcvStandaloneFileCreated: return "rcvStandaloneFileCreated"
case .rcvFileStart: return "rcvFileStart"
case .rcvFileProgressXFTP: return "rcvFileProgressXFTP"
case .rcvFileComplete: return "rcvFileComplete"
case .rcvStandaloneFileComplete: return "rcvStandaloneFileComplete"
case .rcvFileCancelled: return "rcvFileCancelled"
case .rcvFileSndCancelled: return "rcvFileSndCancelled"
case .rcvFileError: return "rcvFileError"
case .sndFileStart: return "sndFileStart"
case .sndFileComplete: return "sndFileComplete"
case .sndFileCancelled: return "sndFileCancelled"
case .sndStandaloneFileCreated: return "sndStandaloneFileCreated"
case .sndFileStartXFTP: return "sndFileStartXFTP"
case .sndFileProgressXFTP: return "sndFileProgressXFTP"
case .sndFileRedirectStartXFTP: return "sndFileRedirectStartXFTP"
case .sndFileRcvCancelled: return "sndFileRcvCancelled"
case .sndFileProgressXFTP: return "sndFileProgressXFTP"
case .sndFileCompleteXFTP: return "sndFileCompleteXFTP"
case .sndStandaloneFileComplete: return "sndStandaloneFileComplete"
case .sndFileCancelledXFTP: return "sndFileCancelledXFTP"
case .sndFileError: return "sndFileError"
case .callInvitation: return "callInvitation"
case .callOffer: return "callOffer"
@@ -811,14 +772,11 @@ public enum ChatResponse: Decodable, Error {
case .remoteCtrlSessionCode: return "remoteCtrlSessionCode"
case .remoteCtrlConnected: return "remoteCtrlConnected"
case .remoteCtrlStopped: return "remoteCtrlStopped"
case .contactPQAllowed: return "contactPQAllowed"
case .contactPQEnabled: return "contactPQAllowed"
case .versionInfo: return "versionInfo"
case .cmdOk: return "cmdOk"
case .chatCmdError: return "chatCmdError"
case .chatError: return "chatError"
case .archiveImported: return "archiveImported"
case .appSettings: return "appSettings"
}
}
}
@@ -934,27 +892,19 @@ public enum ChatResponse: Decodable, Error {
case let .newMemberContactReceivedInv(u, contact, groupInfo, member): return withUser(u, "contact: \(contact)\ngroupInfo: \(groupInfo)\nmember: \(member)")
case let .rcvFileAccepted(u, chatItem): return withUser(u, String(describing: chatItem))
case .rcvFileAcceptedSndCancelled: return noDetails
case let .standaloneFileInfo(fileMeta): return String(describing: fileMeta)
case .rcvStandaloneFileCreated: return noDetails
case let .rcvFileStart(u, chatItem): return withUser(u, String(describing: chatItem))
case let .rcvFileProgressXFTP(u, chatItem, receivedSize, totalSize, _): return withUser(u, "chatItem: \(String(describing: chatItem))\nreceivedSize: \(receivedSize)\ntotalSize: \(totalSize)")
case let .rcvStandaloneFileComplete(u, targetPath, _): return withUser(u, targetPath)
case let .rcvFileProgressXFTP(u, chatItem, receivedSize, totalSize): return withUser(u, "chatItem: \(String(describing: chatItem))\nreceivedSize: \(receivedSize)\ntotalSize: \(totalSize)")
case let .rcvFileComplete(u, chatItem): return withUser(u, String(describing: chatItem))
case let .rcvFileCancelled(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .rcvFileSndCancelled(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .rcvFileError(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .rcvFileError(u, chatItem): return withUser(u, String(describing: chatItem))
case let .sndFileStart(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .sndFileComplete(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .sndFileCancelled(u, chatItem, _, _): return withUser(u, String(describing: chatItem))
case .sndStandaloneFileCreated: return noDetails
case let .sndFileStartXFTP(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .sndFileRcvCancelled(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .sndFileProgressXFTP(u, chatItem, _, sentSize, totalSize): return withUser(u, "chatItem: \(String(describing: chatItem))\nsentSize: \(sentSize)\ntotalSize: \(totalSize)")
case let .sndFileRedirectStartXFTP(u, _, redirectMeta): return withUser(u, String(describing: redirectMeta))
case let .sndFileCompleteXFTP(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .sndStandaloneFileComplete(u, _, rcvURIs): return withUser(u, String(rcvURIs.count))
case let .sndFileCancelledXFTP(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .sndFileError(u, chatItem, _): return withUser(u, String(describing: chatItem))
case let .sndFileError(u, chatItem): return withUser(u, String(describing: chatItem))
case let .callInvitation(inv): return String(describing: inv)
case let .callOffer(u, contact, callType, offer, sharedKey, askConfirmation): return withUser(u, "contact: \(contact.id)\ncallType: \(String(describing: callType))\nsharedKey: \(sharedKey ?? "")\naskConfirmation: \(askConfirmation)\noffer: \(String(describing: offer))")
case let .callAnswer(u, contact, answer): return withUser(u, "contact: \(contact.id)\nanswer: \(String(describing: answer))")
@@ -962,7 +912,7 @@ public enum ChatResponse: Decodable, Error {
case let .callEnded(u, contact): return withUser(u, "contact: \(contact.id)")
case let .callInvitations(invs): return String(describing: invs)
case let .ntfTokenStatus(status): return String(describing: status)
case let .ntfToken(token, status, ntfMode, ntfServer): return "token: \(token)\nstatus: \(status.rawValue)\nntfMode: \(ntfMode.rawValue)\nntfServer: \(ntfServer)"
case let .ntfToken(token, status, ntfMode): return "token: \(token)\nstatus: \(status.rawValue)\nntfMode: \(ntfMode.rawValue)"
case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))")
case let .ntfMessage(u, connEntity, ntfMessage): return withUser(u, "connEntity: \(String(describing: connEntity))\nntfMessage: \(String(describing: ntfMessage))")
case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection))
@@ -972,14 +922,11 @@ public enum ChatResponse: Decodable, Error {
case let .remoteCtrlSessionCode(remoteCtrl_, sessionCode): return "remoteCtrl_:\n\(String(describing: remoteCtrl_))\nsessionCode: \(sessionCode)"
case let .remoteCtrlConnected(remoteCtrl): return String(describing: remoteCtrl)
case .remoteCtrlStopped: return noDetails
case let .contactPQAllowed(u, contact, pqEncryption): return withUser(u, "contact: \(String(describing: contact))\npqEncryption: \(pqEncryption)")
case let .contactPQEnabled(u, contact, pqEnabled): return withUser(u, "contact: \(String(describing: contact))\npqEnabled: \(pqEnabled)")
case let .versionInfo(versionInfo, chatMigrations, agentMigrations): return "\(String(describing: versionInfo))\n\nchat migrations: \(chatMigrations.map(\.upName))\n\nagent migrations: \(agentMigrations.map(\.upName))"
case .cmdOk: return noDetails
case let .chatCmdError(u, chatError): return withUser(u, String(describing: chatError))
case let .chatError(u, chatError): return withUser(u, String(describing: chatError))
case let .archiveImported(archiveErrors): return String(describing: archiveErrors)
case let .appSettings(appSettings): return String(describing: appSettings)
}
}
}
@@ -1058,6 +1005,10 @@ struct ComposedMessage: Encodable {
var msgContent: MsgContent
}
public struct XFTPFileConfig: Encodable {
var minFileSize: Int64
}
public struct ArchiveConfig: Encodable {
var archivePath: String
var disableCompression: Bool?
@@ -1581,7 +1532,7 @@ public enum NotificationsMode: String, Decodable, SelectableItem {
public static var values: [NotificationsMode] = [.instant, .periodic, .off]
}
public enum NotificationPreviewMode: String, SelectableItem, Codable {
public enum NotificationPreviewMode: String, SelectableItem {
case hidden
case contact
case message
@@ -1781,7 +1732,6 @@ public enum StoreError: Decodable {
case fileIdNotFoundBySharedMsgId(sharedMsgId: String)
case sndFileNotFoundXFTP(agentSndFileId: String)
case rcvFileNotFoundXFTP(agentRcvFileId: String)
case extraFileDescrNotFoundXFTP(fileId: Int64)
case connectionNotFound(agentConnId: String)
case connectionNotFoundById(connId: Int64)
case connectionNotFoundByMemberId(groupMemberId: Int64)
@@ -1943,147 +1893,3 @@ public enum RemoteCtrlError: Decodable {
case badVersion(appVersion: String)
// case protocolError(protocolError: RemoteProtocolError)
}
public struct MigrationFileLinkData: Codable {
let networkConfig: NetworkConfig?
public init(networkConfig: NetworkConfig) {
self.networkConfig = networkConfig
}
public struct NetworkConfig: Codable {
let socksProxy: String?
let hostMode: HostMode?
let requiredHostMode: Bool?
public init(socksProxy: String?, hostMode: HostMode?, requiredHostMode: Bool?) {
self.socksProxy = socksProxy
self.hostMode = hostMode
self.requiredHostMode = requiredHostMode
}
public func transformToPlatformSupported() -> NetworkConfig {
return if let hostMode, let requiredHostMode {
NetworkConfig(
socksProxy: nil,
hostMode: hostMode == .onionViaSocks ? .onionHost : hostMode,
requiredHostMode: requiredHostMode
)
} else { self }
}
}
public func addToLink(link: String) -> String {
"\(link)&data=\(encodeJSON(self).addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!)"
}
public static func readFromLink(link: String) -> MigrationFileLinkData? {
// standaloneFileInfo(link)
nil
}
}
public struct AppSettings: Codable, Equatable {
public var networkConfig: NetCfg? = nil
public var privacyEncryptLocalFiles: Bool? = nil
public var privacyAcceptImages: Bool? = nil
public var privacyLinkPreviews: Bool? = nil
public var privacyShowChatPreviews: Bool? = nil
public var privacySaveLastDraft: Bool? = nil
public var privacyProtectScreen: Bool? = nil
public var notificationMode: AppSettingsNotificationMode? = nil
public var notificationPreviewMode: NotificationPreviewMode? = nil
public var webrtcPolicyRelay: Bool? = nil
public var webrtcICEServers: [String]? = nil
public var confirmRemoteSessions: Bool? = nil
public var connectRemoteViaMulticast: Bool? = nil
public var connectRemoteViaMulticastAuto: Bool? = nil
public var developerTools: Bool? = nil
public var confirmDBUpgrades: Bool? = nil
public var androidCallOnLockScreen: AppSettingsLockScreenCalls? = nil
public var iosCallKitEnabled: Bool? = nil
public var iosCallKitCallsInRecents: Bool? = nil
public func prepareForExport() -> AppSettings {
var empty = AppSettings()
let def = AppSettings.defaults
if networkConfig != def.networkConfig { empty.networkConfig = networkConfig }
if privacyEncryptLocalFiles != def.privacyEncryptLocalFiles { empty.privacyEncryptLocalFiles = privacyEncryptLocalFiles }
if privacyAcceptImages != def.privacyAcceptImages { empty.privacyAcceptImages = privacyAcceptImages }
if privacyLinkPreviews != def.privacyLinkPreviews { empty.privacyLinkPreviews = privacyLinkPreviews }
if privacyShowChatPreviews != def.privacyShowChatPreviews { empty.privacyShowChatPreviews = privacyShowChatPreviews }
if privacySaveLastDraft != def.privacySaveLastDraft { empty.privacySaveLastDraft = privacySaveLastDraft }
if privacyProtectScreen != def.privacyProtectScreen { empty.privacyProtectScreen = privacyProtectScreen }
if notificationMode != def.notificationMode { empty.notificationMode = notificationMode }
if notificationPreviewMode != def.notificationPreviewMode { empty.notificationPreviewMode = notificationPreviewMode }
if webrtcPolicyRelay != def.webrtcPolicyRelay { empty.webrtcPolicyRelay = webrtcPolicyRelay }
if webrtcICEServers != def.webrtcICEServers { empty.webrtcICEServers = webrtcICEServers }
if confirmRemoteSessions != def.confirmRemoteSessions { empty.confirmRemoteSessions = confirmRemoteSessions }
if connectRemoteViaMulticast != def.connectRemoteViaMulticast {empty.connectRemoteViaMulticast = connectRemoteViaMulticast }
if connectRemoteViaMulticastAuto != def.connectRemoteViaMulticastAuto { empty.connectRemoteViaMulticastAuto = connectRemoteViaMulticastAuto }
if developerTools != def.developerTools { empty.developerTools = developerTools }
if confirmDBUpgrades != def.confirmDBUpgrades { empty.confirmDBUpgrades = confirmDBUpgrades }
if androidCallOnLockScreen != def.androidCallOnLockScreen { empty.androidCallOnLockScreen = androidCallOnLockScreen }
if iosCallKitEnabled != def.iosCallKitEnabled { empty.iosCallKitEnabled = iosCallKitEnabled }
if iosCallKitCallsInRecents != def.iosCallKitCallsInRecents { empty.iosCallKitCallsInRecents = iosCallKitCallsInRecents }
return empty
}
public static var defaults: AppSettings {
AppSettings (
networkConfig: NetCfg.defaults,
privacyEncryptLocalFiles: true,
privacyAcceptImages: true,
privacyLinkPreviews: true,
privacyShowChatPreviews: true,
privacySaveLastDraft: true,
privacyProtectScreen: false,
notificationMode: AppSettingsNotificationMode.instant,
notificationPreviewMode: NotificationPreviewMode.message,
webrtcPolicyRelay: true,
webrtcICEServers: [],
confirmRemoteSessions: false,
connectRemoteViaMulticast: true,
connectRemoteViaMulticastAuto: true,
developerTools: false,
confirmDBUpgrades: false,
androidCallOnLockScreen: AppSettingsLockScreenCalls.show,
iosCallKitEnabled: true,
iosCallKitCallsInRecents: false
)
}
}
public enum AppSettingsNotificationMode: String, Codable {
case off
case periodic
case instant
public func toNotificationsMode() -> NotificationsMode {
switch self {
case .instant: .instant
case .periodic: .periodic
case .off: .off
}
}
public static func from(_ mode: NotificationsMode) -> AppSettingsNotificationMode {
switch mode {
case .instant: .instant
case .periodic: .periodic
case .off: .off
}
}
}
//public enum NotificationPreviewMode: Codable {
// case hidden
// case contact
// case message
//}
public enum AppSettingsLockScreenCalls: String, Codable {
case disable
case show
case accept
}
+5 -7
View File
@@ -19,7 +19,6 @@ public let GROUP_DEFAULT_CHAT_LAST_BACKGROUND_RUN = "chatLastBackgroundRun"
let GROUP_DEFAULT_NTF_PREVIEW_MODE = "ntfPreviewMode"
public let GROUP_DEFAULT_NTF_ENABLE_LOCAL = "ntfEnableLocal" // no longer used
public let GROUP_DEFAULT_NTF_ENABLE_PERIODIC = "ntfEnablePeriodic" // no longer used
// This setting is a main one, while having an unused duplicate from the past: DEFAULT_PRIVACY_ACCEPT_IMAGES
let GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages"
public let GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE = "privacyTransferImagesInline" // no longer used
public let GROUP_DEFAULT_PRIVACY_ENCRYPT_LOCAL_FILES = "privacyEncryptLocalFiles"
@@ -37,10 +36,9 @@ let GROUP_DEFAULT_NETWORK_TCP_KEEP_INTVL = "networkTCPKeepIntvl"
let GROUP_DEFAULT_NETWORK_TCP_KEEP_CNT = "networkTCPKeepCnt"
public let GROUP_DEFAULT_INCOGNITO = "incognito"
let GROUP_DEFAULT_STORE_DB_PASSPHRASE = "storeDBPassphrase"
public let GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE = "initialRandomDBPassphrase"
let GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE = "initialRandomDBPassphrase"
public let GROUP_DEFAULT_CONFIRM_DB_UPGRADES = "confirmDBUpgrades"
public let GROUP_DEFAULT_CALL_KIT_ENABLED = "callKitEnabled"
public let GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED = "pqExperimentalEnabled"
public let APP_GROUP_NAME = "group.chat.simplex.app"
@@ -69,7 +67,6 @@ public func registerGroupDefaults() {
GROUP_DEFAULT_PRIVACY_ENCRYPT_LOCAL_FILES: true,
GROUP_DEFAULT_CONFIRM_DB_UPGRADES: false,
GROUP_DEFAULT_CALL_KIT_ENABLED: true,
GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED: false,
])
}
@@ -170,7 +167,6 @@ public let ntfPreviewModeGroupDefault = EnumDefault<NotificationPreviewMode>(
public let incognitoGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_INCOGNITO)
// This setting is a main one, while having an unused duplicate from the past: DEFAULT_PRIVACY_ACCEPT_IMAGES
public let privacyAcceptImagesGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES)
public let privacyEncryptLocalFilesGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_PRIVACY_ENCRYPT_LOCAL_FILES)
@@ -197,8 +193,6 @@ public let confirmDBUpgradesGroupDefault = BoolDefault(defaults: groupDefaults,
public let callKitEnabledGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_CALL_KIT_ENABLED)
public let pqExperimentalEnabledDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_PRIVACY_ENCRYPT_LOCAL_FILES)
public class DateDefault {
var defaults: UserDefaults
var key: String
@@ -271,6 +265,10 @@ public class Default<T> {
}
}
public func getXFTPCfg() -> XFTPFileConfig {
return XFTPFileConfig(minFileSize: 0)
}
public func getNetCfg() -> NetCfg {
let onionHosts = networkUseOnionHostsGroupDefault.get()
let (hostMode, requiredHostMode) = onionHosts.hostMode
+6 -59
View File
@@ -1532,32 +1532,22 @@ public struct Connection: Decodable {
public var viaGroupLink: Bool
public var customUserProfileId: Int64?
public var connectionCode: SecurityCode?
public var pqSupport: Bool
public var pqEncryption: Bool
public var pqSndEnabled: Bool?
public var pqRcvEnabled: Bool?
public var connectionStats: ConnectionStats? = nil
private enum CodingKeys: String, CodingKey {
case connId, agentConnId, peerChatVRange, connStatus, connLevel, viaGroupLink, customUserProfileId, connectionCode, pqSupport, pqEncryption, pqSndEnabled, pqRcvEnabled
case connId, agentConnId, peerChatVRange, connStatus, connLevel, viaGroupLink, customUserProfileId, connectionCode
}
public var id: ChatId { get { ":\(connId)" } }
public var connPQEnabled: Bool {
pqSndEnabled == true && pqRcvEnabled == true
}
static let sampleData = Connection(
connId: 1,
agentConnId: "abc",
peerChatVRange: VersionRange(minVersion: 1, maxVersion: 1),
connStatus: .ready,
connLevel: 0,
viaGroupLink: false,
pqSupport: false,
pqEncryption: false
viaGroupLink: false
)
}
@@ -2278,7 +2268,7 @@ public struct ChatItem: Identifiable, Decodable {
case .rcvDirectEvent(rcvDirectEvent: let rcvDirectEvent):
switch rcvDirectEvent {
case .contactDeleted: return false
case .profileUpdated: return false
case .profileUpdated: return true
}
case .rcvGroupEvent(rcvGroupEvent: let rcvGroupEvent):
switch rcvGroupEvent {
@@ -2310,10 +2300,6 @@ public struct ChatItem: Identifiable, Decodable {
case .sndModerated: return false
case .rcvModerated: return false
case .rcvBlocked: return false
case .sndDirectE2EEInfo: return false
case .rcvDirectE2EEInfo: return false
case .sndGroupE2EEInfo: return false
case .rcvGroupE2EEInfo: return false
case .invalidJSON: return false
}
}
@@ -2749,10 +2735,6 @@ public enum CIContent: Decodable, ItemContent {
case sndModerated
case rcvModerated
case rcvBlocked
case sndDirectE2EEInfo(e2eeInfo: E2EEInfo)
case rcvDirectE2EEInfo(e2eeInfo: E2EEInfo)
case sndGroupE2EEInfo(e2eeInfo: E2EEInfo)
case rcvGroupE2EEInfo(e2eeInfo: E2EEInfo)
case invalidJSON(json: String)
public var text: String {
@@ -2784,25 +2766,11 @@ public enum CIContent: Decodable, ItemContent {
case .sndModerated: return NSLocalizedString("moderated", comment: "moderated chat item")
case .rcvModerated: return NSLocalizedString("moderated", comment: "moderated chat item")
case .rcvBlocked: return NSLocalizedString("blocked by admin", comment: "blocked chat item")
case let .sndDirectE2EEInfo(e2eeInfo): return directE2EEInfoStr(e2eeInfo)
case let .rcvDirectE2EEInfo(e2eeInfo): return directE2EEInfoStr(e2eeInfo)
case .sndGroupE2EEInfo: return e2eeInfoNoPQStr
case .rcvGroupE2EEInfo: return e2eeInfoNoPQStr
case .invalidJSON: return NSLocalizedString("invalid data", comment: "invalid chat item")
}
}
}
private func directE2EEInfoStr(_ e2eeInfo: E2EEInfo) -> String {
e2eeInfo.pqEnabled
? NSLocalizedString("This chat is protected by quantum resistant end-to-end encryption.", comment: "E2EE info chat item")
: e2eeInfoNoPQStr
}
private var e2eeInfoNoPQStr: String {
NSLocalizedString("This chat is protected by end-to-end encryption.", comment: "E2EE info chat item")
}
static func featureText(_ feature: Feature, _ enabled: String, _ param: Int?) -> String {
feature.hasParam
? "\(feature.text): \(timeText(param))"
@@ -3410,14 +3378,11 @@ public struct SndFileTransfer: Decodable {
}
public struct RcvFileTransfer: Decodable {
public let fileId: Int64
}
public struct FileTransferMeta: Decodable {
public let fileId: Int64
public let fileName: String
public let filePath: String
public let fileSize: Int64
}
public enum CICallStatus: String, Decodable {
@@ -3492,10 +3457,6 @@ public enum CIGroupInvitationStatus: String, Decodable {
case expired
}
public struct E2EEInfo: Decodable {
public var pqEnabled: Bool
}
public enum RcvDirectEvent: Decodable {
case contactDeleted
case profileUpdated(fromProfile: Profile, toProfile: Profile)
@@ -3613,8 +3574,7 @@ public enum RcvConnEvent: Decodable {
case switchQueue(phase: SwitchPhase)
case ratchetSync(syncStatus: RatchetSyncState)
case verificationCodeReset
case pqEnabled(enabled: Bool)
var text: String {
switch self {
case let .switchQueue(phase):
@@ -3626,12 +3586,6 @@ public enum RcvConnEvent: Decodable {
return ratchetSyncStatusToText(syncStatus)
case .verificationCodeReset:
return NSLocalizedString("security code changed", comment: "chat item text")
case let .pqEnabled(enabled):
if enabled {
return NSLocalizedString("quantum resistant e2e encryption", comment: "chat item text")
} else {
return NSLocalizedString("standard end-to-end encryption", comment: "chat item text")
}
}
}
}
@@ -3649,7 +3603,6 @@ func ratchetSyncStatusToText(_ ratchetSyncStatus: RatchetSyncState) -> String {
public enum SndConnEvent: Decodable {
case switchQueue(phase: SwitchPhase, member: GroupMemberRef?)
case ratchetSync(syncStatus: RatchetSyncState, member: GroupMemberRef?)
case pqEnabled(enabled: Bool)
var text: String {
switch self {
@@ -3673,12 +3626,6 @@ public enum SndConnEvent: Decodable {
}
}
return ratchetSyncStatusToText(syncStatus)
case let .pqEnabled(enabled):
if enabled {
return NSLocalizedString("quantum resistant e2e encryption", comment: "chat item text")
} else {
return NSLocalizedString("standard end-to-end encryption", comment: "chat item text")
}
}
}
}
+2 -7
View File
@@ -28,9 +28,9 @@ public let MAX_FILE_SIZE_SMP: Int64 = 8000000
public let MAX_VOICE_MESSAGE_LENGTH = TimeInterval(300)
let CHAT_DB: String = "_chat.db"
private let CHAT_DB: String = "_chat.db"
let AGENT_DB: String = "_agent.db"
private let AGENT_DB: String = "_agent.db"
private let CHAT_DB_BAK: String = "_chat.db.bak"
@@ -83,7 +83,6 @@ public func deleteAppDatabaseAndFiles() {
try? fm.removeItem(atPath: dbPath + CHAT_DB_BAK)
try? fm.removeItem(atPath: dbPath + AGENT_DB_BAK)
try? fm.removeItem(at: getTempFilesDirectory())
try? fm.removeItem(at: getMigrationTempFilesDirectory())
try? fm.createDirectory(at: getTempFilesDirectory(), withIntermediateDirectories: true)
deleteAppFiles()
_ = kcDatabasePassword.remove()
@@ -184,10 +183,6 @@ public func getTempFilesDirectory() -> URL {
getAppDirectory().appendingPathComponent("temp_files", isDirectory: true)
}
public func getMigrationTempFilesDirectory() -> URL {
getDocumentsDirectory().appendingPathComponent("migration_temp_files", isDirectory: true)
}
public func getAppFilesDirectory() -> URL {
getAppDirectory().appendingPathComponent("app_files", isDirectory: true)
}
+1 -1
View File
@@ -15,7 +15,7 @@ void haskell_init(void) {
char *argv[] = {
"simplex",
"+RTS", // requires `hs_init_with_rtsopts`
"-A64m", // chunk size for new allocations
"-A16m", // chunk size for new allocations
"-H64m", // initial heap size
"-xn", // non-moving GC
0
+11 -116
View File
@@ -202,9 +202,6 @@
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld блокирани съобщения";
/* No comment provided by engineer. */
"%lld messages blocked by admin" = "%lld съобщения, блокирани от администратора";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld съобщения, маркирани като изтрити";
@@ -401,9 +398,6 @@
/* No comment provided by engineer. */
"All group members will remain connected." = "Всички членове на групата ще останат свързани.";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone!" = "Всички съобщения ще бъдат изтрити - това не може да бъде отменено!";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Всички съобщения ще бъдат изтрити - това не може да бъде отменено! Съобщенията ще бъдат изтрити САМО за вас.";
@@ -587,32 +581,17 @@
/* No comment provided by engineer. */
"Block" = "Блокирай";
/* No comment provided by engineer. */
"Block for all" = "Блокирай за всички";
/* No comment provided by engineer. */
"Block group members" = "Блокиране на членове на групата";
/* No comment provided by engineer. */
"Block member" = "Блокирай член";
/* No comment provided by engineer. */
"Block member for all?" = "Блокиране на член за всички?";
/* No comment provided by engineer. */
"Block member?" = "Блокирай члена?";
/* marked deleted chat item preview text */
"blocked" = "блокиран";
/* rcv group event chat item */
"blocked %@" = "блокиран %@";
/* marked deleted chat item preview text */
"blocked by admin" = "блокиран от админ";
/* No comment provided by engineer. */
"Blocked by admin" = "Блокиран от админ";
"blocked" = "блокиран";
/* No comment provided by engineer. */
"bold" = "удебелен";
@@ -706,7 +685,7 @@
"Change self-destruct passcode" = "Промени кода за достъп за самоунищожение";
/* chat item text */
"changed address for you" = "адреса за изпращане е променен";
"changed address for you" = "променен е адреса за вас";
/* rcv group event chat item */
"changed role of %@ to %@" = "променена роля от %1$@ на %2$@";
@@ -771,9 +750,6 @@
/* No comment provided by engineer. */
"Clear conversation?" = "Изчисти разговора?";
/* No comment provided by engineer. */
"Clear private notes?" = "Изчистване на лични бележки?";
/* No comment provided by engineer. */
"Clear verification" = "Изчисти проверката";
@@ -912,9 +888,6 @@
/* connection information */
"connection:%@" = "връзка:%@";
/* profile update event chat item */
"contact %@ changed to %@" = "името на контакта %1$@ е променено на %2$@";
/* No comment provided by engineer. */
"Contact allows" = "Контактът позволява";
@@ -999,12 +972,6 @@
/* No comment provided by engineer. */
"Create your profile" = "Създай своя профил";
/* No comment provided by engineer. */
"Created at" = "Създаден на";
/* copied message info */
"Created at: %@" = "Създаден на: %@";
/* No comment provided by engineer. */
"Created on %@" = "Създаден на %@";
@@ -1324,7 +1291,7 @@
"Discover and join groups" = "Открийте и се присъединете към групи";
/* No comment provided by engineer. */
"Discover via local network" = "Откриване през локалната мрежа";
"Discover via local network" = "Открий през локалната мрежа";
/* No comment provided by engineer. */
"Do it later" = "Отложи";
@@ -1557,9 +1524,6 @@
/* No comment provided by engineer. */
"Error creating member contact" = "Грешка при създаване на контакт с член";
/* No comment provided by engineer. */
"Error creating message" = "Грешка при създаване на съобщение";
/* No comment provided by engineer. */
"Error creating profile!" = "Грешка при създаване на профил!";
@@ -1974,9 +1938,6 @@
/* No comment provided by engineer. */
"Import database" = "Импортиране на база данни";
/* No comment provided by engineer. */
"Improved message delivery" = "Подобрена доставка на съобщения";
/* No comment provided by engineer. */
"Improved privacy and security" = "Подобрена поверителност и сигурност";
@@ -2154,9 +2115,6 @@
/* No comment provided by engineer. */
"Join group" = "Влез в групата";
/* No comment provided by engineer. */
"Join group conversations" = "Присъединяване към групи";
/* No comment provided by engineer. */
"Join group?" = "Влез в групата?";
@@ -2292,9 +2250,6 @@
/* No comment provided by engineer. */
"Member" = "Член";
/* profile update event chat item */
"member %@ changed to %@" = "името на члена %1$@ е променено на %2$@";
/* rcv group event chat item */
"member connected" = "свързан";
@@ -2373,7 +2328,7 @@
/* copied message info */
"Moderated at: %@" = "Модерирано в: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "модерирано от %@";
/* time unit */
@@ -2639,18 +2594,12 @@
/* No comment provided by engineer. */
"Password to show" = "Парола за показване";
/* past/unknown group member */
"Past member %@" = "Бивш член %@";
/* No comment provided by engineer. */
"Paste desktop address" = "Постави адрес на настолно устройство";
/* No comment provided by engineer. */
"Paste image" = "Постави изображение";
/* No comment provided by engineer. */
"Paste link to connect!" = "Поставете линк, за да се свържете!";
/* No comment provided by engineer. */
"Paste the link you received" = "Постави получения линк";
@@ -2738,9 +2687,6 @@
/* No comment provided by engineer. */
"Private filenames" = "Поверителни имена на файлове";
/* name of notes to self */
"Private notes" = "Лични бележки";
/* No comment provided by engineer. */
"Profile and server connections" = "Профилни и сървърни връзки";
@@ -2855,9 +2801,6 @@
/* No comment provided by engineer. */
"Receiving via" = "Получаване чрез";
/* 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)." = "Скорошна история и подобрен [bot за директория за групи](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPd jdLW3%23%2F%3Fv%3D1-2% 26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).";
/* No comment provided by engineer. */
"Recipients see updates as you type them." = "Получателите виждат актуализации, докато ги въвеждате.";
@@ -2912,12 +2855,6 @@
/* rcv group event chat item */
"removed %@" = "отстранен %@";
/* profile update event chat item */
"removed contact address" = "премахнат адрес за контакт";
/* profile update event chat item */
"removed profile picture" = "премахната профилна снимка";
/* rcv group event chat item */
"removed you" = "ви острани";
@@ -3041,9 +2978,6 @@
/* No comment provided by engineer. */
"Save welcome message?" = "Запази съобщението при посрещане?";
/* message info title */
"Saved message" = "Запазено съобщение";
/* No comment provided by engineer. */
"Saved WebRTC ICE servers will be removed" = "Запазените WebRTC ICE сървъри ще бъдат премахнати";
@@ -3065,9 +2999,6 @@
/* No comment provided by engineer. */
"Search" = "Търсене";
/* No comment provided by engineer. */
"Search bar accepts invitation links." = "Лентата за търсене приема линк за връзка.";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Търсене или поставяне на SimpleX линк";
@@ -3224,12 +3155,6 @@
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Задайте го вместо системната идентификация.";
/* profile update event chat item */
"set new contact address" = "зададен нов адрес за контакт";
/* profile update event chat item */
"set new profile picture" = "зададена нова профилна снимка";
/* No comment provided by engineer. */
"Set passcode" = "Задай kод за достъп";
@@ -3599,9 +3524,6 @@
/* No comment provided by engineer. */
"Trying to connect to the server used to receive messages from this contact." = "Опит за свързване със сървъра, използван за получаване на съобщения от този контакт.";
/* No comment provided by engineer. */
"Turkish interface" = "Турски интерфейс";
/* No comment provided by engineer. */
"Turn off" = "Изключи";
@@ -3614,21 +3536,12 @@
/* No comment provided by engineer. */
"Unblock" = "Отблокирай";
/* No comment provided by engineer. */
"Unblock for all" = "Отблокирай за всички";
/* No comment provided by engineer. */
"Unblock member" = "Отблокирай член";
/* No comment provided by engineer. */
"Unblock member for all?" = "Отблокиране на член за всички?";
/* No comment provided by engineer. */
"Unblock member?" = "Отблокирай член?";
/* rcv group event chat item */
"unblocked %@" = "отблокиран %@";
/* item status description */
"Unexpected error: %@" = "Неочаквана грешка: %@";
@@ -3662,9 +3575,6 @@
/* No comment provided by engineer. */
"Unknown error" = "Непозната грешка";
/* No comment provided by engineer. */
"unknown status" = "неизвестен статус";
/* No comment provided by engineer. */
"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Освен ако не използвате интерфейса за повикване на iOS, активирайте режима \"Не безпокой\", за да избегнете прекъсвания.";
@@ -3710,9 +3620,6 @@
/* rcv group event chat item */
"updated group profile" = "актуализиран профил на групата";
/* profile update event chat item */
"updated profile" = "актуализиран профил";
/* No comment provided by engineer. */
"Updating settings will re-connect the client to all servers." = "Актуализирането на настройките ще свърже отново клиента към всички сървъри.";
@@ -3771,19 +3678,19 @@
"v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "Потвърди кода с настолното устройство";
"Verify code with desktop" = "Потвръди кода с настолното устройство";
/* No comment provided by engineer. */
"Verify connection" = "Потвърди връзка";
"Verify connection" = "Потвръди връзките";
/* No comment provided by engineer. */
"Verify connection security" = "Потвърди сигурността на връзката";
"Verify connection security" = "Потвръди сигурността на връзката";
/* No comment provided by engineer. */
"Verify connections" = "Потвърждение за свързване";
"Verify connections" = "Потвръди връзките";
/* No comment provided by engineer. */
"Verify security code" = "Потвърди кода за сигурност";
"Verify security code" = "Потвръди кода за сигурност";
/* No comment provided by engineer. */
"Via browser" = "Чрез браузър";
@@ -3887,15 +3794,9 @@
/* No comment provided by engineer. */
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Когато споделяте инкогнито профил с някого, този профил ще се използва за групите, в които той ви кани.";
/* No comment provided by engineer. */
"With encrypted files and media." = "С криптирани файлове и медия.";
/* No comment provided by engineer. */
"With optional welcome message." = "С незадължително съобщение при посрещане.";
/* No comment provided by engineer. */
"With reduced battery usage." = "С намален разход на батерията.";
/* No comment provided by engineer. */
"Wrong database passphrase" = "Грешна парола за базата данни";
@@ -3956,9 +3857,6 @@
/* No comment provided by engineer. */
"you are observer" = "вие сте наблюдател";
/* snd group event chat item */
"you blocked %@" = "вие блокирахте %@";
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Можете да приемате обаждания от заключен екран, без идентификация на устройство и приложението.";
@@ -4008,10 +3906,10 @@
"You can't send messages!" = "Не може да изпращате съобщения!";
/* chat item text */
"you changed address" = "адреса за получаване е променен";
"you changed address" = "променихте адреса";
/* chat item text */
"you changed address for %@" = "променихте адреса получаване за %@";
"you changed address for %@" = "променихте адреса за %@";
/* snd group event chat item */
"you changed role for yourself to %@" = "променихте ролята си на %@";
@@ -4070,9 +3968,6 @@
/* chat list item description */
"you shared one-time link incognito" = "споделихте еднократен инкогнито линк за връзка";
/* snd group event chat item */
"you unblocked %@" = "вие отблокирахте %@";
/* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Ще бъдете свързани с групата, когато устройството на домакина на групата е онлайн, моля, изчакайте или проверете по-късно!";
+1 -1
View File
@@ -2070,7 +2070,7 @@
/* copied message info */
"Moderated at: %@" = "Upraveno v: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "moderovaný %@";
/* time unit */
+10 -235
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Beste Privatsphäre**: Es wird kein SimpleX-Chat-Benachrichtigungs-Server genutzt, Nachrichten werden in periodischen Abständen im Hintergrund geprüft (dies hängt davon ab, wie häufig Sie die App nutzen).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Bitte beachten Sie**: Aus Sicherheitsgründen wird die Nachrichtenentschlüsselung Ihrer Verbindungen abgebrochen, wenn Sie die gleiche Datenbank auf zwei Geräten nutzen.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Bitte beachten Sie**: Das Passwort kann NICHT wiederhergestellt oder geändert werden, wenn Sie es vergessen haben oder verlieren.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Warnung**: Sofortige Push-Benachrichtigungen erfordern die Eingabe eines Passworts, welches in Ihrem Schlüsselbund gespeichert ist.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Warnung**: Das Archiv wird gelöscht.";
/* No comment provided by engineer. */
"*bold*" = "\\*fett*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ wurde mit Ihnen verbunden";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ heruntergeladen";
/* notification title */
"%@ is connected!" = "%@ ist mit Ihnen verbunden!";
@@ -157,9 +148,6 @@
/* No comment provided by engineer. */
"%@ servers" = "%@-Server";
/* No comment provided by engineer. */
"%@ uploaded" = "%@ hochgeladen";
/* notification title */
"%@ wants to connect!" = "%@ will sich mit Ihnen verbinden!";
@@ -389,9 +377,6 @@
/* member role */
"admin" = "Admin";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Administratoren können für ein Mitglied alle Funktionen blockieren.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Administratoren können Links für den Beitritt zu Gruppen erzeugen.";
@@ -431,9 +416,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Alle Ihre Kontakte bleiben verbunden. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Alle Ihre Kontakte, Unterhaltungen und Dateien werden sicher verschlüsselt und in Daten-Paketen auf die konfigurierten XTFP-Server hochgeladen.";
/* No comment provided by engineer. */
"Allow" = "Erlauben";
@@ -515,9 +497,6 @@
/* No comment provided by engineer. */
"App build: %@" = "App Build: %@";
/* No comment provided by engineer. */
"App data migration" = "App-Daten-Migration";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Neue lokale Dateien (außer Video-Dateien) werden von der App verschlüsselt.";
@@ -539,15 +518,6 @@
/* No comment provided by engineer. */
"Appearance" = "Erscheinungsbild";
/* No comment provided by engineer. */
"Apply" = "Anwenden";
/* No comment provided by engineer. */
"Archive and upload" = "Archivieren und Hochladen";
/* No comment provided by engineer. */
"Archiving database" = "Datenbank wird archiviert";
/* No comment provided by engineer. */
"Attach" = "Anhängen";
@@ -632,13 +602,13 @@
/* No comment provided by engineer. */
"Block member?" = "Mitglied blockieren?";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"blocked" = "Blockiert";
/* rcv group event chat item */
"blocked %@" = "%@ wurde blockiert";
/* marked deleted chat item preview text */
/* blocked chat item */
"blocked by admin" = "wurde vom Administrator blockiert";
/* No comment provided by engineer. */
@@ -695,9 +665,6 @@
/* No comment provided by engineer. */
"Cancel" = "Abbrechen";
/* No comment provided by engineer. */
"Cancel migration" = "Migration abbrechen";
/* feature offered item */
"cancelled %@" = "abgebrochen %@";
@@ -777,9 +744,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Der Chat ist angehalten. Wenn Sie diese Datenbank bereits auf einem anderen Gerät genutzt haben, sollten Sie diese vor dem Starten des Chats wieder zurückspielen.";
/* No comment provided by engineer. */
"Chat migrated!" = "Chat wurde migriert!";
/* No comment provided by engineer. */
"Chat preferences" = "Chat-Präferenzen";
@@ -792,9 +756,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Chinesische und spanische Bedienoberfläche";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Wählen Sie auf dem neuen Gerät _Von einem anderen Gerät migrieren_ und scannen Sie den QR-Code.";
/* No comment provided by engineer. */
"Choose file" = "Datei auswählen";
@@ -840,9 +801,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Datenbank-Aktualisierungen bestätigen";
/* No comment provided by engineer. */
"Confirm network settings" = "Bestätigen Sie die Netzwerkeinstellungen";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Neues Passwort bestätigen…";
@@ -852,12 +810,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Passwort bestätigen";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Für die Migration bestätigen Sie bitte, dass Sie sich an das Datenbank-Passwort erinnern.";
/* No comment provided by engineer. */
"Confirm upload" = "Hochladen bestätigen";
/* server test step */
"Connect" = "Verbinden";
@@ -961,7 +913,7 @@
"connection:%@" = "Verbindung:%@";
/* profile update event chat item */
"contact %@ changed to %@" = "Der Kontaktname wurde von %1$@ auf %2$@ geändert";
"contact %@ changed to %@" = "Der Kontaktname %1$@ wurde auf %2$@ geändert";
/* No comment provided by engineer. */
"Contact allows" = "Der Kontakt erlaubt";
@@ -1056,9 +1008,6 @@
/* No comment provided by engineer. */
"Created on %@" = "Erstellt am %@";
/* No comment provided by engineer. */
"Creating archive link" = "Archiv-Link erzeugen";
/* No comment provided by engineer. */
"Creating link…" = "Link wird erstellt…";
@@ -1206,9 +1155,6 @@
/* No comment provided by engineer. */
"Delete database" = "Datenbank löschen";
/* No comment provided by engineer. */
"Delete database from this device" = "Datenbank auf diesem Gerät löschen";
/* server test step */
"Delete file" = "Datei löschen";
@@ -1401,18 +1347,9 @@
/* No comment provided by engineer. */
"Downgrade and open chat" = "Datenbank herabstufen und den Chat öffnen";
/* No comment provided by engineer. */
"Download failed" = "Herunterladen fehlgeschlagen";
/* server test step */
"Download file" = "Datei herunterladen";
/* No comment provided by engineer. */
"Downloading archive" = "Archiv wird heruntergeladen";
/* No comment provided by engineer. */
"Downloading link details" = "Link-Details werden heruntergeladen";
/* No comment provided by engineer. */
"Duplicate display name!" = "Doppelter Anzeigename!";
@@ -1446,9 +1383,6 @@
/* No comment provided by engineer. */
"Enable for all" = "Für Alle aktivieren";
/* No comment provided by engineer. */
"Enable in direct chats (BETA)!" = "Kann in direkten Chats aktiviert werden (BETA)!";
/* No comment provided by engineer. */
"Enable instant notifications?" = "Sofortige Benachrichtigungen aktivieren?";
@@ -1563,9 +1497,6 @@
/* No comment provided by engineer. */
"Enter Passcode" = "Zugangscode eingeben";
/* No comment provided by engineer. */
"Enter passphrase" = "Passwort eingeben";
/* No comment provided by engineer. */
"Enter passphrase…" = "Passwort eingeben…";
@@ -1605,9 +1536,6 @@
/* No comment provided by engineer. */
"Error adding member(s)" = "Fehler beim Hinzufügen von Mitgliedern";
/* No comment provided by engineer. */
"Error allowing contact PQ encryption" = "Fehler beim Zulassen der Kontakt-PQ-Verschlüsselung";
/* No comment provided by engineer. */
"Error changing address" = "Fehler beim Wechseln der Empfängeradresse";
@@ -1662,9 +1590,6 @@
/* No comment provided by engineer. */
"Error deleting user profile" = "Fehler beim Löschen des Benutzerprofils";
/* No comment provided by engineer. */
"Error downloading the archive" = "Fehler beim Herunterladen des Archivs";
/* No comment provided by engineer. */
"Error enabling delivery receipts!" = "Fehler beim Aktivieren von Empfangsbestätigungen!";
@@ -1710,9 +1635,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Fehler beim Speichern des Passworts in den Schlüsselbund";
/* when migrating */
"Error saving settings" = "Fehler beim Abspeichern der Einstellungen";
/* No comment provided by engineer. */
"Error saving user password" = "Fehler beim Speichern des Benutzer-Passworts";
@@ -1755,12 +1677,6 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "Fehler beim Aktualisieren der Benutzer-Privatsphäre";
/* No comment provided by engineer. */
"Error uploading the archive" = "Fehler beim Hochladen des Archivs";
/* No comment provided by engineer. */
"Error verifying passphrase:" = "Fehler bei der Überprüfung des Passworts:";
/* No comment provided by engineer. */
"Error: " = "Fehler: ";
@@ -1794,9 +1710,6 @@
/* No comment provided by engineer. */
"Exported database archive." = "Exportiertes Datenbankarchiv.";
/* No comment provided by engineer. */
"Exported file doesn't exist" = "Die exportierte Datei ist nicht vorhanden";
/* No comment provided by engineer. */
"Exporting database archive…" = "Exportieren des Datenbank-Archivs…";
@@ -1839,12 +1752,6 @@
/* No comment provided by engineer. */
"Filter unread and favorite chats." = "Nach ungelesenen und favorisierten Chats filtern.";
/* No comment provided by engineer. */
"Finalize migration" = "Die Migration wird abgeschlossen";
/* No comment provided by engineer. */
"Finalize migration on another device." = "Die Migration auf dem anderen Gerät wird abgeschlossen.";
/* No comment provided by engineer. */
"Finally, we have them! 🚀" = "Endlich haben wir sie! 🚀";
@@ -2028,9 +1935,6 @@
/* No comment provided by engineer. */
"How to use your servers" = "Wie Sie Ihre Server nutzen";
/* No comment provided by engineer. */
"Hungarian interface" = "Ungarische Bedienoberfläche";
/* No comment provided by engineer. */
"ICE servers (one per line)" = "ICE-Server (einer pro Zeile)";
@@ -2070,12 +1974,6 @@
/* No comment provided by engineer. */
"Import database" = "Datenbank importieren";
/* No comment provided by engineer. */
"Import failed" = "Import ist fehlgeschlagen";
/* No comment provided by engineer. */
"Importing archive" = "Archiv wird importiert";
/* No comment provided by engineer. */
"Improved message delivery" = "Verbesserte Zustellung von Nachrichten";
@@ -2085,9 +1983,6 @@
/* No comment provided by engineer. */
"Improved server configuration" = "Verbesserte Serverkonfiguration";
/* No comment provided by engineer. */
"In order to continue, chat should be stopped." = "Um fortzufahren, sollte der Chat beendet werden.";
/* No comment provided by engineer. */
"In reply to" = "Als Antwort auf";
@@ -2172,9 +2067,6 @@
/* No comment provided by engineer. */
"Invalid link" = "Ungültiger Link";
/* No comment provided by engineer. */
"Invalid migration confirmation" = "Migrations-Bestätigung ungültig";
/* No comment provided by engineer. */
"Invalid name!" = "Ungültiger Name!";
@@ -2401,7 +2293,7 @@
"Member" = "Mitglied";
/* profile update event chat item */
"member %@ changed to %@" = "Der Mitgliedsname von %1$@ wurde auf %2$@ geändert";
"member %@ changed to %@" = "Der Mitgliedsname %1$@ wurde auf %2$@ geändert";
/* rcv group event chat item */
"member connected" = "ist der Gruppe beigetreten";
@@ -2439,9 +2331,6 @@
/* No comment provided by engineer. */
"Message text" = "Nachrichtentext";
/* No comment provided by engineer. */
"Message too large" = "Die Nachricht ist zu lang";
/* No comment provided by engineer. */
"Messages" = "Nachrichten";
@@ -2451,36 +2340,9 @@
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Die Nachrichten von %@ werden angezeigt!";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Nachrichten, Dateien und Anrufe sind durch **Ende-zu-Ende-Verschlüsselung** mit Perfect Forward Secrecy, Ablehnung und Einbruchs-Wiederherstellung geschützt.";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Nachrichten, Dateien und Anrufe sind durch **Quantum-resistente E2E-Verschlüsselung** mit Perfect Forward Secrecy, Ablehnung und Einbruchs-Wiederherstellung geschützt.";
/* No comment provided by engineer. */
"Migrate device" = "Gerät migrieren";
/* No comment provided by engineer. */
"Migrate from another device" = "Von einem anderen Gerät migrieren";
/* No comment provided by engineer. */
"Migrate here" = "Hierher migrieren";
/* No comment provided by engineer. */
"Migrate to another device" = "Auf ein anderes Gerät migrieren";
/* No comment provided by engineer. */
"Migrate to another device via QR code." = "Über einen QR-Code auf ein anderes Gerät migrieren.";
/* No comment provided by engineer. */
"Migrating" = "Migrieren";
/* No comment provided by engineer. */
"Migrating database archive…" = "Datenbank-Archiv wird migriert…";
/* No comment provided by engineer. */
"Migration complete" = "Migration abgeschlossen";
/* No comment provided by engineer. */
"Migration error:" = "Fehler bei der Migration:";
@@ -2511,7 +2373,7 @@
/* copied message info */
"Moderated at: %@" = "Moderiert um: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "Von %@ moderiert";
/* time unit */
@@ -2738,9 +2600,6 @@
/* No comment provided by engineer. */
"Open group" = "Gruppe öffnen";
/* authentication reason */
"Open migration to another device" = "Migration auf ein anderes Gerät öffnen";
/* No comment provided by engineer. */
"Open Settings" = "Geräte-Einstellungen öffnen";
@@ -2753,15 +2612,9 @@
/* No comment provided by engineer. */
"Opening app…" = "App wird geöffnet…";
/* No comment provided by engineer. */
"Or paste archive link" = "Oder fügen Sie den Archiv-Link ein";
/* No comment provided by engineer. */
"Or scan QR code" = "Oder den QR-Code scannen";
/* No comment provided by engineer. */
"Or securely share this file link" = "Oder teilen Sie diesen Datei-Link sicher";
/* No comment provided by engineer. */
"Or show this code" = "Oder diesen QR-Code anzeigen";
@@ -2813,9 +2666,6 @@
/* message decrypt error item */
"Permanent decryption error" = "Entschlüsselungsfehler";
/* No comment provided by engineer. */
"Picture-in-picture calls" = "Bild-in-Bild-Anrufe";
/* No comment provided by engineer. */
"PING count" = "PING-Zähler";
@@ -2834,9 +2684,6 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Bitte überprüfen sie sowohl Ihre, als auch die Präferenzen Ihres Kontakts.";
/* No comment provided by engineer. */
"Please confirm that network settings are correct for this device." = "Bitte bestätigen Sie, dass die Netzwerkeinstellungen auf diesem Gerät richtig sind.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Bitte nehmen Sie Kontakt mit den Entwicklern auf.\nFehler: %@";
@@ -2870,9 +2717,6 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig";
/* No comment provided by engineer. */
"Post-quantum E2EE" = "Post-Quantum E2E-Verschlüsselung";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Den letzten Nachrichtenentwurf, auch mit seinen Anhängen, aufbewahren.";
@@ -2954,15 +2798,6 @@
/* No comment provided by engineer. */
"Push notifications" = "Push-Benachrichtigungen";
/* No comment provided by engineer. */
"Push server" = "Push-Server";
/* chat item text */
"quantum resistant e2e encryption" = "Quantum-resistente E2E-Verschlüsselung";
/* No comment provided by engineer. */
"Quantum resistant encryption" = "Quantum-resistente Verschlüsselung";
/* No comment provided by engineer. */
"Rate the app" = "Bewerten Sie die App";
@@ -3078,10 +2913,10 @@
"removed %@" = "hat %@ aus der Gruppe entfernt";
/* profile update event chat item */
"removed contact address" = "Die Kontaktadresse wurde entfernt";
"removed contact address" = "Kontaktadresse wurde entfernt";
/* profile update event chat item */
"removed profile picture" = "Das Profil-Bild wurde entfernt";
"removed profile picture" = "Profil-Bild wurde entfernt";
/* rcv group event chat item */
"removed you" = "hat Sie aus der Gruppe entfernt";
@@ -3098,18 +2933,9 @@
/* No comment provided by engineer. */
"Repeat connection request?" = "Verbindungsanfrage wiederholen?";
/* No comment provided by engineer. */
"Repeat download" = "Herunterladen wiederholen";
/* No comment provided by engineer. */
"Repeat import" = "Import wiederholen";
/* No comment provided by engineer. */
"Repeat join request?" = "Verbindungsanfrage wiederholen?";
/* No comment provided by engineer. */
"Repeat upload" = "Hochladen wiederholen";
/* chat item action */
"Reply" = "Antwort";
@@ -3167,9 +2993,6 @@
/* No comment provided by engineer. */
"Run chat" = "Chat starten";
/* No comment provided by engineer. */
"Safer groups" = "Sicherere Gruppen";
/* chat item action */
"Save" = "Speichern";
@@ -3243,7 +3066,7 @@
"Search" = "Suche";
/* No comment provided by engineer. */
"Search bar accepts invitation links." = "In der Suchleiste werden nun auch Einladungslinks akzeptiert.";
"Search bar accepts invitation links." = "Von der Suchleiste werden Einladungslinks akzeptiert.";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Suchen oder fügen Sie den SimpleX-Link ein";
@@ -3402,17 +3225,14 @@
"Set it instead of system authentication." = "Anstelle der System-Authentifizierung festlegen.";
/* profile update event chat item */
"set new contact address" = "Es wurde eine neue Kontaktadresse festgelegt";
"set new contact address" = "Neue Kontaktadresse wurde festgelegt";
/* profile update event chat item */
"set new profile picture" = "Es wurde ein neues Profil-Bild festgelegt";
"set new profile picture" = "Neues Profil-Bild wurde festgelegt";
/* No comment provided by engineer. */
"Set passcode" = "Zugangscode einstellen";
/* No comment provided by engineer. */
"Set passphrase" = "Passwort festlegen";
/* No comment provided by engineer. */
"Set passphrase to export" = "Passwort für den Export festlegen";
@@ -3458,9 +3278,6 @@
/* No comment provided by engineer. */
"Show preview" = "Vorschau anzeigen";
/* No comment provided by engineer. */
"Show QR code" = "QR-Code anzeigen";
/* No comment provided by engineer. */
"Show:" = "Anzeigen:";
@@ -3521,9 +3338,6 @@
/* notification title */
"Somebody" = "Jemand";
/* chat item text */
"standard end-to-end encryption" = "Standard-Ende-zu-Ende-Verschlüsselung";
/* No comment provided by engineer. */
"Start chat" = "Starten Sie den Chat";
@@ -3539,9 +3353,6 @@
/* No comment provided by engineer. */
"Stop" = "Beenden";
/* No comment provided by engineer. */
"Stop chat" = "Chat beenden";
/* No comment provided by engineer. */
"Stop chat to enable database actions" = "Chat beenden, um Datenbankaktionen zu erlauben";
@@ -3569,9 +3380,6 @@
/* authentication reason */
"Stop SimpleX" = "Stoppen Sie SimpleX";
/* No comment provided by engineer. */
"Stopping chat" = "Chat wird beendet";
/* No comment provided by engineer. */
"strike" = "durchstreichen";
@@ -3722,12 +3530,6 @@
/* No comment provided by engineer. */
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Diese Aktion kann nicht rückgängig gemacht werden! Ihr Profil und Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.";
/* E2EE info chat item */
"This chat is protected by end-to-end encryption." = "Dieser Chat ist durch Ende-zu-Ende-Verschlüsselung geschützt.";
/* E2EE info chat item */
"This chat is protected by quantum resistant end-to-end encryption." = "Dieser Chat ist durch Quantum-resistente Ende-zu-Ende-Verschlüsselung geschützt.";
/* notification title */
"this contact" = "Dieser Kontakt";
@@ -3920,15 +3722,9 @@
/* No comment provided by engineer. */
"Upgrade and open chat" = "Aktualisieren und den Chat öffnen";
/* No comment provided by engineer. */
"Upload failed" = "Hochladen fehlgeschlagen";
/* server test step */
"Upload file" = "Datei hochladen";
/* No comment provided by engineer. */
"Uploading archive" = "Archiv wird hochgeladen";
/* No comment provided by engineer. */
"Use .onion hosts" = "Verwende .onion-Hosts";
@@ -3959,9 +3755,6 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Verwenden Sie SimpleX-Chat-Server?";
/* No comment provided by engineer. */
"Use the app while in the call." = "Die App kann während eines Anrufs genutzt werden.";
/* No comment provided by engineer. */
"User profile" = "Benutzerprofil";
@@ -3989,12 +3782,6 @@
/* No comment provided by engineer. */
"Verify connections" = "Verbindungen überprüfen";
/* No comment provided by engineer. */
"Verify database passphrase" = "Überprüfen Sie das Datenbank-Passwort";
/* No comment provided by engineer. */
"Verify passphrase" = "Überprüfen Sie das Passwort";
/* No comment provided by engineer. */
"Verify security code" = "Sicherheitscode überprüfen";
@@ -4073,9 +3860,6 @@
/* No comment provided by engineer. */
"wants to connect to you!" = "möchte sich mit Ihnen verbinden!";
/* No comment provided by engineer. */
"Warning: starting chat on multiple devices is not supported and will cause message delivery failures" = "Warnung: Das Starten des Chats auf mehreren Geräten wird nicht unterstützt und wird zu Fehlern bei der Nachrichtenübermittlung führen";
/* No comment provided by engineer. */
"Warning: you may lose some data!" = "Warnung: Sie könnten einige Daten verlieren!";
@@ -4091,9 +3875,6 @@
/* No comment provided by engineer. */
"Welcome message" = "Begrüßungsmeldung";
/* No comment provided by engineer. */
"Welcome message is too long" = "Die Begrüßungsmeldung ist zu lang";
/* No comment provided by engineer. */
"What's new" = "Was ist neu";
@@ -4130,9 +3911,6 @@
/* No comment provided by engineer. */
"You" = "Profil";
/* No comment provided by engineer. */
"You **must not** use the same database on two devices." = "Sie dürfen die selbe Datenbank **nicht** auf zwei Geräten nutzen.";
/* No comment provided by engineer. */
"You accepted connection" = "Sie haben die Verbindung akzeptiert";
@@ -4193,9 +3971,6 @@
/* No comment provided by engineer. */
"You can enable them later via app Privacy & Security settings." = "Sie können diese später in den Datenschutz & Sicherheits-Einstellungen der App aktivieren.";
/* No comment provided by engineer. */
"You can give another try." = "Sie können es nochmal probieren.";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.";
+5 -173
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Más privado**: no se usa el servidor de notificaciones de SimpleX Chat, los mensajes se comprueban periódicamente en segundo plano (dependiendo de la frecuencia con la que utilices la aplicación).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Tenga en cuenta**: usar la misma base de datos en dos dispositivos interrumpirá el descifrado de mensajes de sus conexiones, como protección de seguridad.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Atención**: NO podrás recuperar o cambiar la contraseña si la pierdes.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Advertencia**: Las notificaciones automáticas instantáneas requieren una contraseña guardada en Keychain.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Atención**: el archivo será eliminado.";
/* No comment provided by engineer. */
"*bold*" = "\\*bold*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ conectado";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ downloaded";
/* notification title */
"%@ is connected!" = "%@ ¡está conectado!";
@@ -211,9 +202,6 @@
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld mensaje(s) bloqueado(s)";
/* No comment provided by engineer. */
"%lld messages blocked by admin" = "%lld mensajes bloqueados por el administrador";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld mensaje(s) marcado(s) eliminado(s)";
@@ -386,9 +374,6 @@
/* member role */
"admin" = "administrador";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Los admins pueden bloquear un miembro por todos.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Los administradores pueden crear enlaces para unirse a grupos.";
@@ -413,9 +398,6 @@
/* No comment provided by engineer. */
"All group members will remain connected." = "Todos los miembros del grupo permanecerán conectados.";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone!" = "Todos los mensajes serán borrados. ¡No podrá deshacerse!";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!";
@@ -428,9 +410,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Todos tus contactos permanecerán conectados. La actualización del perfil se enviará a tus contactos.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Todos sus contactos, conversaciones y archivos se cifrarán de forma segura y se subirán en fragmentos hacia puntos XFTP configurados.";
/* No comment provided by engineer. */
"Allow" = "Se permite";
@@ -512,9 +491,6 @@
/* No comment provided by engineer. */
"App build: %@" = "Compilación app: %@";
/* No comment provided by engineer. */
"App data migration" = "Migración de datos de la aplicación";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Cifrado de los nuevos archivos locales (excepto vídeos).";
@@ -536,15 +512,6 @@
/* No comment provided by engineer. */
"Appearance" = "Apariencia";
/* No comment provided by engineer. */
"Apply" = "Aplicar";
/* No comment provided by engineer. */
"Archive and upload" = "Archivar y transferir";
/* No comment provided by engineer. */
"Archiving database" = "Archivando base de datos";
/* No comment provided by engineer. */
"Attach" = "Adjuntar";
@@ -614,32 +581,17 @@
/* No comment provided by engineer. */
"Block" = "Bloquear";
/* No comment provided by engineer. */
"Block for all" = "Bloquear para todos";
/* No comment provided by engineer. */
"Block group members" = "Bloquear miembros del grupo";
/* No comment provided by engineer. */
"Block member" = "Bloquear miembro";
/* No comment provided by engineer. */
"Block member for all?" = "¿Bloqear miembro para todos?";
/* No comment provided by engineer. */
"Block member?" = "¿Bloquear miembro?";
/* marked deleted chat item preview text */
"blocked" = "bloqueado";
/* rcv group event chat item */
"blocked %@" = "%@ bloqueado";
/* marked deleted chat item preview text */
"blocked by admin" = "bloqueado por el administrador";
/* No comment provided by engineer. */
"Blocked by admin" = "Bloqueado por el administrador";
"blocked" = "bloqueado";
/* No comment provided by engineer. */
"bold" = "negrita";
@@ -692,9 +644,6 @@
/* No comment provided by engineer. */
"Cancel" = "Cancelar";
/* No comment provided by engineer. */
"Cancel migration" = "Cancelar migración";
/* feature offered item */
"cancelled %@" = "cancelado %@";
@@ -774,9 +723,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Chat está detenido. Si estás usando esta base de datos en otro dispositivo, deberías transferirla de vuelta antes de iniciarlo.";
/* No comment provided by engineer. */
"Chat migrated!" = "Chat transferido !";
/* No comment provided by engineer. */
"Chat preferences" = "Preferencias de Chat";
@@ -789,9 +735,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Interfaz en chino y español";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Elija _Migrar desde otro dispositivo_ en el nuevo dispositivo y escanee el código QR.";
/* No comment provided by engineer. */
"Choose file" = "Elije archivo";
@@ -807,9 +750,6 @@
/* No comment provided by engineer. */
"Clear conversation?" = "¿Vaciar conversación?";
/* No comment provided by engineer. */
"Clear private notes?" = "¿Borrar notas privadas?";
/* No comment provided by engineer. */
"Clear verification" = "Eliminar verificación";
@@ -837,9 +777,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Confirmar actualizaciones de la bases de datos";
/* No comment provided by engineer. */
"Confirm network settings" = "Confirmar los ajustes de red";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Confirme nueva contraseña…";
@@ -849,9 +786,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Confirmar contraseña";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Confirme que recuerda la frase secreta de la base de datos para migrarla.";
/* server test step */
"Connect" = "Conectar";
@@ -954,9 +888,6 @@
/* connection information */
"connection:%@" = "conexión: % @";
/* profile update event chat item */
"contact %@ changed to %@" = "el contacto %1$@ ha cambiado a %2$@";
/* No comment provided by engineer. */
"Contact allows" = "El contacto permite";
@@ -1041,12 +972,6 @@
/* No comment provided by engineer. */
"Create your profile" = "Crea tu perfil";
/* No comment provided by engineer. */
"Created at" = "Creado";
/* copied message info */
"Created at: %@" = "Creado: %@";
/* No comment provided by engineer. */
"Created on %@" = "Creado en %@";
@@ -1371,9 +1296,6 @@
/* No comment provided by engineer. */
"Do it later" = "Hacer más tarde";
/* No comment provided by engineer. */
"Do not send history to new members." = "No enviar historial a miembros nuevos.";
/* No comment provided by engineer. */
"Do NOT use SimpleX for emergency calls." = "NO uses SimpleX para llamadas de emergencia.";
@@ -1599,9 +1521,6 @@
/* No comment provided by engineer. */
"Error creating member contact" = "Error al establecer contacto con el miembro";
/* No comment provided by engineer. */
"Error creating message" = "Error al crear mensaje";
/* No comment provided by engineer. */
"Error creating profile!" = "¡Error al crear perfil!";
@@ -1956,9 +1875,6 @@
/* No comment provided by engineer. */
"History" = "Historial";
/* No comment provided by engineer. */
"History is not sent to new members." = "El historial no se envía a miembros nuevos.";
/* time unit */
"hours" = "horas";
@@ -2016,9 +1932,6 @@
/* No comment provided by engineer. */
"Import database" = "Importar base de datos";
/* No comment provided by engineer. */
"Improved message delivery" = "Entrega de mensajes mejorada";
/* No comment provided by engineer. */
"Improved privacy and security" = "Seguridad y privacidad mejoradas";
@@ -2103,9 +2016,6 @@
/* invalid chat item */
"invalid data" = "datos no válidos";
/* No comment provided by engineer. */
"Invalid display name!" = "¡Nombre mostrado no válido!";
/* No comment provided by engineer. */
"Invalid link" = "Enlace no válido";
@@ -2196,9 +2106,6 @@
/* No comment provided by engineer. */
"Join group" = "Unirte al grupo";
/* No comment provided by engineer. */
"Join group conversations" = "Unirse a la conversación del grupo";
/* No comment provided by engineer. */
"Join group?" = "¿Unirte al grupo?";
@@ -2334,9 +2241,6 @@
/* No comment provided by engineer. */
"Member" = "Miembro";
/* profile update event chat item */
"member %@ changed to %@" = "el miembro %1$@ ha cambiado a %2$@";
/* rcv group event chat item */
"member connected" = "conectado";
@@ -2415,7 +2319,7 @@
/* copied message info */
"Moderated at: %@" = "Moderado: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "moderado por %@";
/* time unit */
@@ -2681,18 +2585,12 @@
/* No comment provided by engineer. */
"Password to show" = "Contraseña para hacerlo visible";
/* past/unknown group member */
"Past member %@" = "Miembro pasado %@";
/* No comment provided by engineer. */
"Paste desktop address" = "Pegar dirección de ordenador";
/* No comment provided by engineer. */
"Paste image" = "Pegar imagen";
/* No comment provided by engineer. */
"Paste link to connect!" = "Pegar enlace para conectar!";
/* No comment provided by engineer. */
"Paste the link you received" = "Pegar el enlace recibido";
@@ -2780,9 +2678,6 @@
/* No comment provided by engineer. */
"Private filenames" = "Nombres de archivos privados";
/* name of notes to self */
"Private notes" = "Notas privadas";
/* No comment provided by engineer. */
"Profile and server connections" = "Perfil y conexiones de servidor";
@@ -2897,9 +2792,6 @@
/* No comment provided by engineer. */
"Receiving via" = "Recibiendo vía";
/* 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)." = "Historial reciente y [bot del directorio](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) mejorados.";
/* No comment provided by engineer. */
"Recipients see updates as you type them." = "Los destinatarios ven actualizarse mientras escribes.";
@@ -2954,12 +2846,6 @@
/* rcv group event chat item */
"removed %@" = "ha expulsado a %@";
/* profile update event chat item */
"removed contact address" = "dirección de contacto eliminada";
/* profile update event chat item */
"removed profile picture" = "imagen de perfil eliminada";
/* rcv group event chat item */
"removed you" = "te ha expulsado";
@@ -3083,9 +2969,6 @@
/* No comment provided by engineer. */
"Save welcome message?" = "¿Guardar mensaje de bienvenida?";
/* message info title */
"Saved message" = "Mensaje guardado";
/* No comment provided by engineer. */
"Saved WebRTC ICE servers will be removed" = "Los servidores WebRTC ICE guardados serán eliminados";
@@ -3107,9 +2990,6 @@
/* No comment provided by engineer. */
"Search" = "Buscar";
/* No comment provided by engineer. */
"Search bar accepts invitation links." = "La barra de búsqueda acepta enlaces de invitación.";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Buscar o pegar enlace SimpleX";
@@ -3191,9 +3071,6 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Envíalos desde la galería o desde teclados personalizados.";
/* No comment provided by engineer. */
"Send up to 100 last messages to new members." = "Enviar hasta 100 últimos mensajes a los miembros nuevos.";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "El remitente ha cancelado la transferencia de archivos.";
@@ -3266,12 +3143,6 @@
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Úsalo en lugar de la autenticación del sistema.";
/* profile update event chat item */
"set new contact address" = "nueva dirección de contacto";
/* profile update event chat item */
"set new profile picture" = "nueva imagen de perfil";
/* No comment provided by engineer. */
"Set passcode" = "Código autodestrucción";
@@ -3564,13 +3435,13 @@
"They can be overridden in contact and group settings." = "Se pueden anular en la configuración de contactos.";
/* No comment provided by engineer. */
"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Esta acción es irreversible. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán.";
"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Esta acción no se puede deshacer. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán.";
/* No comment provided by engineer. */
"This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Esta acción es irreversible. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos.";
"This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Esta acción no se puede deshacer. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos.";
/* No comment provided by engineer. */
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Esta acción es irreversible. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.";
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Esta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.";
/* notification title */
"this contact" = "este contacto";
@@ -3578,9 +3449,6 @@
/* No comment provided by engineer. */
"This device name" = "Nombre del dispositivo";
/* No comment provided by engineer. */
"This display name is invalid. Please choose another name." = "Éste nombre mostrado no es válido. Por favor, elije otro nombre.";
/* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Este grupo tiene más de %lld miembros, no se enviarán confirmaciones de entrega.";
@@ -3641,9 +3509,6 @@
/* No comment provided by engineer. */
"Trying to connect to the server used to receive messages from this contact." = "Intentando conectar con el servidor usado para recibir mensajes de este contacto.";
/* No comment provided by engineer. */
"Turkish interface" = "Interfaz en turco";
/* No comment provided by engineer. */
"Turn off" = "Desactivar";
@@ -3656,21 +3521,12 @@
/* No comment provided by engineer. */
"Unblock" = "Desbloquear";
/* No comment provided by engineer. */
"Unblock for all" = "Desbloquear para todos";
/* No comment provided by engineer. */
"Unblock member" = "Desbloquear miembro";
/* No comment provided by engineer. */
"Unblock member for all?" = "¿Desbloquear miembro para todos?";
/* No comment provided by engineer. */
"Unblock member?" = "¿Desbloquear miembro?";
/* rcv group event chat item */
"unblocked %@" = "%@ desbloqueado";
/* item status description */
"Unexpected error: %@" = "Error inesperado: %@";
@@ -3704,9 +3560,6 @@
/* No comment provided by engineer. */
"Unknown error" = "Error desconocido";
/* No comment provided by engineer. */
"unknown status" = "estado desconocido";
/* No comment provided by engineer. */
"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "A menos que utilices la interfaz de llamadas de iOS, activa el modo No molestar para evitar interrupciones.";
@@ -3731,9 +3584,6 @@
/* No comment provided by engineer. */
"Unread" = "No leído";
/* No comment provided by engineer. */
"Up to 100 last messages are sent to new members." = "Hasta 100 últimos mensajes son enviados a los miembros nuevos.";
/* No comment provided by engineer. */
"Update" = "Actualizar";
@@ -3752,9 +3602,6 @@
/* rcv group event chat item */
"updated group profile" = "ha actualizado el perfil del grupo";
/* profile update event chat item */
"updated profile" = "perfil actualizado";
/* No comment provided by engineer. */
"Updating settings will re-connect the client to all servers." = "Al actualizar la configuración el cliente se reconectará a todos los servidores.";
@@ -3863,9 +3710,6 @@
/* No comment provided by engineer. */
"View security code" = "Mostrar código de seguridad";
/* chat feature */
"Visible history" = "Historial visible";
/* No comment provided by engineer. */
"Voice message…" = "Mensaje de voz…";
@@ -3929,15 +3773,9 @@
/* No comment provided by engineer. */
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Cuando compartes un perfil incógnito con alguien, este perfil también se usará para los grupos a los que te inviten.";
/* No comment provided by engineer. */
"With encrypted files and media." = "Con cifrado de archivos y multimedia.";
/* No comment provided by engineer. */
"With optional welcome message." = "Con mensaje de bienvenida opcional.";
/* No comment provided by engineer. */
"With reduced battery usage." = "Con uso reducido de batería.";
/* No comment provided by engineer. */
"Wrong database passphrase" = "Contraseña de base de datos incorrecta";
@@ -3998,9 +3836,6 @@
/* No comment provided by engineer. */
"you are observer" = "Tu rol es observador";
/* snd group event chat item */
"you blocked %@" = "has bloqueado a %@";
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Puede aceptar llamadas desde la pantalla de bloqueo, sin autenticación de dispositivos y aplicaciones.";
@@ -4112,9 +3947,6 @@
/* chat list item description */
"you shared one-time link incognito" = "has compartido enlace de un solo uso en modo incógnito";
/* snd group event chat item */
"you unblocked %@" = "has desbloqueado a %@";
/* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde.";
+1 -1
View File
@@ -2046,7 +2046,7 @@
/* copied message info */
"Moderated at: %@" = "Moderoitu klo: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "%@ moderoi";
/* time unit */
+13 -271
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Confidentiel** : ne pas utiliser le serveur de notifications SimpleX, vérification de nouveaux messages periodiquement en arrière plan (dépend de l'utilisation de l'app).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Remarque**: l'utilisation de la même base de données sur deux appareils interrompt le déchiffrement des messages provenant de vos connexions, par mesure de sécurité.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Veuillez noter** : vous NE pourrez PAS récupérer ou modifier votre phrase secrète si vous la perdez.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Avertissement** : les notifications push instantanées nécessitent une phrase secrète enregistrée dans la keychain.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Avertissement**: l'archive sera supprimée.";
/* No comment provided by engineer. */
"*bold*" = "\\*gras*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ connecté(e)";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ téléchargé";
/* notification title */
"%@ is connected!" = "%@ est connecté·e !";
@@ -157,9 +148,6 @@
/* No comment provided by engineer. */
"%@ servers" = "Serveurs %@";
/* No comment provided by engineer. */
"%@ uploaded" = "%@ envoyé";
/* notification title */
"%@ wants to connect!" = "%@ veut se connecter !";
@@ -214,9 +202,6 @@
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld messages bloqués";
/* No comment provided by engineer. */
"%lld messages blocked by admin" = "%lld messages bloqués par l'administrateur";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld messages marqués comme supprimés";
@@ -389,9 +374,6 @@
/* member role */
"admin" = "admin";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Les admins peuvent bloquer un membre pour tous.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Les admins peuvent créer les liens qui permettent de rejoindre les groupes.";
@@ -399,10 +381,10 @@
"Advanced network settings" = "Paramètres réseau avancés";
/* chat item text */
"agreeing encryption for %@…" = "négociation du chiffrement avec %@…";
"agreeing encryption for %@…" = "accord sur le chiffrement pour %@…";
/* chat item text */
"agreeing encryption…" = "négociation du chiffrement…";
"agreeing encryption…" = "accord sur le chiffrement…";
/* No comment provided by engineer. */
"All app data is deleted." = "Toutes les données de l'application sont supprimées.";
@@ -431,9 +413,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Tous vos contacts resteront connectés. La mise à jour du profil sera envoyée à vos contacts.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Tous vos contacts, conversations et fichiers seront chiffrés en toute sécurité et transférés par morceaux vers les relais XFTP configurés.";
/* No comment provided by engineer. */
"Allow" = "Autoriser";
@@ -515,9 +494,6 @@
/* No comment provided by engineer. */
"App build: %@" = "Build de l'app : %@";
/* No comment provided by engineer. */
"App data migration" = "Transfert des données de l'application";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "L'application chiffre les nouveaux fichiers locaux (sauf les vidéos).";
@@ -539,15 +515,6 @@
/* No comment provided by engineer. */
"Appearance" = "Apparence";
/* No comment provided by engineer. */
"Apply" = "Appliquer";
/* No comment provided by engineer. */
"Archive and upload" = "Archiver et transférer";
/* No comment provided by engineer. */
"Archiving database" = "Archivage de la base de données";
/* No comment provided by engineer. */
"Attach" = "Attacher";
@@ -617,32 +584,17 @@
/* No comment provided by engineer. */
"Block" = "Bloquer";
/* No comment provided by engineer. */
"Block for all" = "Bloqué pour tous";
/* No comment provided by engineer. */
"Block group members" = "Bloquer des membres d'un groupe";
/* No comment provided by engineer. */
"Block member" = "Bloquer ce membre";
/* No comment provided by engineer. */
"Block member for all?" = "Bloquer le membre pour tous?";
/* No comment provided by engineer. */
"Block member?" = "Bloquer ce membre ?";
/* marked deleted chat item preview text */
"blocked" = "blocké";
/* rcv group event chat item */
"blocked %@" = "%@ bloqué";
/* marked deleted chat item preview text */
"blocked by admin" = "bloqué par l'administrateur";
/* No comment provided by engineer. */
"Blocked by admin" = "Bloqué par l'administrateur";
"blocked" = "blocké";
/* No comment provided by engineer. */
"bold" = "gras";
@@ -695,9 +647,6 @@
/* No comment provided by engineer. */
"Cancel" = "Annuler";
/* No comment provided by engineer. */
"Cancel migration" = "Annuler le transfert";
/* feature offered item */
"cancelled %@" = "annulé %@";
@@ -739,7 +688,7 @@
"Change self-destruct passcode" = "Modifier le code d'autodestruction";
/* chat item text */
"changed address for you" = "changement de l'adresse du contact";
"changed address for you" = "adresse modifiée pour vous";
/* rcv group event chat item */
"changed role of %@ to %@" = "a modifié le rôle de %1$@ pour %2$@";
@@ -777,9 +726,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Le chat est arrêté. Si vous avez déjà utilisé cette base de données sur un autre appareil, vous devez la transférer à nouveau avant de démarrer le chat.";
/* No comment provided by engineer. */
"Chat migrated!" = "Messagerie transférée!";
/* No comment provided by engineer. */
"Chat preferences" = "Préférences de chat";
@@ -792,9 +738,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Interface en chinois et en espagnol";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Choisissez _Transferer depuis un autre appareil_ sur le nouvel appareil et scannez le code QR.";
/* No comment provided by engineer. */
"Choose file" = "Choisir le fichier";
@@ -840,9 +783,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Confirmer la mise à niveau de la base de données";
/* No comment provided by engineer. */
"Confirm network settings" = "Confirmer les paramètres réseau";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Confirmer la nouvelle phrase secrète…";
@@ -852,12 +792,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Confirmer le mot de passe";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Confirmer que vous vous souvenez de la phrase secrète de la base de données pour la transférer.";
/* No comment provided by engineer. */
"Confirm upload" = "Confirmer la transmission";
/* server test step */
"Connect" = "Se connecter";
@@ -1015,7 +949,7 @@
"Create a group using a random profile." = "Création de groupes via un profil aléatoire.";
/* No comment provided by engineer. */
"Create an address to let people connect with you." = "Vous pouvez créer une adresse pour permettre aux autres utilisateurs de vous contacter.";
"Create an address to let people connect with you." = "Créez une adresse pour permettre aux gens de vous contacter.";
/* server test step */
"Create file" = "Créer un fichier";
@@ -1056,9 +990,6 @@
/* No comment provided by engineer. */
"Created on %@" = "Créé le %@";
/* No comment provided by engineer. */
"Creating archive link" = "Création d'un lien d'archive";
/* No comment provided by engineer. */
"Creating link…" = "Création d'un lien…";
@@ -1206,9 +1137,6 @@
/* No comment provided by engineer. */
"Delete database" = "Supprimer la base de données";
/* No comment provided by engineer. */
"Delete database from this device" = "Supprimer la base de données de cet appareil";
/* server test step */
"Delete file" = "Supprimer le fichier";
@@ -1401,18 +1329,9 @@
/* No comment provided by engineer. */
"Downgrade and open chat" = "Rétrograder et ouvrir le chat";
/* No comment provided by engineer. */
"Download failed" = "Échec du téléchargement";
/* server test step */
"Download file" = "Télécharger le fichier";
/* No comment provided by engineer. */
"Downloading archive" = "Téléchargement de l'archive";
/* No comment provided by engineer. */
"Downloading link details" = "Téléchargement des détails du lien";
/* No comment provided by engineer. */
"Duplicate display name!" = "Nom d'affichage en double !";
@@ -1446,9 +1365,6 @@
/* No comment provided by engineer. */
"Enable for all" = "Activer pour tous";
/* No comment provided by engineer. */
"Enable in direct chats (BETA)!" = "Activé dans les conversations directes (BETA)!";
/* No comment provided by engineer. */
"Enable instant notifications?" = "Activer les notifications instantanées?";
@@ -1563,9 +1479,6 @@
/* No comment provided by engineer. */
"Enter Passcode" = "Entrer le code d'accès";
/* No comment provided by engineer. */
"Enter passphrase" = "Entrer la phrase secrète";
/* No comment provided by engineer. */
"Enter passphrase…" = "Entrez la phrase secrète…";
@@ -1605,9 +1518,6 @@
/* No comment provided by engineer. */
"Error adding member(s)" = "Erreur lors de l'ajout de membre·s";
/* No comment provided by engineer. */
"Error allowing contact PQ encryption" = "Erreur lors de la négociation du chiffrement PQ";
/* No comment provided by engineer. */
"Error changing address" = "Erreur de changement d'adresse";
@@ -1662,9 +1572,6 @@
/* No comment provided by engineer. */
"Error deleting user profile" = "Erreur lors de la suppression du profil utilisateur";
/* No comment provided by engineer. */
"Error downloading the archive" = "Erreur lors du téléchargement de l'archive";
/* No comment provided by engineer. */
"Error enabling delivery receipts!" = "Erreur lors de l'activation des accusés de réception!";
@@ -1710,9 +1617,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Erreur lors de l'enregistrement de la phrase de passe dans la keychain";
/* when migrating */
"Error saving settings" = "Erreur lors de l'enregistrement des paramètres";
/* No comment provided by engineer. */
"Error saving user password" = "Erreur d'enregistrement du mot de passe de l'utilisateur";
@@ -1755,12 +1659,6 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "Erreur de mise à jour de la confidentialité de l'utilisateur";
/* No comment provided by engineer. */
"Error uploading the archive" = "Erreur lors de l'envoi de l'archive";
/* No comment provided by engineer. */
"Error verifying passphrase:" = "Erreur lors de la vérification de la phrase secrète:";
/* No comment provided by engineer. */
"Error: " = "Erreur : ";
@@ -1783,7 +1681,7 @@
"Exit without saving" = "Quitter sans enregistrer";
/* chat item action */
"Expand" = "Étendre";
"Expand" = "Développer";
/* No comment provided by engineer. */
"Export database" = "Exporter la base de données";
@@ -1794,9 +1692,6 @@
/* No comment provided by engineer. */
"Exported database archive." = "Archive de la base de données exportée.";
/* No comment provided by engineer. */
"Exported file doesn't exist" = "Le fichier exporté n'existe pas";
/* No comment provided by engineer. */
"Exporting database archive…" = "Exportation de l'archive de la base de données…";
@@ -1839,12 +1734,6 @@
/* No comment provided by engineer. */
"Filter unread and favorite chats." = "Filtrer les messages non lus et favoris.";
/* No comment provided by engineer. */
"Finalize migration" = "Finaliser le transfert";
/* No comment provided by engineer. */
"Finalize migration on another device." = "Finalisez le transfert sur l'autre appareil.";
/* No comment provided by engineer. */
"Finally, we have them! 🚀" = "Enfin, les voilà ! 🚀";
@@ -2028,9 +1917,6 @@
/* No comment provided by engineer. */
"How to use your servers" = "Comment utiliser vos serveurs";
/* No comment provided by engineer. */
"Hungarian interface" = "Interface en hongrois";
/* No comment provided by engineer. */
"ICE servers (one per line)" = "Serveurs ICE (un par ligne)";
@@ -2070,12 +1956,6 @@
/* No comment provided by engineer. */
"Import database" = "Importer la base de données";
/* No comment provided by engineer. */
"Import failed" = "Échec de l'importation";
/* No comment provided by engineer. */
"Importing archive" = "Importation de l'archive";
/* No comment provided by engineer. */
"Improved message delivery" = "Amélioration de la transmission des messages";
@@ -2085,9 +1965,6 @@
/* No comment provided by engineer. */
"Improved server configuration" = "Configuration de serveur améliorée";
/* No comment provided by engineer. */
"In order to continue, chat should be stopped." = "Pour continuer, le chat doit être interrompu.";
/* No comment provided by engineer. */
"In reply to" = "En réponse à";
@@ -2172,9 +2049,6 @@
/* No comment provided by engineer. */
"Invalid link" = "Lien invalide";
/* No comment provided by engineer. */
"Invalid migration confirmation" = "Confirmation de migration invalide";
/* No comment provided by engineer. */
"Invalid name!" = "Nom invalide !";
@@ -2439,9 +2313,6 @@
/* No comment provided by engineer. */
"Message text" = "Texte du message";
/* No comment provided by engineer. */
"Message too large" = "Message trop volumineux";
/* No comment provided by engineer. */
"Messages" = "Messages";
@@ -2451,36 +2322,9 @@
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Les messages de %@ seront affichés !";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Les messages, fichiers et appels sont protégés par un chiffrement **de bout en bout** avec une confidentialité persistante, une répudiation et une récupération en cas d'effraction.";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Les messages, fichiers et appels sont protégés par un chiffrement **2e2 résistant post-quantique** avec une confidentialité persistante, une répudiation et une récupération en cas d'effraction.";
/* No comment provided by engineer. */
"Migrate device" = "Transférer l'appareil";
/* No comment provided by engineer. */
"Migrate from another device" = "Transférer depuis un autre appareil";
/* No comment provided by engineer. */
"Migrate here" = "Transférer ici";
/* No comment provided by engineer. */
"Migrate to another device" = "Transférer vers un autre appareil";
/* No comment provided by engineer. */
"Migrate to another device via QR code." = "Transférer vers un autre appareil via un code QR.";
/* No comment provided by engineer. */
"Migrating" = "Transfert";
/* No comment provided by engineer. */
"Migrating database archive…" = "Migration de l'archive de la base de données…";
/* No comment provided by engineer. */
"Migration complete" = "Transfert terminé";
/* No comment provided by engineer. */
"Migration error:" = "Erreur de migration:";
@@ -2511,7 +2355,7 @@
/* copied message info */
"Moderated at: %@" = "Modéré à : %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "modéré par %@";
/* time unit */
@@ -2738,9 +2582,6 @@
/* No comment provided by engineer. */
"Open group" = "Ouvrir le groupe";
/* authentication reason */
"Open migration to another device" = "Ouvrir le transfert vers un autre appareil";
/* No comment provided by engineer. */
"Open Settings" = "Ouvrir les Paramètres";
@@ -2753,15 +2594,9 @@
/* No comment provided by engineer. */
"Opening app…" = "Ouverture de l'app…";
/* No comment provided by engineer. */
"Or paste archive link" = "Ou coller le lien de l'archive";
/* No comment provided by engineer. */
"Or scan QR code" = "Ou scanner le code QR";
/* No comment provided by engineer. */
"Or securely share this file link" = "Ou partagez en toute sécurité le lien de ce fichier";
/* No comment provided by engineer. */
"Or show this code" = "Ou présenter ce code";
@@ -2813,9 +2648,6 @@
/* message decrypt error item */
"Permanent decryption error" = "Erreur de déchiffrement";
/* No comment provided by engineer. */
"Picture-in-picture calls" = "Appels picture-in-picture";
/* No comment provided by engineer. */
"PING count" = "Nombre de PING";
@@ -2834,9 +2666,6 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Veuillez vérifier vos préférences ainsi que celles de votre contact.";
/* No comment provided by engineer. */
"Please confirm that network settings are correct for this device." = "Veuillez confirmer que les paramètres réseau de cet appareil sont corrects.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Veuillez contacter les développeurs.\nErreur: %@";
@@ -2870,9 +2699,6 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Il est possible que l'empreinte du certificat dans l'adresse du serveur soit incorrecte";
/* No comment provided by engineer. */
"Post-quantum E2EE" = "E2EE post-quantique";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Conserver le brouillon du dernier message, avec les pièces jointes.";
@@ -2954,15 +2780,6 @@
/* No comment provided by engineer. */
"Push notifications" = "Notifications push";
/* No comment provided by engineer. */
"Push server" = "Serveur Push";
/* chat item text */
"quantum resistant e2e encryption" = "chiffrement e2e résistant post-quantique";
/* No comment provided by engineer. */
"Quantum resistant encryption" = "Chiffrement résistant post-quantique";
/* No comment provided by engineer. */
"Rate the app" = "Évaluer l'app";
@@ -3098,18 +2915,9 @@
/* No comment provided by engineer. */
"Repeat connection request?" = "Répéter la demande de connexion ?";
/* No comment provided by engineer. */
"Repeat download" = "Répéter le téléchargement";
/* No comment provided by engineer. */
"Repeat import" = "Répéter l'importation";
/* No comment provided by engineer. */
"Repeat join request?" = "Répéter la requête d'adhésion ?";
/* No comment provided by engineer. */
"Repeat upload" = "Répéter l'envoi";
/* chat item action */
"Reply" = "Répondre";
@@ -3167,9 +2975,6 @@
/* No comment provided by engineer. */
"Run chat" = "Exécuter le chat";
/* No comment provided by engineer. */
"Safer groups" = "Groupes plus sûrs";
/* chat item action */
"Save" = "Enregistrer";
@@ -3402,17 +3207,14 @@
"Set it instead of system authentication." = "Il permet de remplacer l'authentification du système.";
/* profile update event chat item */
"set new contact address" = "a changé d'adresse de contact";
"set new contact address" = "définir une nouvelle adresse de contact";
/* profile update event chat item */
"set new profile picture" = "a changé d'image de profil";
"set new profile picture" = "définir une nouvelle image de profil";
/* No comment provided by engineer. */
"Set passcode" = "Définir le code d'accès";
/* No comment provided by engineer. */
"Set passphrase" = "Définir une phrase secrète";
/* No comment provided by engineer. */
"Set passphrase to export" = "Définir la phrase secrète pour l'export";
@@ -3456,10 +3258,7 @@
"Show last messages" = "Voir les derniers messages";
/* No comment provided by engineer. */
"Show preview" = "Afficher l'aperçu";
/* No comment provided by engineer. */
"Show QR code" = "Afficher le code QR";
"Show preview" = "Montrer l'aperçu";
/* No comment provided by engineer. */
"Show:" = "Afficher :";
@@ -3521,9 +3320,6 @@
/* notification title */
"Somebody" = "Quelqu'un";
/* chat item text */
"standard end-to-end encryption" = "chiffrement de bout en bout standard";
/* No comment provided by engineer. */
"Start chat" = "Démarrer le chat";
@@ -3539,9 +3335,6 @@
/* No comment provided by engineer. */
"Stop" = "Arrêter";
/* No comment provided by engineer. */
"Stop chat" = "Arrêter le chat";
/* No comment provided by engineer. */
"Stop chat to enable database actions" = "Arrêter le chat pour permettre des actions sur la base de données";
@@ -3569,9 +3362,6 @@
/* authentication reason */
"Stop SimpleX" = "Arrêter SimpleX";
/* No comment provided by engineer. */
"Stopping chat" = "Arrêt du chat";
/* No comment provided by engineer. */
"strike" = "barré";
@@ -3722,12 +3512,6 @@
/* No comment provided by engineer. */
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Cette action ne peut être annulée - votre profil, vos contacts, vos messages et vos fichiers seront irréversiblement perdus.";
/* E2EE info chat item */
"This chat is protected by end-to-end encryption." = "Cette discussion est protégée par un chiffrement de bout en bout.";
/* E2EE info chat item */
"This chat is protected by quantum resistant end-to-end encryption." = "Cette discussion est protégée par un chiffrement de bout en bout résistant post-quantique.";
/* notification title */
"this contact" = "ce contact";
@@ -3812,21 +3596,12 @@
/* No comment provided by engineer. */
"Unblock" = "Débloquer";
/* No comment provided by engineer. */
"Unblock for all" = "Débloquer pour tous";
/* No comment provided by engineer. */
"Unblock member" = "Débloquer ce membre";
/* No comment provided by engineer. */
"Unblock member for all?" = "Débloquer le membre pour tous?";
/* No comment provided by engineer. */
"Unblock member?" = "Débloquer ce membre ?";
/* rcv group event chat item */
"unblocked %@" = "%@ débloqué";
/* item status description */
"Unexpected error: %@" = "Erreur inattendue: %@";
@@ -3920,15 +3695,9 @@
/* No comment provided by engineer. */
"Upgrade and open chat" = "Mettre à niveau et ouvrir le chat";
/* No comment provided by engineer. */
"Upload failed" = "Échec de l'envoi";
/* server test step */
"Upload file" = "Transférer le fichier";
/* No comment provided by engineer. */
"Uploading archive" = "Envoi de l'archive";
/* No comment provided by engineer. */
"Use .onion hosts" = "Utiliser les hôtes .onions";
@@ -3959,9 +3728,6 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Utiliser les serveurs SimpleX Chat?";
/* No comment provided by engineer. */
"Use the app while in the call." = "Utiliser l'application pendant l'appel.";
/* No comment provided by engineer. */
"User profile" = "Profil d'utilisateur";
@@ -3969,7 +3735,7 @@
"Using .onion hosts requires compatible VPN provider." = "L'utilisation des hôtes .onion nécessite un fournisseur VPN compatible.";
/* No comment provided by engineer. */
"Using SimpleX Chat servers." = "Vous utilisez les serveurs SimpleX.";
"Using SimpleX Chat servers." = "Utilisation des serveurs SimpleX Chat.";
/* No comment provided by engineer. */
"v%@" = "v%@";
@@ -3989,12 +3755,6 @@
/* No comment provided by engineer. */
"Verify connections" = "Vérifier les connexions";
/* No comment provided by engineer. */
"Verify database passphrase" = "Vérifier la phrase secrète de la base de données";
/* No comment provided by engineer. */
"Verify passphrase" = "Vérifier la phrase secrète";
/* No comment provided by engineer. */
"Verify security code" = "Vérifier le code de sécurité";
@@ -4073,9 +3833,6 @@
/* No comment provided by engineer. */
"wants to connect to you!" = "veut établir une connexion !";
/* No comment provided by engineer. */
"Warning: starting chat on multiple devices is not supported and will cause message delivery failures" = "Attention: démarrer une session de chat sur plusieurs appareils n'est pas pris en charge et entraînera des dysfonctionnements au niveau de la transmission des messages";
/* No comment provided by engineer. */
"Warning: you may lose some data!" = "Attention : vous risquez de perdre des données !";
@@ -4091,9 +3848,6 @@
/* No comment provided by engineer. */
"Welcome message" = "Message de bienvenue";
/* No comment provided by engineer. */
"Welcome message is too long" = "Le message de bienvenue est trop long";
/* No comment provided by engineer. */
"What's new" = "Quoi de neuf ?";
@@ -4101,7 +3855,7 @@
"When available" = "Quand disponible";
/* 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.";
"When people request to connect, you can accept or reject it." = "Lorsque des personnes demandent à se connecter, vous pouvez les accepter ou les refuser.";
/* 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.";
@@ -4130,9 +3884,6 @@
/* No comment provided by engineer. */
"You" = "Vous";
/* No comment provided by engineer. */
"You **must not** use the same database on two devices." = "Vous **ne devez pas** utiliser la même base de données sur deux appareils.";
/* No comment provided by engineer. */
"You accepted connection" = "Vous avez accepté la connexion";
@@ -4178,9 +3929,6 @@
/* No comment provided by engineer. */
"you are observer" = "vous êtes observateur";
/* snd group event chat item */
"you blocked %@" = "vous avez bloqué %@";
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Vous pouvez accepter des appels à partir de l'écran de verrouillage, sans authentification de l'appareil ou de l'application.";
@@ -4193,9 +3941,6 @@
/* No comment provided by engineer. */
"You can enable them later via app Privacy & Security settings." = "Vous pouvez les activer ultérieurement via les paramètres de Confidentialité et Sécurité de l'application.";
/* No comment provided by engineer. */
"You can give another try." = "Vous pouvez faire un nouvel essai.";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.";
@@ -4215,7 +3960,7 @@
"You can share this address with your contacts to let them connect with **%@**." = "Vous pouvez partager cette adresse avec vos contacts pour leur permettre de se connecter avec **%@**.";
/* No comment provided by engineer. */
"You can share your address as a link or QR code - anybody can connect to you." = "Vous pouvez partager votre adresse sous la forme d'un lien ou d'un code QR - tout le monde peut l'utiliser pour vous contacter.";
"You can share your address as a link or QR code - anybody can connect to you." = "Vous pouvez partager votre adresse sous forme de lien ou de code QR - n'importe qui pourra se connecter à vous.";
/* No comment provided by engineer. */
"You can start chat via app Settings / Database or by restarting the app" = "Vous pouvez lancer le chat via Paramètres / Base de données ou en redémarrant l'app";
@@ -4295,9 +4040,6 @@
/* chat list item description */
"you shared one-time link incognito" = "vous avez partagé un lien unique en incognito";
/* snd group event chat item */
"you unblocked %@" = "vous avez débloqué %@";
/* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Vous serez connecté·e au groupe lorsque l'appareil de l'hôte sera en ligne, veuillez attendre ou vérifier plus tard !";
File diff suppressed because it is too large Load Diff
@@ -1,18 +0,0 @@
/* Bundle name */
"CFBundleName" = "SimpleX";
/* Privacy - Camera Usage Description */
"NSCameraUsageDescription" = "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.";
/* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "A SimpleX Face ID-t használ a helyi hitelesítéshez";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "A SimpleX helyi hálózati hozzáférést használ, hogy lehetővé tegye a felhasználói csevegőprofil használatát számítógépen keresztül ugyanazon a hálózaton.";
/* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "A SimpleX-nek mikrofon-hozzáférésre van szüksége hang- és videohívásokhoz, valamint hangüzenetek rögzítéséhez.";
/* Privacy - Photo Library Additions Usage Description */
"NSPhotoLibraryAddUsageDescription" = "A SimpleX-nek hozzáférésre van szüksége a Galériához a rögzített és fogadott média mentéséhez";
+5 -230
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Il più privato**: non usare il server di notifica di SimpleX Chat, controlla i messaggi periodicamente in secondo piano (dipende da quanto spesso usi l'app).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Nota bene**: usare lo stesso database su due dispositivi bloccherà la decifrazione dei messaggi dalle tue connessioni, come misura di sicurezza.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Nota bene**: NON potrai recuperare o cambiare la password se la perdi.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Attenzione**: le notifiche push istantanee richiedono una password salvata nel portachiavi.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Attenzione**: l'archivio verrà rimosso.";
/* No comment provided by engineer. */
"*bold*" = "\\*grassetto*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ si è connesso/a";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ scaricati";
/* notification title */
"%@ is connected!" = "%@ è connesso/a!";
@@ -157,9 +148,6 @@
/* No comment provided by engineer. */
"%@ servers" = "Server %@";
/* No comment provided by engineer. */
"%@ uploaded" = "%@ caricati";
/* notification title */
"%@ wants to connect!" = "%@ si vuole connettere!";
@@ -389,9 +377,6 @@
/* member role */
"admin" = "amministratore";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Gli amministratori possono bloccare un membro per tutti.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Gli amministratori possono creare i link per entrare nei gruppi.";
@@ -431,9 +416,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Tutti i tuoi contatti resteranno connessi. L'aggiornamento del profilo verrà inviato ai tuoi contatti.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Tutti i tuoi contatti, le conversazioni e i file verranno criptati in modo sicuro e caricati in blocchi sui relay XFTP configurati.";
/* No comment provided by engineer. */
"Allow" = "Consenti";
@@ -515,9 +497,6 @@
/* No comment provided by engineer. */
"App build: %@" = "Build dell'app: %@";
/* No comment provided by engineer. */
"App data migration" = "Migrazione dati dell'app";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "L'app cripta i nuovi file locali (eccetto i video).";
@@ -539,15 +518,6 @@
/* No comment provided by engineer. */
"Appearance" = "Aspetto";
/* No comment provided by engineer. */
"Apply" = "Applica";
/* No comment provided by engineer. */
"Archive and upload" = "Archivia e carica";
/* No comment provided by engineer. */
"Archiving database" = "Archiviazione del database";
/* No comment provided by engineer. */
"Attach" = "Allega";
@@ -632,13 +602,13 @@
/* No comment provided by engineer. */
"Block member?" = "Bloccare il membro?";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"blocked" = "bloccato";
/* rcv group event chat item */
"blocked %@" = "ha bloccato %@";
/* marked deleted chat item preview text */
/* blocked chat item */
"blocked by admin" = "bloccato dall'amministratore";
/* No comment provided by engineer. */
@@ -695,9 +665,6 @@
/* No comment provided by engineer. */
"Cancel" = "Annulla";
/* No comment provided by engineer. */
"Cancel migration" = "Annulla migrazione";
/* feature offered item */
"cancelled %@" = "annullato %@";
@@ -777,9 +744,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "La chat è ferma. Se hai già usato questo database su un altro dispositivo, dovresti trasferirlo prima di avviare la chat.";
/* No comment provided by engineer. */
"Chat migrated!" = "Chat migrata!";
/* No comment provided by engineer. */
"Chat preferences" = "Preferenze della chat";
@@ -792,9 +756,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Interfaccia cinese e spagnola";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Scegli _Migra da un altro dispositivo_ sul nuovo dispositivo e scansione il codice QR.";
/* No comment provided by engineer. */
"Choose file" = "Scegli file";
@@ -840,9 +801,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Conferma aggiornamenti database";
/* No comment provided by engineer. */
"Confirm network settings" = "Conferma le impostazioni di rete";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Conferma nuova password…";
@@ -852,12 +810,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Conferma password";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Conferma che ricordi la password del database da migrare.";
/* No comment provided by engineer. */
"Confirm upload" = "Conferma caricamento";
/* server test step */
"Connect" = "Connetti";
@@ -1056,9 +1008,6 @@
/* No comment provided by engineer. */
"Created on %@" = "Creato il %@";
/* No comment provided by engineer. */
"Creating archive link" = "Creazione link dell'archivio";
/* No comment provided by engineer. */
"Creating link…" = "Creazione link…";
@@ -1206,9 +1155,6 @@
/* No comment provided by engineer. */
"Delete database" = "Elimina database";
/* No comment provided by engineer. */
"Delete database from this device" = "Elimina il database da questo dispositivo";
/* server test step */
"Delete file" = "Elimina file";
@@ -1401,18 +1347,9 @@
/* No comment provided by engineer. */
"Downgrade and open chat" = "Esegui downgrade e apri chat";
/* No comment provided by engineer. */
"Download failed" = "Scaricamento fallito";
/* server test step */
"Download file" = "Scarica file";
/* No comment provided by engineer. */
"Downloading archive" = "Scaricamento archivio";
/* No comment provided by engineer. */
"Downloading link details" = "Scaricamento dettagli del link";
/* No comment provided by engineer. */
"Duplicate display name!" = "Nome da mostrare doppio!";
@@ -1446,9 +1383,6 @@
/* No comment provided by engineer. */
"Enable for all" = "Attiva per tutti";
/* No comment provided by engineer. */
"Enable in direct chats (BETA)!" = "Attivala nelle chat dirette (BETA)!";
/* No comment provided by engineer. */
"Enable instant notifications?" = "Attivare le notifiche istantanee?";
@@ -1563,9 +1497,6 @@
/* No comment provided by engineer. */
"Enter Passcode" = "Inserisci il codice di accesso";
/* No comment provided by engineer. */
"Enter passphrase" = "Inserisci password";
/* No comment provided by engineer. */
"Enter passphrase…" = "Inserisci la password…";
@@ -1605,9 +1536,6 @@
/* No comment provided by engineer. */
"Error adding member(s)" = "Errore di aggiunta membro/i";
/* No comment provided by engineer. */
"Error allowing contact PQ encryption" = "Errore nel consentire la crittografia PQ al contatto";
/* No comment provided by engineer. */
"Error changing address" = "Errore nella modifica dell'indirizzo";
@@ -1662,9 +1590,6 @@
/* No comment provided by engineer. */
"Error deleting user profile" = "Errore nell'eliminazione del profilo utente";
/* No comment provided by engineer. */
"Error downloading the archive" = "Errore di scaricamento dell'archivio";
/* No comment provided by engineer. */
"Error enabling delivery receipts!" = "Errore nell'attivazione delle ricevute di consegna!";
@@ -1710,9 +1635,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Errore nel salvataggio della password nel portachiavi";
/* when migrating */
"Error saving settings" = "Errore di salvataggio delle impostazioni";
/* No comment provided by engineer. */
"Error saving user password" = "Errore nel salvataggio della password utente";
@@ -1755,12 +1677,6 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "Errore nell'aggiornamento della privacy dell'utente";
/* No comment provided by engineer. */
"Error uploading the archive" = "Errore di invio dell'archivio";
/* No comment provided by engineer. */
"Error verifying passphrase:" = "Errore di verifica della password:";
/* No comment provided by engineer. */
"Error: " = "Errore: ";
@@ -1794,9 +1710,6 @@
/* No comment provided by engineer. */
"Exported database archive." = "Archivio database esportato.";
/* No comment provided by engineer. */
"Exported file doesn't exist" = "Il file esportato non esiste";
/* No comment provided by engineer. */
"Exporting database archive…" = "Esportazione archivio database…";
@@ -1839,12 +1752,6 @@
/* No comment provided by engineer. */
"Filter unread and favorite chats." = "Filtra le chat non lette e preferite.";
/* No comment provided by engineer. */
"Finalize migration" = "Finalizza la migrazione";
/* No comment provided by engineer. */
"Finalize migration on another device." = "Finalizza la migrazione su un altro dispositivo.";
/* No comment provided by engineer. */
"Finally, we have them! 🚀" = "Finalmente le abbiamo! 🚀";
@@ -2028,9 +1935,6 @@
/* No comment provided by engineer. */
"How to use your servers" = "Come usare i tuoi server";
/* No comment provided by engineer. */
"Hungarian interface" = "Interfaccia in ungherese";
/* No comment provided by engineer. */
"ICE servers (one per line)" = "Server ICE (uno per riga)";
@@ -2070,12 +1974,6 @@
/* No comment provided by engineer. */
"Import database" = "Importa database";
/* No comment provided by engineer. */
"Import failed" = "Importazione fallita";
/* No comment provided by engineer. */
"Importing archive" = "Importazione archivio";
/* No comment provided by engineer. */
"Improved message delivery" = "Consegna dei messaggi migliorata";
@@ -2085,9 +1983,6 @@
/* No comment provided by engineer. */
"Improved server configuration" = "Configurazione del server migliorata";
/* No comment provided by engineer. */
"In order to continue, chat should be stopped." = "Per continuare, la chat deve essere fermata.";
/* No comment provided by engineer. */
"In reply to" = "In risposta a";
@@ -2172,9 +2067,6 @@
/* No comment provided by engineer. */
"Invalid link" = "Link non valido";
/* No comment provided by engineer. */
"Invalid migration confirmation" = "Conferma di migrazione non valida";
/* No comment provided by engineer. */
"Invalid name!" = "Nome non valido!";
@@ -2439,9 +2331,6 @@
/* No comment provided by engineer. */
"Message text" = "Testo del messaggio";
/* No comment provided by engineer. */
"Message too large" = "Messaggio troppo grande";
/* No comment provided by engineer. */
"Messages" = "Messaggi";
@@ -2451,36 +2340,9 @@
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "I messaggi da %@ verranno mostrati!";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "I messaggi, i file e le chiamate sono protetti da **crittografia end-to-end** con perfect forward secrecy, ripudio e recupero da intrusione.";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "I messaggi, i file e le chiamate sono protetti da **crittografia e2e resistente al quantistico** con perfect forward secrecy, ripudio e recupero da intrusione.";
/* No comment provided by engineer. */
"Migrate device" = "Migra dispositivo";
/* No comment provided by engineer. */
"Migrate from another device" = "Migra da un altro dispositivo";
/* No comment provided by engineer. */
"Migrate here" = "Migra qui";
/* No comment provided by engineer. */
"Migrate to another device" = "Migra ad un altro dispositivo";
/* No comment provided by engineer. */
"Migrate to another device via QR code." = "Migra ad un altro dispositivo via codice QR.";
/* No comment provided by engineer. */
"Migrating" = "Migrazione";
/* No comment provided by engineer. */
"Migrating database archive…" = "Migrazione archivio del database…";
/* No comment provided by engineer. */
"Migration complete" = "Migrazione completata";
/* No comment provided by engineer. */
"Migration error:" = "Errore di migrazione:";
@@ -2511,7 +2373,7 @@
/* copied message info */
"Moderated at: %@" = "Moderato il: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "moderato da %@";
/* time unit */
@@ -2738,9 +2600,6 @@
/* No comment provided by engineer. */
"Open group" = "Apri gruppo";
/* authentication reason */
"Open migration to another device" = "Apri migrazione ad un altro dispositivo";
/* No comment provided by engineer. */
"Open Settings" = "Apri le impostazioni";
@@ -2753,15 +2612,9 @@
/* No comment provided by engineer. */
"Opening app…" = "Apertura dell'app…";
/* No comment provided by engineer. */
"Or paste archive link" = "O incolla il link dell'archivio";
/* No comment provided by engineer. */
"Or scan QR code" = "O scansiona il codice QR";
/* No comment provided by engineer. */
"Or securely share this file link" = "O condividi in modo sicuro questo link del file";
/* No comment provided by engineer. */
"Or show this code" = "O mostra questo codice";
@@ -2813,9 +2666,6 @@
/* message decrypt error item */
"Permanent decryption error" = "Errore di decifrazione";
/* No comment provided by engineer. */
"Picture-in-picture calls" = "Chiamate picture-in-picture";
/* No comment provided by engineer. */
"PING count" = "Conteggio PING";
@@ -2834,9 +2684,6 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Controlla le preferenze tue e del tuo contatto.";
/* No comment provided by engineer. */
"Please confirm that network settings are correct for this device." = "Conferma che le impostazioni di rete sono corrette per questo dispositivo.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Contatta gli sviluppatori.\nErrore: %@";
@@ -2870,9 +2717,6 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata";
/* No comment provided by engineer. */
"Post-quantum E2EE" = "E2EE post-quantistica";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Conserva la bozza dell'ultimo messaggio, con gli allegati.";
@@ -2954,15 +2798,6 @@
/* No comment provided by engineer. */
"Push notifications" = "Notifiche push";
/* No comment provided by engineer. */
"Push server" = "Server push";
/* chat item text */
"quantum resistant e2e encryption" = "crittografia e2e resistente al quantistico";
/* No comment provided by engineer. */
"Quantum resistant encryption" = "Crittografia resistente al quantistico";
/* No comment provided by engineer. */
"Rate the app" = "Valuta l'app";
@@ -3098,18 +2933,9 @@
/* No comment provided by engineer. */
"Repeat connection request?" = "Ripetere la richiesta di connessione?";
/* No comment provided by engineer. */
"Repeat download" = "Ripeti scaricamento";
/* No comment provided by engineer. */
"Repeat import" = "Ripeti importazione";
/* No comment provided by engineer. */
"Repeat join request?" = "Ripetere la richiesta di ingresso?";
/* No comment provided by engineer. */
"Repeat upload" = "Ripeti caricamento";
/* chat item action */
"Reply" = "Rispondi";
@@ -3167,9 +2993,6 @@
/* No comment provided by engineer. */
"Run chat" = "Avvia chat";
/* No comment provided by engineer. */
"Safer groups" = "Gruppi più sicuri";
/* chat item action */
"Save" = "Salva";
@@ -3410,9 +3233,6 @@
/* No comment provided by engineer. */
"Set passcode" = "Imposta codice";
/* No comment provided by engineer. */
"Set passphrase" = "Imposta password";
/* No comment provided by engineer. */
"Set passphrase to export" = "Imposta la password per esportare";
@@ -3458,9 +3278,6 @@
/* No comment provided by engineer. */
"Show preview" = "Mostra anteprima";
/* No comment provided by engineer. */
"Show QR code" = "Mostra codice QR";
/* No comment provided by engineer. */
"Show:" = "Mostra:";
@@ -3521,9 +3338,6 @@
/* notification title */
"Somebody" = "Qualcuno";
/* chat item text */
"standard end-to-end encryption" = "crittografia end-to-end standard";
/* No comment provided by engineer. */
"Start chat" = "Avvia chat";
@@ -3539,9 +3353,6 @@
/* No comment provided by engineer. */
"Stop" = "Ferma";
/* No comment provided by engineer. */
"Stop chat" = "Ferma la chat";
/* No comment provided by engineer. */
"Stop chat to enable database actions" = "Ferma la chat per attivare le azioni del database";
@@ -3569,9 +3380,6 @@
/* authentication reason */
"Stop SimpleX" = "Ferma SimpleX";
/* No comment provided by engineer. */
"Stopping chat" = "Arresto della chat";
/* No comment provided by engineer. */
"strike" = "barrato";
@@ -3722,12 +3530,6 @@
/* No comment provided by engineer. */
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Questa azione non può essere annullata: il tuo profilo, i contatti, i messaggi e i file andranno persi in modo irreversibile.";
/* E2EE info chat item */
"This chat is protected by end-to-end encryption." = "Questa chat è protetta da crittografia end-to-end.";
/* E2EE info chat item */
"This chat is protected by quantum resistant end-to-end encryption." = "Questa chat è protetta da crittografia end-to-end resistente al quantistico.";
/* notification title */
"this contact" = "questo contatto";
@@ -3920,15 +3722,9 @@
/* No comment provided by engineer. */
"Upgrade and open chat" = "Aggiorna e apri chat";
/* No comment provided by engineer. */
"Upload failed" = "Invio fallito";
/* server test step */
"Upload file" = "Invia file";
/* No comment provided by engineer. */
"Uploading archive" = "Invio dell'archivio";
/* No comment provided by engineer. */
"Use .onion hosts" = "Usa gli host .onion";
@@ -3959,9 +3755,6 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Usare i server di SimpleX Chat?";
/* No comment provided by engineer. */
"Use the app while in the call." = "Usa l'app mentre sei in chiamata.";
/* No comment provided by engineer. */
"User profile" = "Profilo utente";
@@ -3989,12 +3782,6 @@
/* No comment provided by engineer. */
"Verify connections" = "Verifica le connessioni";
/* No comment provided by engineer. */
"Verify database passphrase" = "Verifica password del database";
/* No comment provided by engineer. */
"Verify passphrase" = "Verifica password";
/* No comment provided by engineer. */
"Verify security code" = "Verifica codice di sicurezza";
@@ -4014,7 +3801,7 @@
"via relay" = "via relay";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "Tramite protocollo sicuro resistente al quantistico.";
"Via secure quantum resistant protocol." = "Tramite protocollo sicuro resistente alla quantistica.";
/* No comment provided by engineer. */
"Video call" = "Videochiamata";
@@ -4073,9 +3860,6 @@
/* No comment provided by engineer. */
"wants to connect to you!" = "vuole connettersi con te!";
/* No comment provided by engineer. */
"Warning: starting chat on multiple devices is not supported and will cause message delivery failures" = "Attenzione: avviare la chat su più dispositivi non è supportato e provocherà problemi di recapito dei messaggi";
/* No comment provided by engineer. */
"Warning: you may lose some data!" = "Attenzione: potresti perdere alcuni dati!";
@@ -4091,9 +3875,6 @@
/* No comment provided by engineer. */
"Welcome message" = "Messaggio di benvenuto";
/* No comment provided by engineer. */
"Welcome message is too long" = "Il messaggio di benvenuto è troppo lungo";
/* No comment provided by engineer. */
"What's new" = "Novità";
@@ -4130,9 +3911,6 @@
/* No comment provided by engineer. */
"You" = "Tu";
/* No comment provided by engineer. */
"You **must not** use the same database on two devices." = "**Non devi** usare lo stesso database su due dispositivi.";
/* No comment provided by engineer. */
"You accepted connection" = "Hai accettato la connessione";
@@ -4193,9 +3971,6 @@
/* No comment provided by engineer. */
"You can enable them later via app Privacy & Security settings." = "Puoi attivarle più tardi nelle impostazioni di privacy e sicurezza dell'app.";
/* No comment provided by engineer. */
"You can give another try." = "Puoi fare un altro tentativo.";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.";
@@ -4380,7 +4155,7 @@
"Your profile" = "Il tuo profilo";
/* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Verrà condiviso il tuo profilo **%@**.";
"Your profile **%@** will be shared." = "Il tuo profilo **%@** verrà condiviso.";
/* No comment provided by engineer. */
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti.\nI server di SimpleX non possono vedere il tuo profilo.";
+1 -4
View File
@@ -106,9 +106,6 @@
/* No comment provided by engineer. */
"%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ と %@";
/* No comment provided by engineer. */
"%@ and %@ connected" = "%@ と %@ は接続中";
@@ -2064,7 +2061,7 @@
/* copied message info */
"Moderated at: %@" = "モデレーターによって介入済み: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "%@ によってモデレートされた";
/* time unit */
+7 -232
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Meest privé**: gebruik geen SimpleX Chat-notificatie server, controleer berichten regelmatig op de achtergrond (afhankelijk van hoe vaak u de app gebruikt).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Let op**: als u dezelfde database op twee apparaten gebruikt, wordt de decodering van berichten van uw verbindingen verbroken, als veiligheidsmaatregel.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Let op**: u kunt het wachtwoord NIET herstellen of wijzigen als u het kwijtraakt.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Waarschuwing**: voor directe push meldingen is een wachtwoord vereist dat is opgeslagen in de Keychain.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Waarschuwing**: het archief wordt verwijderd.";
/* No comment provided by engineer. */
"*bold*" = "\\*vetgedrukt*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ verbonden";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ gedownload";
/* notification title */
"%@ is connected!" = "%@ is verbonden!";
@@ -157,9 +148,6 @@
/* No comment provided by engineer. */
"%@ servers" = "%@ servers";
/* No comment provided by engineer. */
"%@ uploaded" = "%@ geüpload";
/* notification title */
"%@ wants to connect!" = "%@ wil verbinding maken!";
@@ -389,9 +377,6 @@
/* member role */
"admin" = "Beheerder";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Beheerders kunnen een lid voor iedereen blokkeren.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Beheerders kunnen de uitnodiging links naar groepen aanmaken.";
@@ -431,9 +416,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Al uw contacten blijven verbonden. Profiel update wordt naar uw contacten verzonden.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Al uw contacten, gesprekken en bestanden worden veilig gecodeerd en in delen geüpload naar geconfigureerde XFTP-relays.";
/* No comment provided by engineer. */
"Allow" = "Toestaan";
@@ -515,9 +497,6 @@
/* No comment provided by engineer. */
"App build: %@" = "App build: %@";
/* No comment provided by engineer. */
"App data migration" = "Migratie van app-gegevens";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "App versleutelt nieuwe lokale bestanden (behalve video's).";
@@ -539,15 +518,6 @@
/* No comment provided by engineer. */
"Appearance" = "Uiterlijk";
/* No comment provided by engineer. */
"Apply" = "Toepassen";
/* No comment provided by engineer. */
"Archive and upload" = "Archiveren en uploaden";
/* No comment provided by engineer. */
"Archiving database" = "Database archiveren";
/* No comment provided by engineer. */
"Attach" = "Bijvoegen";
@@ -632,13 +602,13 @@
/* No comment provided by engineer. */
"Block member?" = "Lid blokkeren?";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"blocked" = "geblokkeerd";
/* rcv group event chat item */
"blocked %@" = "geblokkeerd %@";
/* marked deleted chat item preview text */
/* blocked chat item */
"blocked by admin" = "geblokkeerd door beheerder";
/* No comment provided by engineer. */
@@ -695,9 +665,6 @@
/* No comment provided by engineer. */
"Cancel" = "Annuleren";
/* No comment provided by engineer. */
"Cancel migration" = "Migratie annuleren";
/* feature offered item */
"cancelled %@" = "geannuleerd %@";
@@ -777,9 +744,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Chat is gestopt. Als je deze database al op een ander apparaat hebt gebruikt, moet je deze terugzetten voordat je met chatten begint.";
/* No comment provided by engineer. */
"Chat migrated!" = "Chat gemigreerd!";
/* No comment provided by engineer. */
"Chat preferences" = "Gesprek voorkeuren";
@@ -792,9 +756,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Chinese en Spaanse interface";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Kies _Migreren vanaf een ander apparaat_ op het nieuwe apparaat en scan de QR-code.";
/* No comment provided by engineer. */
"Choose file" = "Kies bestand";
@@ -840,9 +801,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Bevestig database upgrades";
/* No comment provided by engineer. */
"Confirm network settings" = "Bevestig netwerk instellingen";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Bevestig nieuw wachtwoord…";
@@ -852,12 +810,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Bevestig wachtwoord";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Bevestig dat u het wachtwoord voor de database onthoudt om deze te migreren.";
/* No comment provided by engineer. */
"Confirm upload" = "Bevestig het uploaden";
/* server test step */
"Connect" = "Verbind";
@@ -1056,9 +1008,6 @@
/* No comment provided by engineer. */
"Created on %@" = "Gemaakt op %@";
/* No comment provided by engineer. */
"Creating archive link" = "Archief link maken";
/* No comment provided by engineer. */
"Creating link…" = "Link maken…";
@@ -1206,9 +1155,6 @@
/* No comment provided by engineer. */
"Delete database" = "Database verwijderen";
/* No comment provided by engineer. */
"Delete database from this device" = "Verwijder de database van dit apparaat";
/* server test step */
"Delete file" = "Verwijder bestand";
@@ -1401,18 +1347,9 @@
/* No comment provided by engineer. */
"Downgrade and open chat" = "Downgraden en chat openen";
/* No comment provided by engineer. */
"Download failed" = "Download mislukt";
/* server test step */
"Download file" = "Download bestand";
/* No comment provided by engineer. */
"Downloading archive" = "Archief downloaden";
/* No comment provided by engineer. */
"Downloading link details" = "Link gegevens downloaden";
/* No comment provided by engineer. */
"Duplicate display name!" = "Dubbele weergavenaam!";
@@ -1446,9 +1383,6 @@
/* No comment provided by engineer. */
"Enable for all" = "Inschakelen voor iedereen";
/* No comment provided by engineer. */
"Enable in direct chats (BETA)!" = "Activeer in directe chats (BETA)!";
/* No comment provided by engineer. */
"Enable instant notifications?" = "Onmiddellijke meldingen inschakelen?";
@@ -1563,9 +1497,6 @@
/* No comment provided by engineer. */
"Enter Passcode" = "Voer toegangscode in";
/* No comment provided by engineer. */
"Enter passphrase" = "Voer het wachtwoord in";
/* No comment provided by engineer. */
"Enter passphrase…" = "Voer wachtwoord in…";
@@ -1605,9 +1536,6 @@
/* No comment provided by engineer. */
"Error adding member(s)" = "Fout bij het toevoegen van leden";
/* No comment provided by engineer. */
"Error allowing contact PQ encryption" = "Fout bij het toestaan van contact PQ-versleuteling";
/* No comment provided by engineer. */
"Error changing address" = "Fout bij wijzigen van adres";
@@ -1662,9 +1590,6 @@
/* No comment provided by engineer. */
"Error deleting user profile" = "Fout bij het verwijderen van gebruikers profiel";
/* No comment provided by engineer. */
"Error downloading the archive" = "Fout bij het downloaden van het archief";
/* No comment provided by engineer. */
"Error enabling delivery receipts!" = "Fout bij het inschakelen van ontvangst bevestiging!";
@@ -1710,9 +1635,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Fout bij opslaan van wachtwoord in de keychain";
/* when migrating */
"Error saving settings" = "Fout bij opslaan van instellingen";
/* No comment provided by engineer. */
"Error saving user password" = "Fout bij opslaan gebruikers wachtwoord";
@@ -1755,12 +1677,6 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "Fout bij updaten van gebruikers privacy";
/* No comment provided by engineer. */
"Error uploading the archive" = "Fout bij het uploaden van het archief";
/* No comment provided by engineer. */
"Error verifying passphrase:" = "Fout bij het verifiëren van het wachtwoord:";
/* No comment provided by engineer. */
"Error: " = "Fout: ";
@@ -1794,9 +1710,6 @@
/* No comment provided by engineer. */
"Exported database archive." = "Geëxporteerd database archief.";
/* No comment provided by engineer. */
"Exported file doesn't exist" = "Geëxporteerd bestand bestaat niet";
/* No comment provided by engineer. */
"Exporting database archive…" = "Database archief exporteren…";
@@ -1839,12 +1752,6 @@
/* No comment provided by engineer. */
"Filter unread and favorite chats." = "Filter ongelezen en favoriete chats.";
/* No comment provided by engineer. */
"Finalize migration" = "Voltooi de migratie";
/* No comment provided by engineer. */
"Finalize migration on another device." = "Voltooi de migratie op een ander apparaat.";
/* No comment provided by engineer. */
"Finally, we have them! 🚀" = "Eindelijk, we hebben ze! 🚀";
@@ -2028,9 +1935,6 @@
/* No comment provided by engineer. */
"How to use your servers" = "Hoe u uw servers gebruikt";
/* No comment provided by engineer. */
"Hungarian interface" = "Hongaarse interface";
/* No comment provided by engineer. */
"ICE servers (one per line)" = "ICE servers (één per lijn)";
@@ -2070,12 +1974,6 @@
/* No comment provided by engineer. */
"Import database" = "Database importeren";
/* No comment provided by engineer. */
"Import failed" = "Importeren is mislukt";
/* No comment provided by engineer. */
"Importing archive" = "Archief importeren";
/* No comment provided by engineer. */
"Improved message delivery" = "Verbeterde berichtbezorging";
@@ -2085,9 +1983,6 @@
/* No comment provided by engineer. */
"Improved server configuration" = "Verbeterde serverconfiguratie";
/* No comment provided by engineer. */
"In order to continue, chat should be stopped." = "Om verder te kunnen gaan, moet de chat worden gestopt.";
/* No comment provided by engineer. */
"In reply to" = "In antwoord op";
@@ -2104,7 +1999,7 @@
"Incognito mode protects your privacy by using a new random profile for each contact." = "Incognito -modus beschermt uw privacy met behulp van een nieuw willekeurig profiel voor elk contact.";
/* chat list item description */
"incognito via contact address link" = "incognito via contact adres link";
"incognito via contact address link" = "incognito via contactadres link";
/* chat list item description */
"incognito via group link" = "incognito via groep link";
@@ -2172,9 +2067,6 @@
/* No comment provided by engineer. */
"Invalid link" = "Ongeldige link";
/* No comment provided by engineer. */
"Invalid migration confirmation" = "Ongeldige migratie bevestiging";
/* No comment provided by engineer. */
"Invalid name!" = "Ongeldige naam!";
@@ -2314,7 +2206,7 @@
"Leave group?" = "Groep verlaten?";
/* rcv group event chat item */
"left" = "is vertrokken";
"left" = "verlaten";
/* email subject */
"Let's talk in SimpleX Chat" = "Laten we praten in SimpleX Chat";
@@ -2439,9 +2331,6 @@
/* No comment provided by engineer. */
"Message text" = "Bericht tekst";
/* No comment provided by engineer. */
"Message too large" = "Bericht te groot";
/* No comment provided by engineer. */
"Messages" = "Berichten";
@@ -2451,36 +2340,9 @@
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Berichten van %@ worden getoond!";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Berichten, bestanden en oproepen worden beschermd door **end-to-end codering** met perfecte voorwaartse geheimhouding, afwijzing en inbraakherstel.";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Berichten, bestanden en oproepen worden beschermd door **kwantumbestendige e2e encryptie** met perfecte voorwaartse geheimhouding, afwijzing en inbraakherstel.";
/* No comment provided by engineer. */
"Migrate device" = "Apparaat migreren";
/* No comment provided by engineer. */
"Migrate from another device" = "Migreer vanaf een ander apparaat";
/* No comment provided by engineer. */
"Migrate here" = "Migreer hierheen";
/* No comment provided by engineer. */
"Migrate to another device" = "Migreer naar een ander apparaat";
/* No comment provided by engineer. */
"Migrate to another device via QR code." = "Migreer naar een ander apparaat via QR-code.";
/* No comment provided by engineer. */
"Migrating" = "Migreren";
/* No comment provided by engineer. */
"Migrating database archive…" = "Database archief migreren…";
/* No comment provided by engineer. */
"Migration complete" = "Migratie voltooid";
/* No comment provided by engineer. */
"Migration error:" = "Migratiefout:";
@@ -2511,7 +2373,7 @@
/* copied message info */
"Moderated at: %@" = "Gemodereerd op: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "gemodereerd door %@";
/* time unit */
@@ -2738,9 +2600,6 @@
/* No comment provided by engineer. */
"Open group" = "Open groep";
/* authentication reason */
"Open migration to another device" = "Open de migratie naar een ander apparaat";
/* No comment provided by engineer. */
"Open Settings" = "Open instellingen";
@@ -2753,15 +2612,9 @@
/* No comment provided by engineer. */
"Opening app…" = "App openen…";
/* No comment provided by engineer. */
"Or paste archive link" = "Of plak de archief link";
/* No comment provided by engineer. */
"Or scan QR code" = "Of scan de QR-code";
/* No comment provided by engineer. */
"Or securely share this file link" = "Of deel deze bestands link veilig";
/* No comment provided by engineer. */
"Or show this code" = "Of laat deze code zien";
@@ -2813,9 +2666,6 @@
/* message decrypt error item */
"Permanent decryption error" = "Decodering fout";
/* No comment provided by engineer. */
"Picture-in-picture calls" = "Beeld-in-beeld oproepen";
/* No comment provided by engineer. */
"PING count" = "PING count";
@@ -2834,9 +2684,6 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Controleer de uwe en uw contact voorkeuren.";
/* No comment provided by engineer. */
"Please confirm that network settings are correct for this device." = "Controleer of de netwerk instellingen correct zijn voor dit apparaat.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Neem contact op met ontwikkelaars.\nFout: %@";
@@ -2870,9 +2717,6 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Mogelijk is de certificaat vingerafdruk in het server adres onjuist";
/* No comment provided by engineer. */
"Post-quantum E2EE" = "Post-quantum E2EE";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Bewaar het laatste berichtconcept, met bijlagen.";
@@ -2954,15 +2798,6 @@
/* No comment provided by engineer. */
"Push notifications" = "Push meldingen";
/* No comment provided by engineer. */
"Push server" = "Push server";
/* chat item text */
"quantum resistant e2e encryption" = "quantum bestendige e2e-codering";
/* No comment provided by engineer. */
"Quantum resistant encryption" = "quantum bestendige encryptie";
/* No comment provided by engineer. */
"Rate the app" = "Beoordeel de app";
@@ -3098,18 +2933,9 @@
/* No comment provided by engineer. */
"Repeat connection request?" = "Verbindingsverzoek herhalen?";
/* No comment provided by engineer. */
"Repeat download" = "Herhaal het downloaden";
/* No comment provided by engineer. */
"Repeat import" = "Herhaal import";
/* No comment provided by engineer. */
"Repeat join request?" = "Deelnameverzoek herhalen?";
/* No comment provided by engineer. */
"Repeat upload" = "Herhaal het uploaden";
/* chat item action */
"Reply" = "Antwoord";
@@ -3167,9 +2993,6 @@
/* No comment provided by engineer. */
"Run chat" = "Chat uitvoeren";
/* No comment provided by engineer. */
"Safer groups" = "Veiligere groepen";
/* chat item action */
"Save" = "Opslaan";
@@ -3246,7 +3069,7 @@
"Search bar accepts invitation links." = "Zoekbalk accepteert uitnodigingslinks.";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Zoeken of plak een SimpleX link";
"Search or paste SimpleX link" = "Zoek of plak een SimpleX link";
/* network option */
"sec" = "sec";
@@ -3410,9 +3233,6 @@
/* No comment provided by engineer. */
"Set passcode" = "Toegangscode instellen";
/* No comment provided by engineer. */
"Set passphrase" = "Wachtwoord instellen";
/* No comment provided by engineer. */
"Set passphrase to export" = "Wachtwoord instellen om te exporteren";
@@ -3458,9 +3278,6 @@
/* No comment provided by engineer. */
"Show preview" = "Toon voorbeeld";
/* No comment provided by engineer. */
"Show QR code" = "Toon QR-code";
/* No comment provided by engineer. */
"Show:" = "Toon:";
@@ -3521,9 +3338,6 @@
/* notification title */
"Somebody" = "Iemand";
/* chat item text */
"standard end-to-end encryption" = "standaard end-to-end encryptie";
/* No comment provided by engineer. */
"Start chat" = "Begin gesprek";
@@ -3539,9 +3353,6 @@
/* No comment provided by engineer. */
"Stop" = "Stop";
/* No comment provided by engineer. */
"Stop chat" = "Stop chat";
/* No comment provided by engineer. */
"Stop chat to enable database actions" = "Stop de chat om database acties mogelijk te maken";
@@ -3569,9 +3380,6 @@
/* authentication reason */
"Stop SimpleX" = "Stop SimpleX";
/* No comment provided by engineer. */
"Stopping chat" = "Chat stoppen";
/* No comment provided by engineer. */
"strike" = "staking";
@@ -3722,12 +3530,6 @@
/* No comment provided by engineer. */
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan onomkeerbaar verloren.";
/* E2EE info chat item */
"This chat is protected by end-to-end encryption." = "Deze chat is beveiligd met end-to-end codering.";
/* E2EE info chat item */
"This chat is protected by quantum resistant end-to-end encryption." = "Deze chat wordt beschermd door quantum bestendige end-to-end codering.";
/* notification title */
"this contact" = "dit contact";
@@ -3920,15 +3722,9 @@
/* No comment provided by engineer. */
"Upgrade and open chat" = "Upgrade en open chat";
/* No comment provided by engineer. */
"Upload failed" = "Upload mislukt";
/* server test step */
"Upload file" = "Upload bestand";
/* No comment provided by engineer. */
"Uploading archive" = "Archief uploaden";
/* No comment provided by engineer. */
"Use .onion hosts" = "Gebruik .onion-hosts";
@@ -3959,9 +3755,6 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "SimpleX Chat servers gebruiken?";
/* No comment provided by engineer. */
"Use the app while in the call." = "Gebruik de app tijdens het gesprek.";
/* No comment provided by engineer. */
"User profile" = "Gebruikers profiel";
@@ -3989,12 +3782,6 @@
/* No comment provided by engineer. */
"Verify connections" = "Controleer verbindingen";
/* No comment provided by engineer. */
"Verify database passphrase" = "Controleer het wachtwoord van de database";
/* No comment provided by engineer. */
"Verify passphrase" = "Controleer het wachtwoord";
/* No comment provided by engineer. */
"Verify security code" = "Controleer de beveiligingscode";
@@ -4002,7 +3789,7 @@
"Via browser" = "Via browser";
/* chat list item description */
"via contact address link" = "via contact adres link";
"via contact address link" = "via contactadres link";
/* chat list item description */
"via group link" = "via groep link";
@@ -4073,9 +3860,6 @@
/* No comment provided by engineer. */
"wants to connect to you!" = "wil met je in contact komen!";
/* No comment provided by engineer. */
"Warning: starting chat on multiple devices is not supported and will cause message delivery failures" = "Waarschuwing: het starten van de chat op meerdere apparaten wordt niet ondersteund en zal leiden tot mislukte bezorging van berichten";
/* No comment provided by engineer. */
"Warning: you may lose some data!" = "Waarschuwing: u kunt sommige gegevens verliezen!";
@@ -4091,9 +3875,6 @@
/* No comment provided by engineer. */
"Welcome message" = "Welkomst bericht";
/* No comment provided by engineer. */
"Welcome message is too long" = "Welkomstbericht is te lang";
/* No comment provided by engineer. */
"What's new" = "Wat is er nieuw";
@@ -4130,9 +3911,6 @@
/* No comment provided by engineer. */
"You" = "Jij";
/* No comment provided by engineer. */
"You **must not** use the same database on two devices." = "U **mag** niet dezelfde database op twee apparaten gebruiken.";
/* No comment provided by engineer. */
"You accepted connection" = "Je hebt de verbinding geaccepteerd";
@@ -4193,9 +3971,6 @@
/* No comment provided by engineer. */
"You can enable them later via app Privacy & Security settings." = "U kunt ze later inschakelen via de privacy- en beveiligingsinstellingen van de app.";
/* No comment provided by engineer. */
"You can give another try." = "Je kunt het nog een keer proberen.";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.";
+3 -228
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Najbardziej prywatny**: nie korzystaj z serwera powiadomień SimpleX Chat, sprawdzaj wiadomości okresowo w tle (zależy jak często korzystasz z aplikacji).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "*Uwaga*: używanie tej samej bazy danych na dwóch urządzeniach zepsuje odszyfrowywanie wiadomości twoich połączeń, jako zabezpieczenie.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Uwaga**: NIE będziesz w stanie odzyskać lub zmienić hasła, jeśli je stracisz.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Uwaga**: Natychmiastowe powiadomienia push wymagają hasła zapisanego w Keychain.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Ostrzeżenie**: archiwum zostanie usunięte.";
/* No comment provided by engineer. */
"*bold*" = "\\*pogrubiony*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ połączony";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ pobrane";
/* notification title */
"%@ is connected!" = "%@ jest połączony!";
@@ -157,9 +148,6 @@
/* No comment provided by engineer. */
"%@ servers" = "%@ serwery";
/* No comment provided by engineer. */
"%@ uploaded" = "%@ wgrane";
/* notification title */
"%@ wants to connect!" = "%@ chce się połączyć!";
@@ -389,9 +377,6 @@
/* member role */
"admin" = "administrator";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Administratorzy mogą blokować członka dla wszystkich.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Administratorzy mogą tworzyć linki do dołączania do grup.";
@@ -431,9 +416,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Wszystkie Twoje kontakty pozostaną połączone. Aktualizacja profilu zostanie wysłana do Twoich kontaktów.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Wszystkie twoje kontakty, konwersacje i pliki będą bezpiecznie szyfrowane i wgrywane w kawałkach do skonfigurowanych przekaźników XFTP.";
/* No comment provided by engineer. */
"Allow" = "Pozwól";
@@ -515,9 +497,6 @@
/* No comment provided by engineer. */
"App build: %@" = "Kompilacja aplikacji: %@";
/* No comment provided by engineer. */
"App data migration" = "Migracja danych aplikacji";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Aplikacja szyfruje nowe lokalne pliki (bez filmów).";
@@ -539,15 +518,6 @@
/* No comment provided by engineer. */
"Appearance" = "Wygląd";
/* No comment provided by engineer. */
"Apply" = "Zastosuj";
/* No comment provided by engineer. */
"Archive and upload" = "Archiwizuj i prześlij";
/* No comment provided by engineer. */
"Archiving database" = "Archiwizowanie bazy danych";
/* No comment provided by engineer. */
"Attach" = "Dołącz";
@@ -632,13 +602,13 @@
/* No comment provided by engineer. */
"Block member?" = "Zablokować członka?";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"blocked" = "zablokowany";
/* rcv group event chat item */
"blocked %@" = "zablokowany %@";
/* marked deleted chat item preview text */
/* blocked chat item */
"blocked by admin" = "zablokowany przez admina";
/* No comment provided by engineer. */
@@ -695,9 +665,6 @@
/* No comment provided by engineer. */
"Cancel" = "Anuluj";
/* No comment provided by engineer. */
"Cancel migration" = "Anuluj migrację";
/* feature offered item */
"cancelled %@" = "anulowany %@";
@@ -777,9 +744,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Czat został zatrzymany. Jeśli korzystałeś już z tej bazy danych na innym urządzeniu, powinieneś przenieść ją z powrotem przed rozpoczęciem czatu.";
/* No comment provided by engineer. */
"Chat migrated!" = "Czat zmigrowany!";
/* No comment provided by engineer. */
"Chat preferences" = "Preferencje czatu";
@@ -792,9 +756,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Chiński i hiszpański interfejs";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Wybierz _Zmigruj z innego urządzenia_ na nowym urządzeniu i zeskanuj kod QR.";
/* No comment provided by engineer. */
"Choose file" = "Wybierz plik";
@@ -840,9 +801,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Potwierdź aktualizacje bazy danych";
/* No comment provided by engineer. */
"Confirm network settings" = "Potwierdź ustawienia sieciowe";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Potwierdź nowe hasło…";
@@ -852,12 +810,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Potwierdź hasło";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Potwierdź, że pamiętasz hasło do bazy danych, aby ją zmigrować.";
/* No comment provided by engineer. */
"Confirm upload" = "Potwierdź wgranie";
/* server test step */
"Connect" = "Połącz";
@@ -1056,9 +1008,6 @@
/* No comment provided by engineer. */
"Created on %@" = "Utworzony w dniu %@";
/* No comment provided by engineer. */
"Creating archive link" = "Tworzenie linku archiwum";
/* No comment provided by engineer. */
"Creating link…" = "Tworzenie linku…";
@@ -1206,9 +1155,6 @@
/* No comment provided by engineer. */
"Delete database" = "Usuń bazę danych";
/* No comment provided by engineer. */
"Delete database from this device" = "Usuń bazę danych z tego urządzenia";
/* server test step */
"Delete file" = "Usuń plik";
@@ -1401,18 +1347,9 @@
/* No comment provided by engineer. */
"Downgrade and open chat" = "Obniż wersję i otwórz czat";
/* No comment provided by engineer. */
"Download failed" = "Pobieranie nie udane";
/* server test step */
"Download file" = "Pobierz plik";
/* No comment provided by engineer. */
"Downloading archive" = "Pobieranie archiwum";
/* No comment provided by engineer. */
"Downloading link details" = "Pobieranie szczegółów linku";
/* No comment provided by engineer. */
"Duplicate display name!" = "Zduplikowana wyświetlana nazwa!";
@@ -1446,9 +1383,6 @@
/* No comment provided by engineer. */
"Enable for all" = "Włącz dla wszystkich";
/* No comment provided by engineer. */
"Enable in direct chats (BETA)!" = "Włącz w czatach bezpośrednich (BETA)!";
/* No comment provided by engineer. */
"Enable instant notifications?" = "Włączyć natychmiastowe powiadomienia?";
@@ -1563,9 +1497,6 @@
/* No comment provided by engineer. */
"Enter Passcode" = "Wprowadź Pin";
/* No comment provided by engineer. */
"Enter passphrase" = "Wprowadź hasło";
/* No comment provided by engineer. */
"Enter passphrase…" = "Wprowadź hasło…";
@@ -1605,9 +1536,6 @@
/* No comment provided by engineer. */
"Error adding member(s)" = "Błąd dodawania członka(ów)";
/* No comment provided by engineer. */
"Error allowing contact PQ encryption" = "Błąd pozwalania kontaktowi na szyfrowanie PQ";
/* No comment provided by engineer. */
"Error changing address" = "Błąd zmiany adresu";
@@ -1662,9 +1590,6 @@
/* No comment provided by engineer. */
"Error deleting user profile" = "Błąd usuwania profilu użytkownika";
/* No comment provided by engineer. */
"Error downloading the archive" = "Błąd pobierania archiwum";
/* No comment provided by engineer. */
"Error enabling delivery receipts!" = "Błąd włączania potwierdzeń dostawy!";
@@ -1710,9 +1635,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Błąd zapisu hasła do pęku kluczy";
/* when migrating */
"Error saving settings" = "Błąd zapisywania ustawień";
/* No comment provided by engineer. */
"Error saving user password" = "Błąd zapisu hasła użytkownika";
@@ -1755,12 +1677,6 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "Błąd aktualizacji prywatności użytkownika";
/* No comment provided by engineer. */
"Error uploading the archive" = "Błąd wgrywania archiwum";
/* No comment provided by engineer. */
"Error verifying passphrase:" = "Błąd weryfikowania hasła:";
/* No comment provided by engineer. */
"Error: " = "Błąd: ";
@@ -1794,9 +1710,6 @@
/* No comment provided by engineer. */
"Exported database archive." = "Wyeksportowane archiwum bazy danych.";
/* No comment provided by engineer. */
"Exported file doesn't exist" = "Wyeksportowany plik nie istnieje";
/* No comment provided by engineer. */
"Exporting database archive…" = "Eksportowanie archiwum bazy danych…";
@@ -1839,12 +1752,6 @@
/* No comment provided by engineer. */
"Filter unread and favorite chats." = "Filtruj nieprzeczytane i ulubione czaty.";
/* No comment provided by engineer. */
"Finalize migration" = "Dokończ migrację";
/* No comment provided by engineer. */
"Finalize migration on another device." = "Dokończ migrację na innym urządzeniu.";
/* No comment provided by engineer. */
"Finally, we have them! 🚀" = "W końcu je mamy! 🚀";
@@ -2028,9 +1935,6 @@
/* No comment provided by engineer. */
"How to use your servers" = "Jak korzystać z Twoich serwerów";
/* No comment provided by engineer. */
"Hungarian interface" = "Węgierski interfejs";
/* No comment provided by engineer. */
"ICE servers (one per line)" = "Serwery ICE (po jednym na linię)";
@@ -2070,12 +1974,6 @@
/* No comment provided by engineer. */
"Import database" = "Importuj bazę danych";
/* No comment provided by engineer. */
"Import failed" = "Import nie udał się";
/* No comment provided by engineer. */
"Importing archive" = "Importowanie archiwum";
/* No comment provided by engineer. */
"Improved message delivery" = "Ulepszona dostawa wiadomości";
@@ -2085,9 +1983,6 @@
/* No comment provided by engineer. */
"Improved server configuration" = "Ulepszona konfiguracja serwera";
/* No comment provided by engineer. */
"In order to continue, chat should be stopped." = "Aby konturować, czat musi zostać zatrzymany.";
/* No comment provided by engineer. */
"In reply to" = "W odpowiedzi na";
@@ -2172,9 +2067,6 @@
/* No comment provided by engineer. */
"Invalid link" = "Nieprawidłowy link";
/* No comment provided by engineer. */
"Invalid migration confirmation" = "Nieprawidłowe potwierdzenie migracji";
/* No comment provided by engineer. */
"Invalid name!" = "Nieprawidłowa nazwa!";
@@ -2439,9 +2331,6 @@
/* No comment provided by engineer. */
"Message text" = "Tekst wiadomości";
/* No comment provided by engineer. */
"Message too large" = "Wiadomość jest zbyt duża";
/* No comment provided by engineer. */
"Messages" = "Wiadomości";
@@ -2451,36 +2340,9 @@
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Wiadomości od %@ zostaną pokazane!";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Wiadomości, pliki i połączenia są chronione przez **szyfrowanie end-to-end** z doskonałym utajnianiem z wyprzedzeniem i odzyskiem po złamaniu.";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Wiadomości, pliki i połączenia są chronione przez **kwantowo odporne szyfrowanie end-to-end** z doskonałym utajnianiem z wyprzedzeniem i odzyskiem po złamaniu.";
/* No comment provided by engineer. */
"Migrate device" = "Zmigruj urządzenie";
/* No comment provided by engineer. */
"Migrate from another device" = "Zmigruj z innego urządzenia";
/* No comment provided by engineer. */
"Migrate here" = "Zmigruj tutaj";
/* No comment provided by engineer. */
"Migrate to another device" = "Zmigruj do innego urządzenia";
/* No comment provided by engineer. */
"Migrate to another device via QR code." = "Zmigruj do innego urządzenia przez kod QR.";
/* No comment provided by engineer. */
"Migrating" = "Migrowanie";
/* No comment provided by engineer. */
"Migrating database archive…" = "Migrowanie archiwum bazy danych…";
/* No comment provided by engineer. */
"Migration complete" = "Migracja zakończona";
/* No comment provided by engineer. */
"Migration error:" = "Błąd migracji:";
@@ -2511,7 +2373,7 @@
/* copied message info */
"Moderated at: %@" = "Moderowany o: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "moderowany przez %@";
/* time unit */
@@ -2738,9 +2600,6 @@
/* No comment provided by engineer. */
"Open group" = "Grupa otwarta";
/* authentication reason */
"Open migration to another device" = "Otwórz migrację na innym urządzeniu";
/* No comment provided by engineer. */
"Open Settings" = "Otwórz Ustawienia";
@@ -2753,15 +2612,9 @@
/* No comment provided by engineer. */
"Opening app…" = "Otwieranie aplikacji…";
/* No comment provided by engineer. */
"Or paste archive link" = "Lub wklej link archiwum";
/* No comment provided by engineer. */
"Or scan QR code" = "Lub zeskanuj kod QR";
/* No comment provided by engineer. */
"Or securely share this file link" = "Lub bezpiecznie udostępnij ten link pliku";
/* No comment provided by engineer. */
"Or show this code" = "Lub pokaż ten kod";
@@ -2813,9 +2666,6 @@
/* message decrypt error item */
"Permanent decryption error" = "Stały błąd odszyfrowania";
/* No comment provided by engineer. */
"Picture-in-picture calls" = "Połączenia obraz-w-obrazie";
/* No comment provided by engineer. */
"PING count" = "Liczba PINGÓW";
@@ -2834,9 +2684,6 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Proszę sprawdzić preferencje Twoje i Twojego kontaktu.";
/* No comment provided by engineer. */
"Please confirm that network settings are correct for this device." = "Proszę potwierdzić, że ustawienia sieciowe są prawidłowe dla tego urządzenia.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Proszę skontaktować się z deweloperami.\nBłąd: %@";
@@ -2870,9 +2717,6 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy";
/* No comment provided by engineer. */
"Post-quantum E2EE" = "Postkwantowe E2EE";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Zachowaj ostatnią wersję roboczą wiadomości wraz z załącznikami.";
@@ -2954,15 +2798,6 @@
/* No comment provided by engineer. */
"Push notifications" = "Powiadomienia push";
/* No comment provided by engineer. */
"Push server" = "Serwer Push";
/* chat item text */
"quantum resistant e2e encryption" = "kwantowo odporne szyfrowanie e2e";
/* No comment provided by engineer. */
"Quantum resistant encryption" = "Kwantowo odporne szyfrowanie";
/* No comment provided by engineer. */
"Rate the app" = "Oceń aplikację";
@@ -3098,18 +2933,9 @@
/* No comment provided by engineer. */
"Repeat connection request?" = "Powtórzyć prośbę połączenia?";
/* No comment provided by engineer. */
"Repeat download" = "Powtórz pobieranie";
/* No comment provided by engineer. */
"Repeat import" = "Powtórz importowanie";
/* No comment provided by engineer. */
"Repeat join request?" = "Powtórzyć prośbę dołączenia?";
/* No comment provided by engineer. */
"Repeat upload" = "Powtórz wgrywanie";
/* chat item action */
"Reply" = "Odpowiedz";
@@ -3167,9 +2993,6 @@
/* No comment provided by engineer. */
"Run chat" = "Uruchom czat";
/* No comment provided by engineer. */
"Safer groups" = "Bezpieczniejsze grupy";
/* chat item action */
"Save" = "Zapisz";
@@ -3410,9 +3233,6 @@
/* No comment provided by engineer. */
"Set passcode" = "Ustaw pin";
/* No comment provided by engineer. */
"Set passphrase" = "Ustaw hasło";
/* No comment provided by engineer. */
"Set passphrase to export" = "Ustaw hasło do eksportu";
@@ -3458,9 +3278,6 @@
/* No comment provided by engineer. */
"Show preview" = "Pokaż podgląd";
/* No comment provided by engineer. */
"Show QR code" = "Pokaż kod QR";
/* No comment provided by engineer. */
"Show:" = "Pokaż:";
@@ -3521,9 +3338,6 @@
/* notification title */
"Somebody" = "Ktoś";
/* chat item text */
"standard end-to-end encryption" = "standardowe szyfrowanie end-to-end";
/* No comment provided by engineer. */
"Start chat" = "Rozpocznij czat";
@@ -3539,9 +3353,6 @@
/* No comment provided by engineer. */
"Stop" = "Zatrzymaj";
/* No comment provided by engineer. */
"Stop chat" = "Zatrzymaj czat";
/* No comment provided by engineer. */
"Stop chat to enable database actions" = "Zatrzymaj czat, aby umożliwić działania na bazie danych";
@@ -3569,9 +3380,6 @@
/* authentication reason */
"Stop SimpleX" = "Zatrzymaj SimpleX";
/* No comment provided by engineer. */
"Stopping chat" = "Zatrzymywanie czatu";
/* No comment provided by engineer. */
"strike" = "strajk";
@@ -3722,12 +3530,6 @@
/* No comment provided by engineer. */
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Tego działania nie można cofnąć - Twój profil, kontakty, wiadomości i pliki zostaną nieodwracalnie utracone.";
/* E2EE info chat item */
"This chat is protected by end-to-end encryption." = "Ten czat jest chroniony przez szyfrowanie end-to-end.";
/* E2EE info chat item */
"This chat is protected by quantum resistant end-to-end encryption." = "Ten czat jest chroniony przez kwantowo odporne szyfrowanie end-to-end.";
/* notification title */
"this contact" = "ten kontakt";
@@ -3920,15 +3722,9 @@
/* No comment provided by engineer. */
"Upgrade and open chat" = "Zaktualizuj i otwórz czat";
/* No comment provided by engineer. */
"Upload failed" = "Wgrywanie nie udane";
/* server test step */
"Upload file" = "Prześlij plik";
/* No comment provided by engineer. */
"Uploading archive" = "Wgrywanie archiwum";
/* No comment provided by engineer. */
"Use .onion hosts" = "Użyj hostów .onion";
@@ -3959,9 +3755,6 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Użyć serwerów SimpleX Chat?";
/* No comment provided by engineer. */
"Use the app while in the call." = "Używaj aplikacji podczas połączenia.";
/* No comment provided by engineer. */
"User profile" = "Profil użytkownika";
@@ -3989,12 +3782,6 @@
/* No comment provided by engineer. */
"Verify connections" = "Zweryfikuj połączenia";
/* No comment provided by engineer. */
"Verify database passphrase" = "Zweryfikuj hasło bazy danych";
/* No comment provided by engineer. */
"Verify passphrase" = "Zweryfikuj hasło";
/* No comment provided by engineer. */
"Verify security code" = "Weryfikuj kod bezpieczeństwa";
@@ -4073,9 +3860,6 @@
/* No comment provided by engineer. */
"wants to connect to you!" = "chce się z Tobą połączyć!";
/* No comment provided by engineer. */
"Warning: starting chat on multiple devices is not supported and will cause message delivery failures" = "Ostrzeżenie: rozpoczęcie czatu na wielu urządzeniach nie jest wspierane i spowoduje niepowodzenia dostarczania wiadomości";
/* No comment provided by engineer. */
"Warning: you may lose some data!" = "Uwaga: możesz stracić niektóre dane!";
@@ -4091,9 +3875,6 @@
/* No comment provided by engineer. */
"Welcome message" = "Wiadomość powitalna";
/* No comment provided by engineer. */
"Welcome message is too long" = "Wiadomość powitalna jest zbyt długa";
/* No comment provided by engineer. */
"What's new" = "Co nowego";
@@ -4130,9 +3911,6 @@
/* No comment provided by engineer. */
"You" = "Ty";
/* No comment provided by engineer. */
"You **must not** use the same database on two devices." = "**Nie możesz** używać tej samej bazy na dwóch urządzeniach.";
/* No comment provided by engineer. */
"You accepted connection" = "Zaakceptowałeś połączenie";
@@ -4193,9 +3971,6 @@
/* No comment provided by engineer. */
"You can enable them later via app Privacy & Security settings." = "Możesz je włączyć później w ustawieniach Prywatności i Bezpieczeństwa aplikacji.";
/* No comment provided by engineer. */
"You can give another try." = "Możesz spróbować ponownie.";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.";
+3 -228
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Самый конфиденциальный**: не использовать сервер уведомлений SimpleX Chat, проверять сообщения периодически в фоновом режиме (зависит от того насколько часто Вы используете приложение).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Обратите внимание**: использование одной и той же базы данных на двух устройствах нарушит расшифровку сообщений от ваших контактов, как свойство защиты соединений.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Внимание**: Вы не сможете восстановить или поменять пароль, если Вы его потеряете.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Внимание**: для работы мгновенных уведомлений пароль должен быть сохранен в Keychain.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Внимание**: архив будет удален.";
/* No comment provided by engineer. */
"*bold*" = "\\*жирный*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ соединен(а)";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ загружено";
/* notification title */
"%@ is connected!" = "Установлено соединение с %@!";
@@ -157,9 +148,6 @@
/* No comment provided by engineer. */
"%@ servers" = "%@ серверы";
/* No comment provided by engineer. */
"%@ uploaded" = "%@ загружено";
/* notification title */
"%@ wants to connect!" = "%@ хочет соединиться!";
@@ -389,9 +377,6 @@
/* member role */
"admin" = "админ";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Админы могут заблокировать члена группы.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Админы могут создать ссылки для вступления в группу.";
@@ -431,9 +416,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Все Ваши контакты сохранятся. Обновленный профиль будет отправлен Вашим контактам.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Все ваши контакты, разговоры и файлы будут надежно зашифрованы и загружены на выбранные XFTP серверы.";
/* No comment provided by engineer. */
"Allow" = "Разрешить";
@@ -515,9 +497,6 @@
/* No comment provided by engineer. */
"App build: %@" = "Сборка приложения: %@";
/* No comment provided by engineer. */
"App data migration" = "Миграция данных";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Приложение шифрует новые локальные файлы (кроме видео).";
@@ -539,15 +518,6 @@
/* No comment provided by engineer. */
"Appearance" = "Интерфейс";
/* No comment provided by engineer. */
"Apply" = "Применить";
/* No comment provided by engineer. */
"Archive and upload" = "Архивировать и загрузить";
/* No comment provided by engineer. */
"Archiving database" = "Подготовка архива";
/* No comment provided by engineer. */
"Attach" = "Прикрепить";
@@ -632,13 +602,13 @@
/* No comment provided by engineer. */
"Block member?" = "Заблокировать члена группы?";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"blocked" = "заблокировано";
/* rcv group event chat item */
"blocked %@" = "%@ заблокирован";
/* marked deleted chat item preview text */
/* blocked chat item */
"blocked by admin" = "заблокировано администратором";
/* No comment provided by engineer. */
@@ -695,9 +665,6 @@
/* No comment provided by engineer. */
"Cancel" = "Отменить";
/* No comment provided by engineer. */
"Cancel migration" = "Отменить миграцию";
/* feature offered item */
"cancelled %@" = "отменил(a) %@";
@@ -777,9 +744,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Чат остановлен. Если вы уже использовали эту базу данных на другом устройстве, перенесите ее обратно до запуска чата.";
/* No comment provided by engineer. */
"Chat migrated!" = "Чат мигрирован!";
/* No comment provided by engineer. */
"Chat preferences" = "Предпочтения";
@@ -792,9 +756,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Китайский и Испанский интерфейс";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Выберите _Мигрировать с другого устройства_ на новом устройстве и сосканируйте QR код.";
/* No comment provided by engineer. */
"Choose file" = "Выбрать файл";
@@ -840,9 +801,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Подтвердить обновление базы данных";
/* No comment provided by engineer. */
"Confirm network settings" = "Подтвердите настройки сети";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Подтвердите новый пароль…";
@@ -852,12 +810,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Подтвердить пароль";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Подтвердите, что Вы помните пароль базы данных для ее миграции.";
/* No comment provided by engineer. */
"Confirm upload" = "Подтвердить загрузку";
/* server test step */
"Connect" = "Соединиться";
@@ -1056,9 +1008,6 @@
/* No comment provided by engineer. */
"Created on %@" = "Дата создания %@";
/* No comment provided by engineer. */
"Creating archive link" = "Создание ссылки на архив";
/* No comment provided by engineer. */
"Creating link…" = "Создаётся ссылка…";
@@ -1206,9 +1155,6 @@
/* No comment provided by engineer. */
"Delete database" = "Удалить данные чата";
/* No comment provided by engineer. */
"Delete database from this device" = "Удалить базу данных с этого устройства";
/* server test step */
"Delete file" = "Удалить файл";
@@ -1401,18 +1347,9 @@
/* No comment provided by engineer. */
"Downgrade and open chat" = "Откатить версию и открыть чат";
/* No comment provided by engineer. */
"Download failed" = "Ошибка загрузки";
/* server test step */
"Download file" = "Загрузка файла";
/* No comment provided by engineer. */
"Downloading archive" = "Загрузка архива";
/* No comment provided by engineer. */
"Downloading link details" = "Загрузка ссылки архива";
/* No comment provided by engineer. */
"Duplicate display name!" = "Имя профиля уже используется!";
@@ -1446,9 +1383,6 @@
/* No comment provided by engineer. */
"Enable for all" = "Включить для всех";
/* No comment provided by engineer. */
"Enable in direct chats (BETA)!" = "Включите для контактов (BETA)!";
/* No comment provided by engineer. */
"Enable instant notifications?" = "Включить мгновенные уведомления?";
@@ -1563,9 +1497,6 @@
/* No comment provided by engineer. */
"Enter Passcode" = "Введите Код";
/* No comment provided by engineer. */
"Enter passphrase" = "Введите пароль";
/* No comment provided by engineer. */
"Enter passphrase…" = "Введите пароль…";
@@ -1605,9 +1536,6 @@
/* No comment provided by engineer. */
"Error adding member(s)" = "Ошибка при добавлении членов группы";
/* No comment provided by engineer. */
"Error allowing contact PQ encryption" = "Ошибка разрешения квантово-устойчивого шифрования";
/* No comment provided by engineer. */
"Error changing address" = "Ошибка при изменении адреса";
@@ -1662,9 +1590,6 @@
/* No comment provided by engineer. */
"Error deleting user profile" = "Ошибка удаления профиля пользователя";
/* No comment provided by engineer. */
"Error downloading the archive" = "Ошибка загрузки архива";
/* No comment provided by engineer. */
"Error enabling delivery receipts!" = "Ошибка при включении отчётов о доставке!";
@@ -1710,9 +1635,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Ошибка сохранения пароля в Keychain";
/* when migrating */
"Error saving settings" = "Ошибка сохранения настроек";
/* No comment provided by engineer. */
"Error saving user password" = "Ошибка при сохранении пароля пользователя";
@@ -1755,12 +1677,6 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "Ошибка при обновлении конфиденциальности";
/* No comment provided by engineer. */
"Error uploading the archive" = "Ошибка загрузки архива";
/* No comment provided by engineer. */
"Error verifying passphrase:" = "Ошибка подтверждения пароля:";
/* No comment provided by engineer. */
"Error: " = "Ошибка: ";
@@ -1794,9 +1710,6 @@
/* No comment provided by engineer. */
"Exported database archive." = "Архив чата экспортирован.";
/* No comment provided by engineer. */
"Exported file doesn't exist" = "Экспортированный файл не существует";
/* No comment provided by engineer. */
"Exporting database archive…" = "Архив чата экспортируется…";
@@ -1839,12 +1752,6 @@
/* No comment provided by engineer. */
"Filter unread and favorite chats." = "Фильтровать непрочитанные и избранные чаты.";
/* No comment provided by engineer. */
"Finalize migration" = "Завершить миграцию";
/* No comment provided by engineer. */
"Finalize migration on another device." = "Завершите миграцию на другом устройстве.";
/* No comment provided by engineer. */
"Finally, we have them! 🚀" = "Наконец-то, мы их добавили! 🚀";
@@ -2028,9 +1935,6 @@
/* No comment provided by engineer. */
"How to use your servers" = "Как использовать серверы";
/* No comment provided by engineer. */
"Hungarian interface" = "Венгерский интерфейс";
/* No comment provided by engineer. */
"ICE servers (one per line)" = "ICE серверы (один на строке)";
@@ -2070,12 +1974,6 @@
/* No comment provided by engineer. */
"Import database" = "Импорт архива чата";
/* No comment provided by engineer. */
"Import failed" = "Ошибка импорта";
/* No comment provided by engineer. */
"Importing archive" = "Импорт архива";
/* No comment provided by engineer. */
"Improved message delivery" = "Улучшенная доставка сообщений";
@@ -2085,9 +1983,6 @@
/* No comment provided by engineer. */
"Improved server configuration" = "Улучшенная конфигурация серверов";
/* No comment provided by engineer. */
"In order to continue, chat should be stopped." = "Чтобы продолжить, чат должен быть остановлен.";
/* No comment provided by engineer. */
"In reply to" = "В ответ на";
@@ -2172,9 +2067,6 @@
/* No comment provided by engineer. */
"Invalid link" = "Ошибка ссылки";
/* No comment provided by engineer. */
"Invalid migration confirmation" = "Ошибка подтверждения миграции";
/* No comment provided by engineer. */
"Invalid name!" = "Неверное имя!";
@@ -2439,9 +2331,6 @@
/* No comment provided by engineer. */
"Message text" = "Текст сообщения";
/* No comment provided by engineer. */
"Message too large" = "Сообщение слишком большое";
/* No comment provided by engineer. */
"Messages" = "Сообщения";
@@ -2451,36 +2340,9 @@
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Сообщения от %@ будут показаны!";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Сообщения, файлы и звонки защищены **end-to-end шифрованием** с прямой секретностью (PFS), правдоподобным отрицанием и восстановлением от взлома.";
/* No comment provided by engineer. */
"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Сообщения, файлы и звонки защищены **квантово-устойчивым end-to-end шифрованием** с прямой секретностью (PFS), правдоподобным отрицанием и восстановлением от взлома.";
/* No comment provided by engineer. */
"Migrate device" = "Мигрировать устройство";
/* No comment provided by engineer. */
"Migrate from another device" = "Миграция с другого устройства";
/* No comment provided by engineer. */
"Migrate here" = "Мигрировать сюда";
/* No comment provided by engineer. */
"Migrate to another device" = "Мигрировать на другое устройство";
/* No comment provided by engineer. */
"Migrate to another device via QR code." = "Мигрируйте на другое устройство через QR код.";
/* No comment provided by engineer. */
"Migrating" = "Миграция";
/* No comment provided by engineer. */
"Migrating database archive…" = "Данные чата перемещаются…";
/* No comment provided by engineer. */
"Migration complete" = "Миграция завершена";
/* No comment provided by engineer. */
"Migration error:" = "Ошибка при перемещении данных:";
@@ -2511,7 +2373,7 @@
/* copied message info */
"Moderated at: %@" = "Модерировано: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "удалено %@";
/* time unit */
@@ -2738,9 +2600,6 @@
/* No comment provided by engineer. */
"Open group" = "Открыть группу";
/* authentication reason */
"Open migration to another device" = "Открытие миграции на другое устройство";
/* No comment provided by engineer. */
"Open Settings" = "Открыть Настройки";
@@ -2753,15 +2612,9 @@
/* No comment provided by engineer. */
"Opening app…" = "Приложение отрывается…";
/* No comment provided by engineer. */
"Or paste archive link" = "Или вставьте ссылку архива";
/* No comment provided by engineer. */
"Or scan QR code" = "Или отсканируйте QR код";
/* No comment provided by engineer. */
"Or securely share this file link" = "Или передайте эту ссылку";
/* No comment provided by engineer. */
"Or show this code" = "Или покажите этот код";
@@ -2813,9 +2666,6 @@
/* message decrypt error item */
"Permanent decryption error" = "Ошибка расшифровки";
/* No comment provided by engineer. */
"Picture-in-picture calls" = "Звонки с картинкой-в-картинке";
/* No comment provided by engineer. */
"PING count" = "Количество PING";
@@ -2834,9 +2684,6 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Проверьте предпочтения Вашего контакта.";
/* No comment provided by engineer. */
"Please confirm that network settings are correct for this device." = "Пожалуйста, подтвердите, что настройки сети верны для этого устройства.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Пожалуйста, сообщите разработчикам.\nОшибка: %@";
@@ -2870,9 +2717,6 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Возможно, хэш сертификата в адресе сервера неверный";
/* No comment provided by engineer. */
"Post-quantum E2EE" = "Квантово-устойчивое E2EE";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Сохранить последний черновик, вместе с вложениями.";
@@ -2954,15 +2798,6 @@
/* No comment provided by engineer. */
"Push notifications" = "Доставка уведомлений";
/* No comment provided by engineer. */
"Push server" = "Сервер уведомлений";
/* chat item text */
"quantum resistant e2e encryption" = "квантово-устойчивое e2e шифрование";
/* No comment provided by engineer. */
"Quantum resistant encryption" = "Квантово-устойчивое шифрование";
/* No comment provided by engineer. */
"Rate the app" = "Оценить приложение";
@@ -3098,18 +2933,9 @@
/* No comment provided by engineer. */
"Repeat connection request?" = "Повторить запрос на соединение?";
/* No comment provided by engineer. */
"Repeat download" = "Повторить загрузку";
/* No comment provided by engineer. */
"Repeat import" = "Повторить импорт";
/* No comment provided by engineer. */
"Repeat join request?" = "Повторить запрос на вступление?";
/* No comment provided by engineer. */
"Repeat upload" = "Повторить загрузку";
/* chat item action */
"Reply" = "Ответить";
@@ -3167,9 +2993,6 @@
/* No comment provided by engineer. */
"Run chat" = "Запустить chat";
/* No comment provided by engineer. */
"Safer groups" = "Более безопасные группы";
/* chat item action */
"Save" = "Сохранить";
@@ -3410,9 +3233,6 @@
/* No comment provided by engineer. */
"Set passcode" = "Установить код доступа";
/* No comment provided by engineer. */
"Set passphrase" = "Установить пароль";
/* No comment provided by engineer. */
"Set passphrase to export" = "Установите пароль";
@@ -3458,9 +3278,6 @@
/* No comment provided by engineer. */
"Show preview" = "Показывать уведомления";
/* No comment provided by engineer. */
"Show QR code" = "Показать QR код";
/* No comment provided by engineer. */
"Show:" = "Показать:";
@@ -3521,9 +3338,6 @@
/* notification title */
"Somebody" = "Контакт";
/* chat item text */
"standard end-to-end encryption" = "стандартное end-to-end шифрование";
/* No comment provided by engineer. */
"Start chat" = "Запустить чат";
@@ -3539,9 +3353,6 @@
/* No comment provided by engineer. */
"Stop" = "Остановить";
/* No comment provided by engineer. */
"Stop chat" = "Остановить чат";
/* No comment provided by engineer. */
"Stop chat to enable database actions" = "Остановите чат, чтобы разблокировать операции с архивом чата";
@@ -3569,9 +3380,6 @@
/* authentication reason */
"Stop SimpleX" = "Остановить SimpleX";
/* No comment provided by engineer. */
"Stopping chat" = "Остановка чата";
/* No comment provided by engineer. */
"strike" = "зачеркнуть";
@@ -3722,12 +3530,6 @@
/* No comment provided by engineer. */
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Это действие нельзя отменить — Ваш профиль, контакты, сообщения и файлы будут безвозвратно утеряны.";
/* E2EE info chat item */
"This chat is protected by end-to-end encryption." = "Чат защищен end-to-end шифрованием.";
/* E2EE info chat item */
"This chat is protected by quantum resistant end-to-end encryption." = "Чат защищен квантово-устойчивым end-to-end шифрованием.";
/* notification title */
"this contact" = "этот контакт";
@@ -3920,15 +3722,9 @@
/* No comment provided by engineer. */
"Upgrade and open chat" = "Обновить и открыть чат";
/* No comment provided by engineer. */
"Upload failed" = "Ошибка загрузки";
/* server test step */
"Upload file" = "Загрузка файла";
/* No comment provided by engineer. */
"Uploading archive" = "Загрузка архива";
/* No comment provided by engineer. */
"Use .onion hosts" = "Использовать .onion хосты";
@@ -3959,9 +3755,6 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Использовать серверы предосталенные SimpleX Chat?";
/* No comment provided by engineer. */
"Use the app while in the call." = "Используйте приложение во время звонка.";
/* No comment provided by engineer. */
"User profile" = "Профиль чата";
@@ -3989,12 +3782,6 @@
/* No comment provided by engineer. */
"Verify connections" = "Проверять соединения";
/* No comment provided by engineer. */
"Verify database passphrase" = "Проверка пароля базы данных";
/* No comment provided by engineer. */
"Verify passphrase" = "Проверить пароль";
/* No comment provided by engineer. */
"Verify security code" = "Подтвердить код безопасности";
@@ -4073,9 +3860,6 @@
/* No comment provided by engineer. */
"wants to connect to you!" = "хочет соединиться с Вами!";
/* No comment provided by engineer. */
"Warning: starting chat on multiple devices is not supported and will cause message delivery failures" = "Внимание: запуск чата на нескольких устройствах не поддерживается и приведет к сбоям доставки сообщений.";
/* No comment provided by engineer. */
"Warning: you may lose some data!" = "Предупреждение: Вы можете потерять какие то данные!";
@@ -4091,9 +3875,6 @@
/* No comment provided by engineer. */
"Welcome message" = "Приветственное сообщение";
/* No comment provided by engineer. */
"Welcome message is too long" = "Приветственное сообщение слишком длинное";
/* No comment provided by engineer. */
"What's new" = "Новые функции";
@@ -4130,9 +3911,6 @@
/* No comment provided by engineer. */
"You" = "Вы";
/* No comment provided by engineer. */
"You **must not** use the same database on two devices." = "Вы **не должны** использовать одну и ту же базу данных на двух устройствах.";
/* No comment provided by engineer. */
"You accepted connection" = "Вы приняли приглашение соединиться";
@@ -4193,9 +3971,6 @@
/* No comment provided by engineer. */
"You can enable them later via app Privacy & Security settings." = "Вы можете включить их позже в настройках Конфиденциальности.";
/* No comment provided by engineer. */
"You can give another try." = "Вы можете попробовать еще раз.";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо.";
+1 -1
View File
@@ -1989,7 +1989,7 @@
/* copied message info */
"Moderated at: %@" = "กลั่นกรองที่: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "กลั่นกรองโดย %@";
/* time unit */
+14 -266
View File
@@ -85,9 +85,6 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**En gizli**: SimpleX Chat bildirim sunucusunu kullanma, arkaplanda mesajları periyodik olarak kontrol edin (uygulamayı ne sıklıkta kullandığınıza bağlıdır).";
/* No comment provided by engineer. */
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Lütfen dikkat**: Aynı veritabanını iki cihazda kullanmak, güvenlik koruması olarak bağlantılarınızdaki mesajların şifresinin çözülmesini engelleyecektir.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Lütfen aklınızda bulunsun**: eğer parolanızı kaybederseniz parolanızı değiştirme veya geri kurtarma ihtimaliniz YOKTUR.";
@@ -97,9 +94,6 @@
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Dikkat**: Anında iletilen bildirimlere Anahtar Zinciri'nde kaydedilmiş parola gereklidir.";
/* No comment provided by engineer. */
"**Warning**: the archive will be removed." = "**Uyarı**: arşiv silinecektir.";
/* No comment provided by engineer. */
"*bold*" = "\\*kalın*";
@@ -142,9 +136,6 @@
/* No comment provided by engineer. */
"%@ connected" = "%@ bağlandı";
/* No comment provided by engineer. */
"%@ downloaded" = "%@ indirildi";
/* notification title */
"%@ is connected!" = "%@ bağlandı!";
@@ -157,9 +148,6 @@
/* No comment provided by engineer. */
"%@ servers" = "%@ sunucuları";
/* No comment provided by engineer. */
"%@ uploaded" = "%@ yüklendi";
/* notification title */
"%@ wants to connect!" = "%@ bağlanmak istiyor!";
@@ -212,16 +200,13 @@
"%lld members" = "%lld üyeler";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld mesaj engellendi";
"%lld messages blocked" = "%lld mesajlar engellendi";
/* No comment provided by engineer. */
"%lld messages blocked by admin" = "%lld mesaj yönetici tarafından engellendi";
"%lld messages marked deleted" = "%lld mesajlar silinmiş olarak işaretlendi";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld mesaj silinmiş olarak işaretlendi";
/* No comment provided by engineer. */
"%lld messages moderated by %@" = "%lld mesaj %@ tarafından yönetildi";
"%lld messages moderated by %@" = "%lld mesajları %@ tarafından yönetildi";
/* No comment provided by engineer. */
"%lld minutes" = "%lld dakika";
@@ -260,7 +245,7 @@
"%u messages failed to decrypt." = "%u mesajın şifreleme çözümü başarısız oldu.";
/* No comment provided by engineer. */
"%u messages skipped." = "%u mesajlar atlandı.";
"%u messages skipped." = "%u mesaj atlandı";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
@@ -269,7 +254,7 @@
"<p>Hi!</p>\n<p><a href=\"%@\">Connect to me via SimpleX Chat</a></p>" = "<p>Merhaba!</p>\n<p><a href=\"%@\">SimpleX Chat ile bana bağlanın</a></p>";
/* No comment provided by engineer. */
"~strike~" = "\\~çizik~";
"~strike~" = "\\~strike~";
/* time to disappear */
"0 sec" = "0 saniye";
@@ -389,14 +374,11 @@
/* member role */
"admin" = "yönetici";
/* No comment provided by engineer. */
"Admins can block a member for all." = "Yöneticiler bir üyeyi tamamen engelleyebilirler.";
/* No comment provided by engineer. */
"Admins can create the links to join groups." = "Yöneticiler gruplara katılmak için bağlantılar oluşturabilir.";
/* No comment provided by engineer. */
"Advanced network settings" = "Gelişmiş ağ ayarları";
"Advanced network settings" = "GGelişmiş ağ ayarları";
/* chat item text */
"agreeing encryption for %@…" = "%@ için şifreleme kabul ediliyor…";
@@ -416,9 +398,6 @@
/* No comment provided by engineer. */
"All group members will remain connected." = "Tüm grup üyeleri bağlı kalacaktır.";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone!" = "Tüm mesajlar silinecektir - bu geri alınamaz!";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Tüm mesajlar silinecektir. Bu, geri alınamaz! Mesajlar, YALNIZCA senin için silinecektir.";
@@ -431,9 +410,6 @@
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Tüm kişileriniz bağlı kalacaktır. Profil güncellemesi kişilerinize gönderilecektir.";
/* No comment provided by engineer. */
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "Tüm kişileriniz, sohbetleriniz ve dosyalarınız güvenli bir şekilde şifrelenecek ve parçalar halinde yapılandırılmış XFTP rölelerine yüklenecektir.";
/* No comment provided by engineer. */
"Allow" = "İzin ver";
@@ -443,9 +419,6 @@
/* No comment provided by engineer. */
"Allow disappearing messages only if your contact allows it to you." = "Eğer kişide izin verirse kaybolan mesajlara izin ver.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Konuştuğun kişi, kalıcı olarak silinebilen mesajlara izin veriyorsa sen de ver. (24 saat içinde)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Yalnızca kişin mesaj tepkilerine izin veriyorsa sen de ver.";
@@ -458,9 +431,6 @@
/* No comment provided by engineer. */
"Allow sending disappearing messages." = "Kendiliğinden yok olan mesajlar göndermeye izin ver.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages. (24 hours)" = "Gönderilen mesajların kalıcı olarak silinmesine izin ver. (24 saat içinde)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Dosya ve medya göndermeye izin ver.";
@@ -479,9 +449,6 @@
/* No comment provided by engineer. */
"Allow your contacts to call you." = "Kişilerinin seni aramasına izin ver.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Kişilerinin gönderilen mesajları kalıcı olarak silmesine izin ver. (24 saat içinde)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Kişilerinizin kaybolan mesajlar göndermesine izin verin.";
@@ -501,7 +468,7 @@
"always" = "her zaman";
/* No comment provided by engineer. */
"Always use relay" = "Her zaman yönlendirici kullan";
"Always use relay" = "Her zaman yönlendirici kulan";
/* No comment provided by engineer. */
"An empty chat profile with the provided name is created, and the app opens as usual." = "Verilen adla boş bir sohbet profili oluşturulur ve uygulama her zamanki gibi açılır.";
@@ -515,9 +482,6 @@
/* No comment provided by engineer. */
"App build: %@" = "Uygulama sürümü: %@";
/* No comment provided by engineer. */
"App data migration" = "Uygulama verisi taşıma";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Uygulama yerel dosyaları şifreler (videolar dışında).";
@@ -539,15 +503,6 @@
/* No comment provided by engineer. */
"Appearance" = "Görünüş";
/* No comment provided by engineer. */
"Apply" = "Uygula";
/* No comment provided by engineer. */
"Archive and upload" = "Arşivle ve yükle";
/* No comment provided by engineer. */
"Archiving database" = "Veritabanı arşivleniyor";
/* No comment provided by engineer. */
"Attach" = "Ekle";
@@ -617,32 +572,17 @@
/* No comment provided by engineer. */
"Block" = "Engelle";
/* No comment provided by engineer. */
"Block for all" = "Herkes için engelle";
/* No comment provided by engineer. */
"Block group members" = "Grup üyelerini engelle";
/* No comment provided by engineer. */
"Block member" = "Üyeyi engelle";
/* No comment provided by engineer. */
"Block member for all?" = "Üye herkes için engellensin mi?";
/* No comment provided by engineer. */
"Block member?" = "Üyeyi engelle?";
/* marked deleted chat item preview text */
"blocked" = "engellendi";
/* rcv group event chat item */
"blocked %@" = "engellendi %@";
/* marked deleted chat item preview text */
"blocked by admin" = "yönetici tarafından engellendi";
/* No comment provided by engineer. */
"Blocked by admin" = "Yönetici tarafından engellendi";
"blocked" = "engellendi";
/* No comment provided by engineer. */
"bold" = "kalın";
@@ -650,9 +590,6 @@
/* No comment provided by engineer. */
"Both you and your contact can add message reactions." = "Sen ve konuştuğun kişi mesaj tepkileri ekleyebilir.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Konuştuğun kişi ve sen mesajları kalıcı olarak silebilirsiniz. (24 saat içinde)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Sen ve konuştuğun kişi aramalar yapabilir.";
@@ -695,9 +632,6 @@
/* No comment provided by engineer. */
"Cancel" = "İptal et";
/* No comment provided by engineer. */
"Cancel migration" = "Taşımayı iptal et";
/* feature offered item */
"cancelled %@" = "%@ iptal edildi";
@@ -777,9 +711,6 @@
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Sohbet durduruldu. Bu veritabanını zaten başka bir cihazda kullandıysanız, sohbete başlamadan önce onu geri aktarmalısınız.";
/* No comment provided by engineer. */
"Chat migrated!" = "Sohbet taşındı!";
/* No comment provided by engineer. */
"Chat preferences" = "Sohbet tercihleri";
@@ -792,9 +723,6 @@
/* No comment provided by engineer. */
"Chinese and Spanish interface" = "Çince ve İspanyolca arayüz";
/* No comment provided by engineer. */
"Choose _Migrate from another device_ on the new device and scan QR code." = "Yeni cihazda _Başka bir cihazdan taşı_ seçeneğini seçin ve QR kodunu tarayın.";
/* No comment provided by engineer. */
"Choose file" = "Dosya seç";
@@ -810,9 +738,6 @@
/* No comment provided by engineer. */
"Clear conversation?" = "Sohbet temizlensin mi?";
/* No comment provided by engineer. */
"Clear private notes?" = "Gizli notlar temizlensin mi?";
/* No comment provided by engineer. */
"Clear verification" = "Doğrulamayı temizle";
@@ -840,9 +765,6 @@
/* No comment provided by engineer. */
"Confirm database upgrades" = "Veritabanı geliştirmelerini onayla";
/* No comment provided by engineer. */
"Confirm network settings" = "Ağ ayarlarını onaylayın";
/* No comment provided by engineer. */
"Confirm new passphrase…" = "Yeni parolayı onayla…";
@@ -852,12 +774,6 @@
/* No comment provided by engineer. */
"Confirm password" = "Şifreyi onayla";
/* No comment provided by engineer. */
"Confirm that you remember database passphrase to migrate it." = "Taşımak için veritabanı parolasını hatırladığınızı doğrulayın.";
/* No comment provided by engineer. */
"Confirm upload" = "Yüklemeyi onayla";
/* server test step */
"Connect" = "Bağlan";
@@ -960,9 +876,6 @@
/* connection information */
"connection:%@" = "bağlantı:%@";
/* profile update event chat item */
"contact %@ changed to %@" = "%1$@ kişisi %2$@ olarak değişti";
/* No comment provided by engineer. */
"Contact allows" = "Kişi izin veriyor";
@@ -1047,18 +960,9 @@
/* No comment provided by engineer. */
"Create your profile" = "Profilini oluştur";
/* No comment provided by engineer. */
"Created at" = "Şurada oluşturuldu";
/* copied message info */
"Created at: %@" = "Şurada oluşturuldu: %@";
/* No comment provided by engineer. */
"Created on %@" = "%@ de oluşturuldu";
/* No comment provided by engineer. */
"Creating archive link" = "Arşiv bağlantısı oluşturuluyor";
/* No comment provided by engineer. */
"Creating link…" = "Link oluşturuluyor…";
@@ -1162,7 +1066,7 @@
"Delete" = "Sil";
/* No comment provided by engineer. */
"Delete %lld messages?" = "%lld mesaj silinsin mi?";
"Delete %lld messages?" = "%lld mesajları silinsin mi?";
/* No comment provided by engineer. */
"Delete address" = "Adresi sil";
@@ -1206,9 +1110,6 @@
/* No comment provided by engineer. */
"Delete database" = "Veritabanını sil";
/* No comment provided by engineer. */
"Delete database from this device" = "Veritabanını bu cihazdan sil";
/* server test step */
"Delete file" = "Dosyayı sil";
@@ -1383,9 +1284,6 @@
/* No comment provided by engineer. */
"Do it later" = "Sonra yap";
/* No comment provided by engineer. */
"Do not send history to new members." = "Yeni üyelere geçmişi gönderme.";
/* No comment provided by engineer. */
"Do NOT use SimpleX for emergency calls." = "Acil aramalar için SimpleX'i KULLANMAYIN.";
@@ -1401,18 +1299,9 @@
/* No comment provided by engineer. */
"Downgrade and open chat" = "Sürüm düşür ve sohbeti aç";
/* No comment provided by engineer. */
"Download failed" = "Yükleme başarısız oldu";
/* server test step */
"Download file" = "Dosya indir";
/* No comment provided by engineer. */
"Downloading archive" = "Arşiv indiriliyor";
/* No comment provided by engineer. */
"Downloading link details" = "Bağlantı detayları indiriliyor";
/* No comment provided by engineer. */
"Duplicate display name!" = "Yinelenen görünen ad!";
@@ -1446,9 +1335,6 @@
/* No comment provided by engineer. */
"Enable for all" = "Herkes için etkinleştir";
/* No comment provided by engineer. */
"Enable in direct chats (BETA)!" = "Doğrudan sohbetlerde etkinleştirin (BETA)!";
/* No comment provided by engineer. */
"Enable instant notifications?" = "Anlık bildirimler etkinleştirilsin mi?";
@@ -1563,9 +1449,6 @@
/* No comment provided by engineer. */
"Enter Passcode" = "Şifre gir";
/* No comment provided by engineer. */
"Enter passphrase" = "Parolayı girin";
/* No comment provided by engineer. */
"Enter passphrase…" = "Parola gir…";
@@ -1626,9 +1509,6 @@
/* No comment provided by engineer. */
"Error creating member contact" = "Kişi iletişimi oluşturulurken hata oluştu";
/* No comment provided by engineer. */
"Error creating message" = "Mesaj oluşturulurken hata";
/* No comment provided by engineer. */
"Error creating profile!" = "Profil oluşturulurken hata oluştu!";
@@ -1659,9 +1539,6 @@
/* No comment provided by engineer. */
"Error deleting user profile" = "Kullanıcı profili silinirken hata oluştu";
/* No comment provided by engineer. */
"Error downloading the archive" = "Arşiv indirilirken hata oluştu";
/* No comment provided by engineer. */
"Error enabling delivery receipts!" = "Görüldü bilgisi etkinleştirilirken hata oluştu!";
@@ -1707,9 +1584,6 @@
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Parolayı Anahtar Zincirine kaydederken hata oluştu";
/* when migrating */
"Error saving settings" = "Ayarlar kaydedilirken hata oluştu";
/* No comment provided by engineer. */
"Error saving user password" = "Kullanıcı şifresi kaydedilirken hata oluştu";
@@ -1752,12 +1626,6 @@
/* No comment provided by engineer. */
"Error updating user privacy" = "Kullanıcı gizliliği güncellenirken hata oluştu";
/* No comment provided by engineer. */
"Error uploading the archive" = "Arşiv yüklenirken hata oluştu";
/* No comment provided by engineer. */
"Error verifying passphrase:" = "Parola doğrulanırken hata oluştu:";
/* No comment provided by engineer. */
"Error: " = "Hata: ";
@@ -1774,7 +1642,7 @@
"Even when disabled in the conversation." = "Konuşma sırasında devre dışı bırakılsa bile.";
/* No comment provided by engineer. */
"event happened" = "etkinlik yaşandı";
"event happened" = "etkinliği yaşandı";
/* No comment provided by engineer. */
"Exit without saving" = "Kaydetmeden çık";
@@ -1791,9 +1659,6 @@
/* No comment provided by engineer. */
"Exported database archive." = "Dışarı çıkarılmış veritabanı arşivi.";
/* No comment provided by engineer. */
"Exported file doesn't exist" = "Dışa aktarılan dosya mevcut değil";
/* No comment provided by engineer. */
"Exporting database archive…" = "Dışarı çıkarılmış veritabanı arşivi…";
@@ -1836,12 +1701,6 @@
/* No comment provided by engineer. */
"Filter unread and favorite chats." = "Favori ve okunmamış sohbetleri filtrele.";
/* No comment provided by engineer. */
"Finalize migration" = "Taşıma işlemini sonlandır";
/* No comment provided by engineer. */
"Finalize migration on another device." = "Taşıma işlemini başka bir cihazda sonlandırın.";
/* No comment provided by engineer. */
"Finally, we have them! 🚀" = "Sonunda, onlara sahibiz! 🚀";
@@ -1935,9 +1794,6 @@
/* No comment provided by engineer. */
"Group members can add message reactions." = "Grup üyeleri mesaj tepkileri ekleyebilir.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages. (24 hours)" = "Grup üyeleri, gönderilen mesajları kalıcı olarak silebilir. (24 saat içinde)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Grup üyeleri doğrudan mesajlar gönderebilir.";
@@ -2004,9 +1860,6 @@
/* No comment provided by engineer. */
"History" = "Geçmiş";
/* No comment provided by engineer. */
"History is not sent to new members." = "Yeni üyelere geçmiş gönderilmedi.";
/* time unit */
"hours" = "saat";
@@ -2064,24 +1917,12 @@
/* No comment provided by engineer. */
"Import database" = "Veritabanını içe aktar";
/* No comment provided by engineer. */
"Import failed" = "İçe aktarma başarısız oldu";
/* No comment provided by engineer. */
"Importing archive" = "Arşiv içe aktarılıyor";
/* No comment provided by engineer. */
"Improved message delivery" = "İyileştirilmiş mesaj iletimi";
/* No comment provided by engineer. */
"Improved privacy and security" = "Geliştirilmiş gizlilik ve güvenlik";
/* No comment provided by engineer. */
"Improved server configuration" = "Geliştirilmiş sunucu yapılandırması";
/* No comment provided by engineer. */
"In order to continue, chat should be stopped." = "Devam etmek için sohbetin durdurulması gerekiyor.";
/* No comment provided by engineer. */
"In reply to" = "Cevap olarak";
@@ -2160,15 +2001,9 @@
/* invalid chat item */
"invalid data" = "geçersiz veri";
/* No comment provided by engineer. */
"Invalid display name!" = "Geçersiz görünen ad!";
/* No comment provided by engineer. */
"Invalid link" = "Geçersiz bağlantı";
/* No comment provided by engineer. */
"Invalid migration confirmation" = "Geçersiz taşıma onayı";
/* No comment provided by engineer. */
"Invalid name!" = "Geçersiz isim!";
@@ -2203,7 +2038,7 @@
"invited" = "davet edildi";
/* rcv group event chat item */
"invited %@" = "%@ davet edildi";
"invited %@" = "%@ a davet edildi";
/* chat list item title */
"invited to connect" = "bağlanmaya davet edildi";
@@ -2256,9 +2091,6 @@
/* No comment provided by engineer. */
"Join group" = "Gruba katıl";
/* No comment provided by engineer. */
"Join group conversations" = "Grup sohbetlerine katıl";
/* No comment provided by engineer. */
"Join group?" = "Gruba katılınsın mı?";
@@ -2394,9 +2226,6 @@
/* No comment provided by engineer. */
"Member" = "Kişi";
/* profile update event chat item */
"member %@ changed to %@" = "kişi %1$@ , %2$@ olarak değişti";
/* rcv group event chat item */
"member connected" = "bağlanıldı";
@@ -2433,9 +2262,6 @@
/* No comment provided by engineer. */
"Message text" = "Mesaj yazısı";
/* No comment provided by engineer. */
"Message too large" = "Mesaj çok büyük";
/* No comment provided by engineer. */
"Messages" = "Mesajlar";
@@ -2478,7 +2304,7 @@
/* copied message info */
"Moderated at: %@" = "%@ de yönetildi";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "%@ tarafından yönetilmekte";
/* time unit */
@@ -2666,9 +2492,6 @@
/* No comment provided by engineer. */
"Only you can add message reactions." = "Sadece siz mesaj tepkileri ekleyebilirsiniz.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Mesajları yalnızca siz geri döndürülemez şekilde silebilirsiniz (kişiniz bunları silinmek üzere işaretleyebilir). (24 saat içinde)";
/* No comment provided by engineer. */
"Only you can make calls." = "Sadece sen aramalar yapabilirsin.";
@@ -2681,9 +2504,6 @@
/* No comment provided by engineer. */
"Only your contact can add message reactions." = "Sadece karşıdaki kişi mesaj tepkileri ekleyebilir.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Yalnızca kişiniz mesajları geri alınamaz şekilde silebilir (silinmeleri için işaretleyebilirsiniz). (24 saat içinde)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Sadece karşıdaki kişi aramalar yapabilir.";
@@ -2744,18 +2564,12 @@
/* No comment provided by engineer. */
"Password to show" = "Gösterilecek şifre";
/* past/unknown group member */
"Past member %@" = "Geçmiş üye %@";
/* No comment provided by engineer. */
"Paste desktop address" = "Bilgisayar adresini yapıştır";
/* No comment provided by engineer. */
"Paste image" = "Fotoğraf yapıştır";
/* No comment provided by engineer. */
"Paste link to connect!" = "Bağlanmak için bağlantıyı yapıştır!";
/* No comment provided by engineer. */
"Paste the link you received" = "Aldığın bağlantıyı yapıştır";
@@ -2843,9 +2657,6 @@
/* No comment provided by engineer. */
"Private filenames" = "Gizli dosya adları";
/* name of notes to self */
"Private notes" = "Gizli notlar";
/* No comment provided by engineer. */
"Profile and server connections" = "Profil ve sunucu bağlantıları";
@@ -2960,9 +2771,6 @@
/* No comment provided by engineer. */
"Receiving via" = "Aracılığıyla alınıyor";
/* 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)." = "Yakın geçmiş ve geliştirilmiş [dizin botu](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. */
"Recipients see updates as you type them." = "Alıcılar yazdığına göre güncellemeleri görecektir.";
@@ -3017,12 +2825,6 @@
/* rcv group event chat item */
"removed %@" = "%@ kaldırıldı";
/* profile update event chat item */
"removed contact address" = "kişi adresi silindi";
/* profile update event chat item */
"removed profile picture" = "profil fotoğrafı silindi";
/* rcv group event chat item */
"removed you" = "sen kaldırıldın";
@@ -3146,9 +2948,6 @@
/* No comment provided by engineer. */
"Save welcome message?" = "Hoşgeldin mesajı kaydedilsin mi?";
/* message info title */
"Saved message" = "Kaydedilmiş mesaj";
/* No comment provided by engineer. */
"Saved WebRTC ICE servers will be removed" = "Kaydedilmiş WebRTC ICE sunucuları silinecek";
@@ -3170,9 +2969,6 @@
/* No comment provided by engineer. */
"Search" = "Ara";
/* No comment provided by engineer. */
"Search bar accepts invitation links." = "Arama çubuğu davet bağlantılarını kabul eder.";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Ara veya SimpleX bağlantısını yapıştır";
@@ -3254,9 +3050,6 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Bunları galeriden veya özel klavyelerden gönder.";
/* No comment provided by engineer. */
"Send up to 100 last messages to new members." = "Yeni üyelere 100 adete kadar son mesajları gönderin.";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "Gönderici dosya gönderimini iptal etti.";
@@ -3329,12 +3122,6 @@
/* No comment provided by engineer. */
"Set it instead of system authentication." = "Sistem kimlik doğrulaması yerine ayarla.";
/* profile update event chat item */
"set new contact address" = "yeni kişi adresi ayarla";
/* profile update event chat item */
"set new profile picture" = "yeni profil fotoğrafı ayarla";
/* No comment provided by engineer. */
"Set passcode" = "Şifre ayarla";
@@ -3486,7 +3273,7 @@
"Stop SimpleX" = "SimpleX'i durdur";
/* No comment provided by engineer. */
"strike" = "çizik";
"strike" = "grev";
/* No comment provided by engineer. */
"Submit" = "Gönder";
@@ -3641,9 +3428,6 @@
/* No comment provided by engineer. */
"This device name" = "Bu cihazın ismi";
/* No comment provided by engineer. */
"This display name is invalid. Please choose another name." = "Bu görünen ad geçersiz. Lütfen başka bir isim seçin.";
/* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Bu grubun %lld den fazla üyesi var,görüldü bilgisi gönderilmedi.";
@@ -3704,9 +3488,6 @@
/* No comment provided by engineer. */
"Trying to connect to the server used to receive messages from this contact." = "Bu kişiden mesaj almak için kullanılan sunucuya bağlanılmaya çalışılıyor.";
/* No comment provided by engineer. */
"Turkish interface" = "Türkçe arayüz";
/* No comment provided by engineer. */
"Turn off" = "Kapat";
@@ -3719,21 +3500,12 @@
/* No comment provided by engineer. */
"Unblock" = "Engeli kaldır";
/* No comment provided by engineer. */
"Unblock for all" = "Herkes için engeli kaldır";
/* No comment provided by engineer. */
"Unblock member" = "Üyenin engelini kaldır";
/* No comment provided by engineer. */
"Unblock member for all?" = "Üyenin engeli herkes için kaldırılsın mı?";
/* No comment provided by engineer. */
"Unblock member?" = "Üyenin engeli kaldırılsın mı?";
/* rcv group event chat item */
"unblocked %@" = "engeli kaldırıldı %@";
/* item status description */
"Unexpected error: %@" = "Beklenmeyen hata: %@";
@@ -3767,9 +3539,6 @@
/* No comment provided by engineer. */
"Unknown error" = "Bilinmeyen hata";
/* No comment provided by engineer. */
"unknown status" = "bilinmeyen durum";
/* No comment provided by engineer. */
"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "iOS arama arayüzünü kullanmadığınız sürece, kesintileri önlemek için Rahatsız Etmeyin modunu etkinleştirin.";
@@ -3794,9 +3563,6 @@
/* No comment provided by engineer. */
"Unread" = "Okunmamış";
/* No comment provided by engineer. */
"Up to 100 last messages are sent to new members." = "Yeni üyelere 100e kadar en son mesajlar gönderildi.";
/* No comment provided by engineer. */
"Update" = "Güncelle";
@@ -3815,9 +3581,6 @@
/* rcv group event chat item */
"updated group profile" = "grup profili güncellendi";
/* profile update event chat item */
"updated profile" = "güncellenmiş profil";
/* No comment provided by engineer. */
"Updating settings will re-connect the client to all servers." = "Ayarların güncellenmesi, istemciyi tüm sunuculara yeniden bağlayacaktır.";
@@ -3926,9 +3689,6 @@
/* No comment provided by engineer. */
"View security code" = "Güvenlik kodunu görüntüle";
/* chat feature */
"Visible history" = "Görünür geçmiş";
/* No comment provided by engineer. */
"Voice message…" = "Sesli mesaj…";
@@ -3992,15 +3752,9 @@
/* 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." = "Biriyle gizli bir profil paylaştığınızda, bu profil sizi davet ettikleri gruplar için kullanılacaktır.";
/* No comment provided by engineer. */
"With encrypted files and media." = "Şifrelenmiş dosyalar ve medya ile birlikte.";
/* No comment provided by engineer. */
"With optional welcome message." = "İsteğe bağlı karşılama mesajı ile.";
/* No comment provided by engineer. */
"With reduced battery usage." = "Azaltılmış pil kullanımı ile birlikte.";
/* No comment provided by engineer. */
"Wrong database passphrase" = "Yanlış veritabanı parolası";
@@ -4061,9 +3815,6 @@
/* No comment provided by engineer. */
"you are observer" = "gözlemcisiniz";
/* snd group event chat item */
"you blocked %@" = "engelledin %@";
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Cihaz ve uygulama kimlik doğrulaması olmadan kilit ekranından çağrı kabul edebilirsiniz.";
@@ -4161,7 +3912,7 @@
"You need to allow your contact to send voice messages to be able to send them." = "Sesli mesaj gönderebilmeniz için kişinizin de sesli mesaj göndermesine izin vermeniz gerekir.";
/* No comment provided by engineer. */
"You rejected group invitation" = "Grup davetini reddettiniz";
"You rejected group invitation" = "Grup davetini reddettiniz.";
/* snd group event chat item */
"you removed %@" = "%@'yi çıkarttınız";
@@ -4175,9 +3926,6 @@
/* chat list item description */
"you shared one-time link incognito" = "tek kullanımlık link paylaştınız gizli";
/* snd group event chat item */
"you unblocked %@" = "engelini kaldırdın %@";
/* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Grup sahibinin cihazı çevrimiçi olduğunda gruba bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!";
+1 -31
View File
@@ -64,15 +64,9 @@
/* No comment provided by engineer. */
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Зірка на GitHub](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." = "**Додати контакт**: створити нове посилання-запрошення або підключитися за отриманим посиланням.";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Додати новий контакт**: щоб створити одноразовий QR-код або посилання для свого контакту.";
/* No comment provided by engineer. */
"**Create group**: to create a new group." = "**Створити групу**: створити нову групу.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**e2e encrypted** аудіодзвінок";
@@ -202,9 +196,6 @@
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld повідомлень заблоковано";
/* No comment provided by engineer. */
"%lld messages blocked by admin" = "%lld повідомлень заблоковано адміністратором";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld повідомлень позначено як видалені";
@@ -347,9 +338,6 @@
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Додайте адресу до свого профілю, щоб ваші контакти могли поділитися нею з іншими людьми. Повідомлення про оновлення профілю буде надіслано вашим контактам.";
/* No comment provided by engineer. */
"Add contact" = "Додати контакт";
/* No comment provided by engineer. */
"Add preset servers" = "Додавання попередньо встановлених серверів";
@@ -401,9 +389,6 @@
/* No comment provided by engineer. */
"All group members will remain connected." = "Всі учасники групи залишаться на зв'язку.";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone!" = "Усі повідомлення будуть видалені - цю дію не можна скасувати!";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Всі повідомлення будуть видалені - це неможливо скасувати! Повідомлення будуть видалені ТІЛЬКИ для вас.";
@@ -581,24 +566,15 @@
/* No comment provided by engineer. */
"Block" = "Блокувати";
/* No comment provided by engineer. */
"Block for all" = "Заблокувати для всіх";
/* No comment provided by engineer. */
"Block group members" = "Учасники групи блокування";
/* No comment provided by engineer. */
"Block member" = "Заблокувати користувача";
/* No comment provided by engineer. */
"Block member for all?" = "Заблокувати учасника для всіх?";
/* No comment provided by engineer. */
"Block member?" = "Заблокувати користувача?";
/* No comment provided by engineer. */
"Blocked by admin" = "Заблокований адміністратором";
/* No comment provided by engineer. */
"bold" = "жирний";
@@ -638,9 +614,6 @@
/* No comment provided by engineer. */
"Calls" = "Дзвінки";
/* No comment provided by engineer. */
"Camera not available" = "Камера недоступна";
/* No comment provided by engineer. */
"Can't invite contact!" = "Не вдається запросити контакт!";
@@ -726,9 +699,6 @@
/* No comment provided by engineer. */
"Chat is stopped" = "Чат зупинено";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Чат зупинено. Якщо ви вже використовували цю базу даних на іншому пристрої, перенесіть її назад перед запуском чату.";
/* No comment provided by engineer. */
"Chat preferences" = "Налаштування чату";
@@ -2157,7 +2127,7 @@
/* copied message info */
"Moderated at: %@" = "Модерується за: %@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "модерується %@";
/* time unit */
+1 -391
View File
@@ -25,9 +25,6 @@
/* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- 更稳定的传输!\n- 更好的社群!\n- 以及更多!";
/* No comment provided by engineer. */
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- 可选择通知已删除的联系人。\n- 带空格的个人资料名称。\n- 以及更多!";
/* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- 语音消息最长5分钟。\n- 自定义限时消息。\n- 编辑消息历史。";
@@ -112,18 +109,12 @@
/* No comment provided by engineer. */
"%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ 和 %@";
/* No comment provided by engineer. */
"%@ and %@ connected" = "%@ 和%@ 以建立连接";
/* copied message info, <sender> at <time> */
"%@ at %@:" = "@ %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ 已连接";
/* notification title */
"%@ is connected!" = "%@ 已连接!";
@@ -139,9 +130,6 @@
/* notification title */
"%@ wants to connect!" = "%@ 要连接!";
/* No comment provided by engineer. */
"%@, %@ and %lld members" = "%@, %@ 和 %lld 成员";
/* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ 和 %lld 个成员";
@@ -181,15 +169,9 @@
/* No comment provided by engineer. */
"%lld file(s) with total size of %@" = "%lld 总文件大小 %@";
/* No comment provided by engineer. */
"%lld group events" = "%lld 群组事件";
/* No comment provided by engineer. */
"%lld members" = "%lld 成员";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld 条消息已屏蔽";
/* No comment provided by engineer. */
"%lld minutes" = "%lld 分钟";
@@ -323,9 +305,6 @@
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "将地址添加到您的个人资料,以便您的联系人可以与其他人共享。个人资料更新将发送给您的联系人。";
/* No comment provided by engineer. */
"Add contact" = "添加联系人";
/* No comment provided by engineer. */
"Add preset servers" = "添加预设服务器";
@@ -377,9 +356,6 @@
/* No comment provided by engineer. */
"All group members will remain connected." = "所有群组成员将保持连接。";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone!" = "所有消息都将被删除 - 这无法被撤销!";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。";
@@ -446,12 +422,6 @@
/* No comment provided by engineer. */
"Already connected?" = "已连接?";
/* No comment provided by engineer. */
"Already connecting!" = "已经在连接了!";
/* No comment provided by engineer. */
"Already joining the group!" = "已经加入了该群组!";
/* pref value */
"always" = "始终";
@@ -518,9 +488,6 @@
/* No comment provided by engineer. */
"Authentication unavailable" = "身份验证不可用";
/* member role */
"author" = "作者";
/* No comment provided by engineer. */
"Auto-accept" = "自动接受";
@@ -533,9 +500,6 @@
/* No comment provided by engineer. */
"Back" = "返回";
/* No comment provided by engineer. */
"Bad desktop address" = "糟糕的桌面地址";
/* integrity error chat item */
"bad message hash" = "错误消息散列";
@@ -548,42 +512,9 @@
/* No comment provided by engineer. */
"Bad message ID" = "错误消息 ID";
/* No comment provided by engineer. */
"Better groups" = "更佳的群组";
/* No comment provided by engineer. */
"Better messages" = "更好的消息";
/* No comment provided by engineer. */
"Block" = "封禁";
/* No comment provided by engineer. */
"Block for all" = "为所有人封禁";
/* No comment provided by engineer. */
"Block group members" = "屏蔽群组成员";
/* No comment provided by engineer. */
"Block member" = "封禁成员";
/* No comment provided by engineer. */
"Block member for all?" = "为所有其他成员封禁该成员?";
/* No comment provided by engineer. */
"Block member?" = "封禁成员吗?";
/* marked deleted chat item preview text */
"blocked" = "已封禁";
/* rcv group event chat item */
"blocked %@" = "已封禁 %@";
/* marked deleted chat item preview text */
"blocked by admin" = "由管理员封禁";
/* No comment provided by engineer. */
"Blocked by admin" = "由管理员封禁";
/* No comment provided by engineer. */
"bold" = "加粗";
@@ -623,9 +554,6 @@
/* No comment provided by engineer. */
"Calls" = "通话";
/* No comment provided by engineer. */
"Camera not available" = "相机不可用";
/* No comment provided by engineer. */
"Can't invite contact!" = "无法邀请联系人!";
@@ -711,9 +639,6 @@
/* No comment provided by engineer. */
"Chat is stopped" = "聊天已停止";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "聊天已停止。如果你已经在另一台设备商使用过此数据库,你应该在启动聊天前将数据库传输回来。";
/* No comment provided by engineer. */
"Chat preferences" = "聊天偏好设置";
@@ -741,9 +666,6 @@
/* No comment provided by engineer. */
"Clear conversation?" = "清除对话吗?";
/* No comment provided by engineer. */
"Clear private notes?" = "清除私密笔记?";
/* No comment provided by engineer. */
"Clear verification" = "清除验证";
@@ -783,21 +705,12 @@
/* server test step */
"Connect" = "连接";
/* No comment provided by engineer. */
"Connect automatically" = "自动连接";
/* No comment provided by engineer. */
"Connect incognito" = "在隐身状态下连接";
/* No comment provided by engineer. */
"Connect to desktop" = "连接到桌面";
/* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "连接到 SimpleX Chat 开发者。";
/* No comment provided by engineer. */
"Connect to yourself?" = "连接到你自己?";
/* No comment provided by engineer. */
"Connect via link" = "通过链接连接";
@@ -807,15 +720,9 @@
/* No comment provided by engineer. */
"connected" = "已连接";
/* No comment provided by engineer. */
"Connected desktop" = "已连接的桌面";
/* rcv group event chat item */
"connected directly" = "已直连";
/* No comment provided by engineer. */
"Connected to desktop" = "已连接到桌面";
/* No comment provided by engineer. */
"connecting" = "连接中";
@@ -840,9 +747,6 @@
/* No comment provided by engineer. */
"Connecting server… (error: %@)" = "连接服务器中……(错误:%@)";
/* No comment provided by engineer. */
"Connecting to desktop" = "正连接到桌面";
/* chat list item title */
"connecting…" = "连接中……";
@@ -861,9 +765,6 @@
/* No comment provided by engineer. */
"Connection request sent!" = "已发送连接请求!";
/* No comment provided by engineer. */
"Connection terminated" = "连接被终止";
/* No comment provided by engineer. */
"Connection timeout" = "连接超时";
@@ -915,18 +816,12 @@
/* No comment provided by engineer. */
"Create" = "创建";
/* No comment provided by engineer. */
"Create a group using a random profile." = "使用随机身份创建群组";
/* No comment provided by engineer. */
"Create an address to let people connect with you." = "创建一个地址,让人们与您联系。";
/* server test step */
"Create file" = "创建文件";
/* No comment provided by engineer. */
"Create group" = "建群";
/* No comment provided by engineer. */
"Create group link" = "创建群组链接";
@@ -936,9 +831,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "在[桌面应用程序](https://simplex.chat/downloads/)中创建新的个人资料。 💻";
/* No comment provided by engineer. */
"Create profile" = "创建个人资料";
/* server test step */
"Create queue" = "创建队列";
@@ -951,15 +843,9 @@
/* No comment provided by engineer. */
"Create your profile" = "创建您的资料";
/* No comment provided by engineer. */
"Created at" = "创建于";
/* No comment provided by engineer. */
"Created on %@" = "创建于 %@";
/* No comment provided by engineer. */
"Creating link…" = "创建链接中…";
/* No comment provided by engineer. */
"creator" = "创建者";
@@ -1071,9 +957,6 @@
/* No comment provided by engineer. */
"Delete all files" = "删除所有文件";
/* No comment provided by engineer. */
"Delete and notify contact" = "删除并通知联系人";
/* No comment provided by engineer. */
"Delete archive" = "删除档案";
@@ -1170,9 +1053,6 @@
/* copied message info */
"Deleted at: %@" = "已删除于:%@";
/* rcv direct event chat item */
"deleted contact" = "已删除联系人";
/* rcv group event chat item */
"deleted group" = "已删除群组";
@@ -1188,12 +1068,6 @@
/* No comment provided by engineer. */
"Description" = "描述";
/* No comment provided by engineer. */
"Desktop address" = "桌面地址";
/* No comment provided by engineer. */
"Desktop devices" = "桌面设备";
/* No comment provided by engineer. */
"Develop" = "开发";
@@ -1257,21 +1131,12 @@
/* server test step */
"Disconnect" = "断开连接";
/* No comment provided by engineer. */
"Disconnect desktop?" = "断开桌面连接?";
/* No comment provided by engineer. */
"Discover and join groups" = "发现和加入群组";
/* No comment provided by engineer. */
"Discover via local network" = "通过本地网络发现";
/* No comment provided by engineer. */
"Do it later" = "稍后再做";
/* No comment provided by engineer. */
"Do not send history to new members." = "不给新成员发送历史消息。";
/* No comment provided by engineer. */
"Do NOT use SimpleX for emergency calls." = "请勿使用 SimpleX 进行紧急通话。";
@@ -1317,9 +1182,6 @@
/* No comment provided by engineer. */
"Enable automatic message deletion?" = "启用自动删除消息?";
/* No comment provided by engineer. */
"Enable camera access" = "启用相机访问";
/* No comment provided by engineer. */
"Enable for all" = "全部启用";
@@ -1407,12 +1269,6 @@
/* chat item text */
"encryption re-negotiation allowed for %@" = "允许对 %@ 进行加密重新协商";
/* message decrypt error item */
"Encryption re-negotiation error" = "加密重协商错误";
/* No comment provided by engineer. */
"Encryption re-negotiation failed." = "加密重协商失败了。";
/* chat item text */
"encryption re-negotiation required" = "需要重新进行加密协商";
@@ -1440,9 +1296,6 @@
/* No comment provided by engineer. */
"Enter server manually" = "手动输入服务器";
/* No comment provided by engineer. */
"Enter this device name…" = "输入此设备名…";
/* placeholder */
"Enter welcome message…" = "输入欢迎消息……";
@@ -1488,9 +1341,6 @@
/* No comment provided by engineer. */
"Error creating member contact" = "创建成员联系人时出错";
/* No comment provided by engineer. */
"Error creating message" = "创建消息出错";
/* No comment provided by engineer. */
"Error creating profile!" = "创建资料错误!";
@@ -1623,9 +1473,6 @@
/* No comment provided by engineer. */
"Exit without saving" = "退出而不保存";
/* chat item action */
"Expand" = "展开";
/* No comment provided by engineer. */
"Export database" = "导出数据库";
@@ -1644,9 +1491,6 @@
/* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "快速且无需等待发件人在线!";
/* No comment provided by engineer. */
"Faster joining and more reliable messages." = "加入速度更快、信息更可靠。";
/* No comment provided by engineer. */
"Favorite" = "最喜欢";
@@ -1704,9 +1548,6 @@
/* No comment provided by engineer. */
"For console" = "用于控制台";
/* No comment provided by engineer. */
"Found desktop" = "找到了桌面";
/* No comment provided by engineer. */
"French interface" = "法语界面";
@@ -1719,9 +1560,6 @@
/* No comment provided by engineer. */
"Full name:" = "全名:";
/* No comment provided by engineer. */
"Fully decentralized visible only to members." = "完全去中心化 - 仅对成员可见。";
/* No comment provided by engineer. */
"Fully re-implemented - work in background!" = "完全重新实现 - 在后台工作!";
@@ -1734,9 +1572,6 @@
/* No comment provided by engineer. */
"Group" = "群组";
/* No comment provided by engineer. */
"Group already exists!" = "群已存在!";
/* No comment provided by engineer. */
"group deleted" = "群组已删除";
@@ -1836,9 +1671,6 @@
/* No comment provided by engineer. */
"History" = "历史记录";
/* No comment provided by engineer. */
"History is not sent to new members." = "未发送历史消息给新成员。";
/* time unit */
"hours" = "小时";
@@ -1896,9 +1728,6 @@
/* No comment provided by engineer. */
"Import database" = "导入数据库";
/* No comment provided by engineer. */
"Improved message delivery" = "改进了消息传递";
/* No comment provided by engineer. */
"Improved privacy and security" = "改进的隐私和安全";
@@ -1911,9 +1740,6 @@
/* No comment provided by engineer. */
"Incognito" = "隐身聊天";
/* No comment provided by engineer. */
"Incognito groups" = "匿名群组";
/* No comment provided by engineer. */
"Incognito mode" = "隐身模式";
@@ -1941,9 +1767,6 @@
/* No comment provided by engineer. */
"Incompatible database version" = "数据库版本不兼容";
/* No comment provided by engineer. */
"Incompatible version" = "不兼容的版本";
/* PIN entry */
"Incorrect passcode" = "密码错误";
@@ -1983,15 +1806,6 @@
/* invalid chat item */
"invalid data" = "无效数据";
/* No comment provided by engineer. */
"Invalid display name!" = "无效的显示名!";
/* No comment provided by engineer. */
"Invalid name!" = "无效名称!";
/* No comment provided by engineer. */
"Invalid QR code" = "无效的二维码";
/* No comment provided by engineer. */
"Invalid server address!" = "无效的服务器地址!";
@@ -2070,24 +1884,12 @@
/* No comment provided by engineer. */
"Join group" = "加入群组";
/* No comment provided by engineer. */
"Join group conversations" = "加入群对话";
/* No comment provided by engineer. */
"Join group?" = "加入群组?";
/* No comment provided by engineer. */
"Join incognito" = "加入隐身聊天";
/* No comment provided by engineer. */
"Joining group" = "加入群组中";
/* No comment provided by engineer. */
"Keep" = "保留";
/* No comment provided by engineer. */
"Keep unused invitation?" = "保留未使用的邀请吗?";
/* No comment provided by engineer. */
"Keep your connections" = "保持连接";
@@ -2124,15 +1926,6 @@
/* No comment provided by engineer. */
"Limitations" = "限制";
/* No comment provided by engineer. */
"Link mobile and desktop apps! 🔗" = "连接移动端和桌面端应用程序!🔗";
/* No comment provided by engineer. */
"Linked desktop options" = "已链接桌面选项";
/* No comment provided by engineer. */
"Linked desktops" = "已链接桌面";
/* No comment provided by engineer. */
"LIVE" = "实时";
@@ -2274,7 +2067,7 @@
/* copied message info */
"Moderated at: %@" = "已被管理员移除于:%@";
/* marked deleted chat item preview text */
/* No comment provided by engineer. */
"moderated by %@" = "由 %@ 审核";
/* time unit */
@@ -2313,9 +2106,6 @@
/* No comment provided by engineer. */
"never" = "从不";
/* No comment provided by engineer. */
"New chat" = "新聊天";
/* notification */
"New contact request" = "新联系人请求";
@@ -2391,9 +2181,6 @@
/* copied message info in history */
"no text" = "无文本";
/* No comment provided by engineer. */
"Not compatible!" = "不兼容!";
/* No comment provided by engineer. */
"Notifications" = "通知";
@@ -2423,9 +2210,6 @@
/* No comment provided by engineer. */
"Ok" = "好的";
/* No comment provided by engineer. */
"OK" = "好的";
/* No comment provided by engineer. */
"Old database" = "旧的数据库";
@@ -2498,9 +2282,6 @@
/* authentication reason */
"Open chat console" = "打开聊天控制台";
/* No comment provided by engineer. */
"Open group" = "打开群";
/* No comment provided by engineer. */
"Open Settings" = "打开设置";
@@ -2510,12 +2291,6 @@
/* No comment provided by engineer. */
"Open-source protocol and code anybody can run the servers." = "开源协议和代码——任何人都可以运行服务器。";
/* No comment provided by engineer. */
"Or scan QR code" = "或者扫描二维码";
/* No comment provided by engineer. */
"Or show this code" = "或者显示此码";
/* member role */
"owner" = "群主";
@@ -2537,18 +2312,9 @@
/* No comment provided by engineer. */
"Password to show" = "显示密码";
/* No comment provided by engineer. */
"Paste desktop address" = "粘贴桌面地址";
/* No comment provided by engineer. */
"Paste image" = "粘贴图片";
/* No comment provided by engineer. */
"Paste link to connect!" = "粘贴链接以连接!";
/* No comment provided by engineer. */
"Paste the link you received" = "粘贴您收到的链接";
/* No comment provided by engineer. */
"peer-to-peer" = "点对点";
@@ -2630,18 +2396,12 @@
/* No comment provided by engineer. */
"Private filenames" = "私密文件名";
/* name of notes to self */
"Private notes" = "私密笔记";
/* No comment provided by engineer. */
"Profile and server connections" = "资料和服务器连接";
/* No comment provided by engineer. */
"Profile image" = "资料图片";
/* No comment provided by engineer. */
"Profile name:" = "显示名:";
/* No comment provided by engineer. */
"Profile password" = "个人资料密码";
@@ -2702,9 +2462,6 @@
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "在 [用户指南](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address) 中阅读更多内容。";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "阅读更多[User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)。";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "在 [用户指南](https://simplex.chat/docs/guide/readme.html#connect-to-friends) 中阅读更多内容。";
@@ -2798,12 +2555,6 @@
/* rcv group event chat item */
"removed %@" = "已删除 %@";
/* profile update event chat item */
"removed contact address" = "删除了联系地址";
/* profile update event chat item */
"removed profile picture" = "删除了资料图片";
/* rcv group event chat item */
"removed you" = "已将您移除";
@@ -2816,12 +2567,6 @@
/* No comment provided by engineer. */
"Renegotiate encryption?" = "重新协商加密?";
/* No comment provided by engineer. */
"Repeat connection request?" = "重复连接请求吗?";
/* No comment provided by engineer. */
"Repeat join request?" = "重复加入请求吗?";
/* chat item action */
"Reply" = "回复";
@@ -2855,9 +2600,6 @@
/* No comment provided by engineer. */
"Restore database error" = "恢复数据库错误";
/* No comment provided by engineer. */
"Retry" = "重试";
/* chat item action */
"Reveal" = "揭示";
@@ -2927,9 +2669,6 @@
/* No comment provided by engineer. */
"Save welcome message?" = "保存欢迎信息?";
/* message info title */
"Saved message" = "已保存的消息";
/* No comment provided by engineer. */
"Saved WebRTC ICE servers will be removed" = "已保存的WebRTC ICE服务器将被删除";
@@ -2939,9 +2678,6 @@
/* No comment provided by engineer. */
"Scan QR code" = "扫描二维码";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "从桌面扫描二维码";
/* No comment provided by engineer. */
"Scan security code from your contact's app." = "从您联系人的应用程序中扫描安全码。";
@@ -2951,12 +2687,6 @@
/* No comment provided by engineer. */
"Search" = "搜索";
/* No comment provided by engineer. */
"Search bar accepts invitation links." = "搜索栏接受邀请链接。";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "搜索或粘贴 SimpleX 链接";
/* network option */
"sec" = "秒";
@@ -3035,9 +2765,6 @@
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "发送它们来自图库或自定义键盘。";
/* No comment provided by engineer. */
"Send up to 100 last messages to new members." = "给新成员发送最多 100 条历史消息。";
/* No comment provided by engineer. */
"Sender cancelled file transfer." = "发送人已取消文件传输。";
@@ -3095,9 +2822,6 @@
/* No comment provided by engineer. */
"Servers" = "服务器";
/* No comment provided by engineer. */
"Session code" = "会话码";
/* No comment provided by engineer. */
"Set 1 day" = "设定1天";
@@ -3110,12 +2834,6 @@
/* No comment provided by engineer. */
"Set it instead of system authentication." = "设置它以代替系统身份验证。";
/* profile update event chat item */
"set new contact address" = "设置新的联系地址";
/* profile update event chat item */
"set new profile picture" = "设置新的资料图片";
/* No comment provided by engineer. */
"Set passcode" = "设置密码";
@@ -3146,9 +2864,6 @@
/* No comment provided by engineer. */
"Share link" = "分享链接";
/* No comment provided by engineer. */
"Share this 1-time invite link" = "分享此一次性邀请链接";
/* No comment provided by engineer. */
"Share with contacts" = "与联系人分享";
@@ -3227,9 +2942,6 @@
/* No comment provided by engineer. */
"Start chat" = "开始聊天";
/* No comment provided by engineer. */
"Start chat?" = "启动聊天吗?";
/* No comment provided by engineer. */
"Start migration" = "开始迁移";
@@ -3290,21 +3002,12 @@
/* No comment provided by engineer. */
"Tap to activate profile." = "点击以激活个人资料。";
/* No comment provided by engineer. */
"Tap to Connect" = "轻按连接";
/* No comment provided by engineer. */
"Tap to join" = "点击加入";
/* No comment provided by engineer. */
"Tap to join incognito" = "点击以加入隐身聊天";
/* No comment provided by engineer. */
"Tap to paste link" = "轻按粘贴链接";
/* No comment provided by engineer. */
"Tap to scan" = "轻按扫描";
/* No comment provided by engineer. */
"Tap to start a new chat" = "点击开始一个新聊天";
@@ -3350,9 +3053,6 @@
/* No comment provided by engineer. */
"The attempt to change database passphrase was not completed." = "更改数据库密码的尝试未完成。";
/* No comment provided by engineer. */
"The code you scanned is not a SimpleX link QR code." = "您扫描的码不是 SimpleX 链接的二维码。";
/* No comment provided by engineer. */
"The connection you accepted will be cancelled!" = "您接受的连接将被取消!";
@@ -3395,9 +3095,6 @@
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "您当前聊天资料 **%@** 的新连接服务器。";
/* No comment provided by engineer. */
"The text you pasted is not a SimpleX link." = "您粘贴的文本不是 SimpleX 链接。";
/* No comment provided by engineer. */
"Theme" = "主题";
@@ -3419,24 +3116,12 @@
/* notification title */
"this contact" = "这个联系人";
/* No comment provided by engineer. */
"This device name" = "此设备名称";
/* No comment provided by engineer. */
"This display name is invalid. Please choose another name." = "显示名无效。请另选一个名称。";
/* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "该组有超过 %lld 个成员,不发送送货单。";
/* No comment provided by engineer. */
"This group no longer exists." = "该群组已不存在。";
/* No comment provided by engineer. */
"This is your own one-time link!" = "这是你自己的一次性链接!";
/* No comment provided by engineer. */
"This is your own SimpleX address!" = "这是你自己的 SimpleX 地址!";
/* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "此设置适用于您当前聊天资料 **%@** 中的消息。";
@@ -3446,9 +3131,6 @@
/* No comment provided by engineer. */
"To connect, your contact can scan QR code or use the link in the app." = "您的联系人可以扫描二维码或使用应用程序中的链接来建立连接。";
/* No comment provided by engineer. */
"To hide unwanted messages." = "隐藏不需要的信息。";
/* No comment provided by engineer. */
"To make a new connection" = "建立新连接";
@@ -3494,21 +3176,6 @@
/* No comment provided by engineer. */
"Unable to record voice message" = "无法录制语音消息";
/* No comment provided by engineer. */
"Unblock" = "解封";
/* No comment provided by engineer. */
"Unblock for all" = "为所有人解封";
/* No comment provided by engineer. */
"Unblock member" = "解封成员";
/* No comment provided by engineer. */
"Unblock member for all?" = "为所有其他成员解封该成员?";
/* No comment provided by engineer. */
"Unblock member?" = "解封成员吗?";
/* item status description */
"Unexpected error: %@" = "意外错误: @";
@@ -3542,21 +3209,12 @@
/* No comment provided by engineer. */
"Unknown error" = "未知错误";
/* No comment provided by engineer. */
"unknown status" = "未知状态";
/* No comment provided by engineer. */
"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "除非您使用 iOS 通话界面,否则请启用请勿打扰模式以避免打扰。";
/* No comment provided by engineer. */
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。\n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。";
/* No comment provided by engineer. */
"Unlink" = "取消链接";
/* No comment provided by engineer. */
"Unlink desktop?" = "取消链接桌面端?";
/* No comment provided by engineer. */
"Unlock" = "解锁";
@@ -3569,9 +3227,6 @@
/* No comment provided by engineer. */
"Unread" = "未读";
/* No comment provided by engineer. */
"Up to 100 last messages are sent to new members." = "给新成员发送了最多 100 条历史消息。";
/* No comment provided by engineer. */
"Update" = "更新";
@@ -3590,9 +3245,6 @@
/* rcv group event chat item */
"updated group profile" = "已更新的群组资料";
/* profile update event chat item */
"updated profile" = "更新了资料";
/* No comment provided by engineer. */
"Updating settings will re-connect the client to all servers." = "更新设置会将客户端重新连接到所有服务器。";
@@ -3617,9 +3269,6 @@
/* No comment provided by engineer. */
"Use for new connections" = "用于新连接";
/* No comment provided by engineer. */
"Use from desktop" = "从桌面端使用";
/* No comment provided by engineer. */
"Use iOS call interface" = "使用 iOS 通话界面";
@@ -3644,18 +3293,9 @@
/* No comment provided by engineer. */
"v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "用桌面端验证代码";
/* No comment provided by engineer. */
"Verify connection" = "验证连接";
/* No comment provided by engineer. */
"Verify connection security" = "验证连接安全";
/* No comment provided by engineer. */
"Verify connections" = "验证连接";
/* No comment provided by engineer. */
"Verify security code" = "验证安全码";
@@ -3674,9 +3314,6 @@
/* No comment provided by engineer. */
"via relay" = "通过中继";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "通过安全的、抗量子计算机破解的协议。";
/* No comment provided by engineer. */
"Video call" = "视频通话";
@@ -3695,9 +3332,6 @@
/* No comment provided by engineer. */
"View security code" = "查看安全码";
/* chat feature */
"Visible history" = "可见的历史";
/* No comment provided by engineer. */
"Voice message…" = "语音消息……";
@@ -3758,15 +3392,9 @@
/* No comment provided by engineer. */
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。";
/* No comment provided by engineer. */
"With encrypted files and media." = "加密的文件和媒体。";
/* No comment provided by engineer. */
"With optional welcome message." = "带有可选的欢迎消息。";
/* No comment provided by engineer. */
"With reduced battery usage." = "降低了电量使用。";
/* No comment provided by engineer. */
"Wrong database passphrase" = "数据库密码错误";
@@ -3794,12 +3422,6 @@
/* No comment provided by engineer. */
"You are already connected to %@." = "您已经连接到 %@。";
/* No comment provided by engineer. */
"You are already connecting via this one-time link!" = "你已经在通过这个一次性链接进行连接!";
/* No comment provided by engineer. */
"You are already joining the group via this link." = "你已经在通过此链接加入该群。";
/* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "您已连接到用于接收该联系人消息的服务器。";
@@ -3827,9 +3449,6 @@
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "您可以隐藏或静音用户个人资料——只需向右滑动。";
/* No comment provided by engineer. */
"You can make it visible to your SimpleX contacts via Settings." = "你可以通过设置让它对你的 SimpleX 联系人可见。";
/* notification body */
"You can now send messages to %@" = "您现在可以给 %@ 发送消息";
@@ -3854,9 +3473,6 @@
/* No comment provided by engineer. */
"You can use markdown to format messages:" = "您可以使用 markdown 来编排消息格式:";
/* No comment provided by engineer. */
"You can view invitation link again in connection details." = "您可以在连接详情中再次查看邀请链接。";
/* No comment provided by engineer. */
"You can't send messages!" = "您无法发送消息!";
@@ -3878,9 +3494,6 @@
/* No comment provided by engineer. */
"You could not be verified; please try again." = "您的身份无法验证,请再试一次。";
/* No comment provided by engineer. */
"You have already requested connection via this address!" = "你已经请求通过此地址进行连接!";
/* No comment provided by engineer. */
"You have no chats" = "您没有聊天记录";
@@ -3932,9 +3545,6 @@
/* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。";
/* No comment provided by engineer. */
"You will connect to all group members." = "你将连接到所有群成员。";
/* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。";
@@ -103,14 +103,11 @@
</intent-filter>
</activity-alias>
<activity android:name=".views.call.CallActivity"
<activity android:name=".views.call.IncomingCallActivity"
android:showOnLockScreen="true"
android:exported="false"
android:launchMode="singleInstance"
android:supportsPictureInPicture="true"
android:autoRemoveFromRecents="true"
android:screenOrientation="portrait"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
android:launchMode="singleTask"/>
<provider
android:name="androidx.core.content.FileProvider"
@@ -136,18 +133,6 @@
android:stopWithTask="false"></service>
<!-- SimplexService restart on reboot -->
<service
android:name=".CallService"
android:enabled="true"
android:exported="false"
android:stopWithTask="false"/>
<receiver
android:name=".CallService$CallActionReceiver"
android:enabled="true"
android:exported="false" />
<receiver
android:name=".SimplexService$StartReceiver"
android:enabled="true"
@@ -1,176 +0,0 @@
package chat.simplex.app
import android.app.*
import android.content.*
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.*
import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import chat.simplex.app.model.NtfManager.EndCallAction
import chat.simplex.app.views.call.CallActivity
import chat.simplex.common.model.NotificationPreviewMode
import chat.simplex.common.platform.*
import chat.simplex.common.views.call.CallState
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import kotlinx.datetime.Instant
class CallService: Service() {
private var wakeLock: PowerManager.WakeLock? = null
private var notificationManager: NotificationManager? = null
private var serviceNotification: Notification? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d(TAG, "onStartCommand startId: $startId")
if (intent != null) {
val action = intent.action
Log.d(TAG, "intent action $action")
when (action) {
Action.START.name -> startService()
else -> Log.e(TAG, "No action in the intent")
}
} else {
Log.d(TAG, "null intent. Probably restarted by the system.")
}
startForeground(CALL_SERVICE_ID, serviceNotification)
return START_STICKY
}
override fun onCreate() {
super.onCreate()
Log.d(TAG, "Call service created")
notificationManager = createNotificationChannel()
updateNotification()
startForeground(CALL_SERVICE_ID, serviceNotification)
}
override fun onDestroy() {
Log.d(TAG, "Call service destroyed")
try {
wakeLock?.let {
while (it.isHeld) it.release() // release all, in case acquired more than once
}
wakeLock = null
} catch (e: Exception) {
Log.d(TAG, "Exception while releasing wakelock: ${e.message}")
}
super.onDestroy()
}
private fun startService() {
Log.d(TAG, "CallService startService")
if (wakeLock != null) return
wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run {
newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG).apply {
acquire()
}
}
}
fun updateNotification() {
val call = chatModel.activeCall.value
val previewMode = appPreferences.notificationPreviewMode.get()
val title = if (previewMode == NotificationPreviewMode.HIDDEN.name)
generalGetString(MR.strings.notification_preview_somebody)
else
call?.contact?.profile?.displayName ?: ""
val text = generalGetString(if (call?.supportsVideo() == true) MR.strings.call_service_notification_video_call else MR.strings.call_service_notification_audio_call)
val image = call?.contact?.image
val largeIcon = if (image == null || previewMode == NotificationPreviewMode.HIDDEN.name)
BitmapFactory.decodeResource(resources, R.drawable.icon)
else
base64ToBitmap(image).asAndroidBitmap()
serviceNotification = createNotification(title, text, largeIcon, call?.connectedAt)
startForeground(CALL_SERVICE_ID, serviceNotification)
}
private fun createNotificationChannel(): NotificationManager? {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = NotificationChannel(CALL_NOTIFICATION_CHANNEL_ID, CALL_NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT)
notificationManager.createNotificationChannel(channel)
return notificationManager
}
return null
}
private fun createNotification(title: String, text: String, icon: Bitmap, connectedAt: Instant? = null): Notification {
val pendingIntent: PendingIntent = Intent(this, CallActivity::class.java).let { notificationIntent ->
PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE)
}
val endCallPendingIntent: PendingIntent = Intent(this, CallActionReceiver::class.java).let { notificationIntent ->
notificationIntent.setAction(EndCallAction)
PendingIntent.getBroadcast(this, 1, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}
val builder = NotificationCompat.Builder(this, CALL_NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.ntf_icon)
.setLargeIcon(icon.clipToCircle())
.setColor(0x88FFFF)
.setContentTitle(title)
.setContentText(text)
.setContentIntent(pendingIntent)
.setSilent(true)
.addAction(R.drawable.ntf_icon, generalGetString(MR.strings.call_service_notification_end_call), endCallPendingIntent)
if (connectedAt != null) {
builder.setUsesChronometer(true)
builder.setWhen(connectedAt.epochSeconds * 1000)
}
return builder.build()
}
override fun onBind(intent: Intent): IBinder {
return CallServiceBinder()
}
inner class CallServiceBinder : Binder() {
fun getService() = this@CallService
}
enum class Action {
START,
}
class CallActionReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
EndCallAction -> {
val call = chatModel.activeCall.value
if (call != null) {
withBGApi {
chatModel.callManager.endCall(call)
}
}
}
else -> {
Log.e(TAG, "Unknown action. Make sure you provided an action")
}
}
}
}
companion object {
const val TAG = "CALL_SERVICE"
const val CALL_NOTIFICATION_CHANNEL_ID = "chat.simplex.app.CALL_SERVICE_NOTIFICATION"
const val CALL_NOTIFICATION_CHANNEL_NAME = "SimpleX Chat call service"
const val CALL_SERVICE_ID = 6788
const val WAKE_LOCK_TAG = "CallService::lock"
fun startService(): Intent {
Log.d(TAG, "CallService start")
return Intent(androidAppContext, CallService::class.java).also {
it.action = Action.START.name
ContextCompat.startForegroundService(androidAppContext, it)
}
}
fun stopService() {
androidAppContext.stopService(Intent(androidAppContext, CallService::class.java))
}
}
}

Some files were not shown because too many files have changed in this diff Show More