diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f28648d036..2b9cc7f770 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -65,6 +65,11 @@ jobs:
asset_name: simplex-chat-ubuntu-22_04-x86-64
desktop_asset_name: simplex-desktop-ubuntu-22_04-x86_64.deb
- os: macos-latest
+ ghc: "9.6.3"
+ cache_path: ~/.cabal/store
+ asset_name: simplex-chat-macos-aarch64
+ desktop_asset_name: simplex-desktop-macos-aarch64.dmg
+ - os: macos-13
ghc: "9.6.3"
cache_path: ~/.cabal/store
asset_name: simplex-chat-macos-x86-64
@@ -107,18 +112,36 @@ jobs:
if: matrix.os == 'macos-latest'
shell: bash
run: |
- echo "ignore-project: False" >> cabal.project.local
- echo "package direct-sqlcipher" >> cabal.project.local
- echo " extra-include-dirs: /usr/local/opt/openssl@1.1/include" >> cabal.project.local
- echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local
- echo " flags: +openssl" >> cabal.project.local
+ echo "ignore-project: False" >> cabal.project.local
+ echo "package simplexmq" >> cabal.project.local
+ echo " extra-include-dirs: /opt/homebrew/opt/openssl@1.1/include" >> cabal.project.local
+ echo " extra-lib-dirs: /opt/homebrew/opt/openssl@1.1/lib" >> cabal.project.local
+ echo "" >> cabal.project.local
+ echo "package direct-sqlcipher" >> cabal.project.local
+ echo " extra-include-dirs: /opt/homebrew/opt/openssl@1.1/include" >> cabal.project.local
+ echo " extra-lib-dirs: /opt/homebrew/opt/openssl@1.1/lib" >> cabal.project.local
+ echo " flags: +openssl" >> cabal.project.local
+
+ - name: Unix prepare cabal.project.local for Mac
+ if: matrix.os == 'macos-13'
+ shell: bash
+ run: |
+ echo "ignore-project: False" >> cabal.project.local
+ echo "package simplexmq" >> cabal.project.local
+ echo " extra-include-dirs: /usr/local/opt/openssl@1.1/include" >> cabal.project.local
+ echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local
+ echo "" >> cabal.project.local
+ echo "package direct-sqlcipher" >> cabal.project.local
+ echo " extra-include-dirs: /usr/local/opt/openssl@1.1/include" >> cabal.project.local
+ echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local
+ echo " flags: +openssl" >> cabal.project.local
- name: Install AppImage dependencies
if: startsWith(github.ref, 'refs/tags/v') && matrix.asset_name && matrix.os == 'ubuntu-20.04'
run: sudo apt install -y desktop-file-utils
- name: Install pkg-config for Mac
- if: matrix.os == 'macos-latest'
+ if: matrix.os == 'macos-latest' || matrix.os == 'macos-13'
run: brew install pkg-config
- name: Unix prepare cabal.project.local for Ubuntu
@@ -190,7 +213,7 @@ jobs:
- name: Mac build desktop
id: mac_desktop_build
- if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest'
+ if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'macos-latest' || matrix.os == 'macos-13')
shell: bash
env:
APPLE_SIMPLEX_SIGNING_KEYCHAIN: ${{ secrets.APPLE_SIMPLEX_SIGNING_KEYCHAIN }}
@@ -241,7 +264,7 @@ jobs:
${{ steps.linux_appimage_build.outputs.appimage_hash }}
- name: Mac upload desktop package to release
- if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest'
+ if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'macos-latest' || matrix.os == 'macos-13')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
@@ -250,7 +273,7 @@ jobs:
tag: ${{ github.ref }}
- name: Mac update desktop package hash
- if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'macos-latest'
+ if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'macos-latest' || matrix.os == 'macos-13')
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml
index 72a7cf2b94..b396c9a289 100644
--- a/.github/workflows/cla.yml
+++ b/.github/workflows/cla.yml
@@ -5,14 +5,20 @@ on:
pull_request_target:
types: [opened, closed, synchronize]
+permissions:
+ actions: write
+ contents: write
+ pull-requests: write
+ statuses: write
+
jobs:
CLAssistant:
runs-on: ubuntu-latest
steps:
- name: "CLA Assistant"
- if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request'
+ if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
# Beta Release
- uses: cla-assistant/github-action@v2.1.3-beta
+ uses: cla-assistant/github-action@v2.3.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# the below token should have repo scope and must be manually added by you in the repository's secret
@@ -33,4 +39,4 @@ jobs:
#custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
#custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.'
#lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
- #use-dco-flag: true - If you are using DCO instead of CLA
\ No newline at end of file
+ #use-dco-flag: true - If you are using DCO instead of CLA
diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml
index 039c136464..7fc66308f8 100644
--- a/.github/workflows/web.yml
+++ b/.github/workflows/web.yml
@@ -4,7 +4,6 @@ on:
push:
branches:
- master
- - stable
paths:
- website/**
- images/**
diff --git a/.gitignore b/.gitignore
index d7106ec8fa..e3ea5d267b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,6 +54,7 @@ website/translations.json
website/src/img/images/
website/src/images/
website/src/js/lottie.min.js
+website/src/privacy.md
# Generated files
website/package/generated*
diff --git a/PRIVACY.md b/PRIVACY.md
index 3204fa1e53..3b4ba2ba8a 100644
--- a/PRIVACY.md
+++ b/PRIVACY.md
@@ -1,16 +1,20 @@
+---
+layout: layouts/privacy.html
+---
+
# SimpleX Chat Privacy Policy and Conditions of Use
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 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)).
+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).
## 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 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 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.
@@ -20,7 +24,7 @@ While SimpleX Chat Ltd is not a communication service provider, and provide publ
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).
+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
@@ -34,7 +38,7 @@ You can transfer the profile to another device by creating a backup of the app d
#### 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 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.
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.
@@ -82,7 +86,7 @@ Additional technical information can be stored on our servers, including randoml
#### SimpleX Directory
-[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](/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).
#### User Support
@@ -103,6 +107,8 @@ The cases when SimpleX Chat Ltd may share the data temporarily stored on the ser
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.
+We will publish information we are legally allowed to share about such requests in the [Transparency reports](./docs/TRANSPARENCY.md).
+
### 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.
@@ -131,7 +137,7 @@ You accept the Conditions of Use of Software and Infrastructure ("Conditions") b
**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.
-**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.
+**Legal usage**. You agree to use our Applications only for legal 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 communications, e.g. spam. While we cannot access content or identify messages or groups, in some cases the links to the illegal 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.
**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.
@@ -165,4 +171,4 @@ You accept the Conditions of Use of Software and Infrastructure ("Conditions") b
**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 April 24, 2024
diff --git a/README.md b/README.md
index 28b40d0c1b..697f5ca08e 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[](https://www.reddit.com/r/SimpleXChat)

-| 30/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md) |
+| 30/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md), [PL](/docs/lang/pl/README.md) |
@@ -74,7 +74,7 @@ Messages not following these rules will be deleted, the right to send messages m
You can join an English-speaking users group if you want to ask any questions: [#SimpleX users group](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2Fos8FftfoV8zjb2T89fUEjJtF7y64p5av%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAQqMgh0fw2lPhjn3PDIEfAKA_E0-gf8Hr8zzhYnDivRs%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22lBPiveK2mjfUH43SN77R0w%3D%3D%22%7D)
-There is also a group [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F6eHqy7uAbZPOcA6qBtrQgQquVlt4Ll91%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAqV_pg3FF00L98aCXp4D3bOs4Sxv_UmSd-gb0juVoQVs%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22XonlixcHBIb2ijCehbZoiw%3D%3D%22%7D) for developers who build on SimpleX platform:
+There is also a group [#simplex-devs](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FvYCRjIflKNMGYlfTkuHe4B40qSlQ0439%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAHNdcqNbzXZhyMoSBjT2R0-Eb1EPaLyUg3KZjn-kmM1w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22PD20tcXjw7IpkkMCfR6HLA%3D%3D%22%7D) for developers who build on SimpleX platform:
- chat bots and automations
- integrations with other apps
@@ -234,6 +234,8 @@ You can use SimpleX with your own servers and still communicate with people usin
Recent and important updates:
+[Apr 26, 2024. SimpleX network: legally binding transparency, v5.7 released with better calls and messages.](./blog/20240426-simplex-legally-binding-transparency-v5-7-better-user-experience.md)
+
[Mar 23, 2024. SimpleX network: real privacy and stable profits, non-profits for protocols, v5.6 released with quantum resistant e2e encryption and simple profile migration.](./blog/20240323-simplex-network-privacy-non-profit-v5-6-quantum-resistant-e2e-encryption-simple-migration.md)
[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)
@@ -412,13 +414,13 @@ We have never provided or have been requested access to our servers or any infor
We do not log IP addresses of the users and we do not perform any traffic correlation on our servers. If transport level security is critical you must use Tor or some other similar network to access messaging servers. We will be improving the client applications to reduce the opportunities for traffic correlation.
-Please read more in [Terms & privacy policy](./PRIVACY.md).
+Please read more in [Privacy Policy](./PRIVACY.md).
## Security contact
-To report a security vulnerability, please send us email to chat@simplex.chat. We will coordinate the fix and disclosure. Please do NOT report security vulnerabilities via GitHub issues.
+Please see our [Security Policy](./docs/SECURITY.md) on how to report security vulnerabilities to us. We will coordinate the fix and disclosure.
-Please treat any findings of possible traffic correlation attacks allowing to correlate two different conversations to the same user, other than covered in [the threat model](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md#threat-model), as security vulnerabilities, and follow this disclosure process.
+Please do NOT report security vulnerabilities via GitHub issues.
## License
diff --git a/apps/ios/Shared/Model/AudioRecPlay.swift b/apps/ios/Shared/Model/AudioRecPlay.swift
index a9d0d6c1d9..99851f4be8 100644
--- a/apps/ios/Shared/Model/AudioRecPlay.swift
+++ b/apps/ios/Shared/Model/AudioRecPlay.swift
@@ -179,7 +179,7 @@ class AudioPlayer: NSObject, AVAudioPlayerDelegate {
if playback {
if AVAudioSession.sharedInstance().category != .playback {
logger.log("AudioSession: playback")
- try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, options: .duckOthers)
+ try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, options: [.duckOthers, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
}
} else {
if AVAudioSession.sharedInstance().category != .soloAmbient {
diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift
index 462699e407..a4651e1d42 100644
--- a/apps/ios/Shared/Model/ChatModel.swift
+++ b/apps/ios/Shared/Model/ChatModel.swift
@@ -103,6 +103,7 @@ final class ChatModel: ObservableObject {
// tracks keyboard height via subscription in AppDelegate
@Published var keyboardHeight: CGFloat = 0
@Published var pasteboardHasStrings: Bool = UIPasteboard.general.hasStrings
+ @Published var networkInfo = UserNetworkInfo(networkType: .other, online: true)
var messageDelivery: Dictionary Void> = [:]
@@ -778,6 +779,24 @@ final class Chat: ObservableObject, Identifiable {
var viewId: String { get { "\(chatInfo.id) \(created.timeIntervalSince1970)" } }
+ func groupFeatureEnabled(_ feature: GroupFeature) -> Bool {
+ if case let .group(groupInfo) = self.chatInfo {
+ let p = groupInfo.fullGroupPreferences
+ return switch feature {
+ case .timedMessages: p.timedMessages.on
+ case .directMessages: p.directMessages.on(for: groupInfo.membership)
+ case .fullDelete: p.fullDelete.on
+ case .reactions: p.reactions.on
+ case .voice: p.voice.on(for: groupInfo.membership)
+ case .files: p.files.on(for: groupInfo.membership)
+ case .simplexLinks: p.simplexLinks.on(for: groupInfo.membership)
+ case .history: p.history.on
+ }
+ } else {
+ return true
+ }
+ }
+
public static var sampleData: Chat = Chat(chatInfo: ChatInfo.sampleData.direct, chatItems: [])
}
diff --git a/apps/ios/Shared/Model/NetworkObserver.swift b/apps/ios/Shared/Model/NetworkObserver.swift
new file mode 100644
index 0000000000..84c35afa07
--- /dev/null
+++ b/apps/ios/Shared/Model/NetworkObserver.swift
@@ -0,0 +1,73 @@
+//
+// NetworkObserver.swift
+// SimpleX (iOS)
+//
+// Created by Avently on 05.04.2024.
+// Copyright © 2024 SimpleX Chat. All rights reserved.
+//
+
+import Foundation
+import Network
+import SimpleXChat
+
+class NetworkObserver {
+ static let shared = NetworkObserver()
+ private let queue: DispatchQueue = DispatchQueue(label: "chat.simplex.app.NetworkObserver")
+ private var prevInfo: UserNetworkInfo? = nil
+ private var monitor: NWPathMonitor?
+ private let monitorLock: DispatchQueue = DispatchQueue(label: "chat.simplex.app.monitorLock")
+
+ func restartMonitor() {
+ monitorLock.sync {
+ monitor?.cancel()
+ let mon = NWPathMonitor()
+ mon.pathUpdateHandler = { [weak self] path in
+ self?.networkPathChanged(path: path)
+ }
+ mon.start(queue: queue)
+ monitor = mon
+ }
+ }
+
+ private func networkPathChanged(path: NWPath) {
+ let info = UserNetworkInfo(
+ networkType: networkTypeFromPath(path),
+ online: path.status == .satisfied
+ )
+ if (prevInfo != info) {
+ prevInfo = info
+ setNetworkInfo(info)
+ }
+ }
+
+ private func networkTypeFromPath(_ path: NWPath) -> UserNetworkType {
+ if path.usesInterfaceType(.wiredEthernet) {
+ .ethernet
+ } else if path.usesInterfaceType(.wifi) {
+ .wifi
+ } else if path.usesInterfaceType(.cellular) {
+ .cellular
+ } else if path.usesInterfaceType(.other) {
+ .other
+ } else {
+ .none
+ }
+ }
+
+ private static var networkObserver: NetworkObserver? = nil
+
+ private func setNetworkInfo(_ info: UserNetworkInfo) {
+ logger.debug("setNetworkInfo Network changed: \(String(describing: info))")
+ DispatchQueue.main.sync {
+ ChatModel.shared.networkInfo = info
+ }
+ if !hasChatCtrl() { return }
+ self.monitorLock.sync {
+ do {
+ try apiSetNetworkInfo(info)
+ } catch let err {
+ logger.error("setNetworkInfo error: \(responseError(err))")
+ }
+ }
+ }
+}
diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift
index a099069f77..b4c9a48d5d 100644
--- a/apps/ios/Shared/Model/SimpleXAPI.swift
+++ b/apps/ios/Shared/Model/SimpleXAPI.swift
@@ -272,18 +272,6 @@ func apiGetAppSettings(settings: AppSettings) throws -> AppSettings {
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))
}
@@ -353,11 +341,20 @@ func apiGetChatItemInfo(type: ChatType, id: Int64, itemId: Int64) async throws -
throw r
}
+func apiForwardChatItem(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemId: Int64) async -> ChatItem? {
+ let cmd: ChatCommand = .apiForwardChatItem(toChatType: toChatType, toChatId: toChatId, fromChatType: fromChatType, fromChatId: fromChatId, itemId: itemId)
+ return await processSendMessageCmd(toChatType: toChatType, cmd: cmd)
+}
+
func apiSendMessage(type: ChatType, id: Int64, file: CryptoFile?, quotedItemId: Int64?, msg: MsgContent, live: Bool = false, ttl: Int? = nil) async -> ChatItem? {
- let chatModel = ChatModel.shared
let cmd: ChatCommand = .apiSendMessage(type: type, id: id, file: file, quotedItemId: quotedItemId, msg: msg, live: live, ttl: ttl)
+ return await processSendMessageCmd(toChatType: type, cmd: cmd)
+}
+
+private func processSendMessageCmd(toChatType: ChatType, cmd: ChatCommand) async -> ChatItem? {
+ let chatModel = ChatModel.shared
let r: ChatResponse
- if type == .direct {
+ if toChatType == .direct {
var cItem: ChatItem? = nil
let endTask = beginBGTask({
if let cItem = cItem {
@@ -397,7 +394,7 @@ func apiCreateChatItem(noteFolderId: Int64, file: CryptoFile?, msg: MsgContent)
}
private func sendMessageErrorAlert(_ r: ChatResponse) {
- logger.error("apiSendMessage error: \(String(describing: r))")
+ logger.error("send message error: \(String(describing: r))")
AlertManager.shared.showAlertMsg(
title: "Error sending message",
message: "Error: \(String(describing: r))"
@@ -534,6 +531,12 @@ func setNetworkConfig(_ cfg: NetCfg, ctrl: chat_ctrl? = nil) throws {
throw r
}
+func apiSetNetworkInfo(_ networkInfo: UserNetworkInfo) throws {
+ let r = chatSendCmdSync(.apiSetNetworkInfo(networkInfo: networkInfo))
+ if case .cmdOk = r { return }
+ throw r
+}
+
func reconnectAllServers() async throws {
try await sendCommandOkResp(.reconnectAllServers)
}
@@ -1297,6 +1300,7 @@ func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = ni
defer { m.ctrlInitInProgress = false }
(m.chatDbEncrypted, m.chatDbStatus) = chatMigrateInit(dbKey, confirmMigrations: confirmMigrations)
if m.chatDbStatus != .ok { return }
+ NetworkObserver.shared.restartMonitor()
// If we migrated successfully means previous re-encryption process on database level finished successfully too
if encryptionStartedDefault.get() {
encryptionStartedDefault.set(false)
@@ -1304,7 +1308,6 @@ func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = ni
try apiSetTempFolder(tempFolder: getTempFilesDirectory().path)
try apiSetFilesFolder(filesFolder: getAppFilesDirectory().path)
try apiSetEncryptLocalFiles(privacyEncryptLocalFilesGroupDefault.get())
- try apiSetPQEncryption(pqExperimentalEnabledDefault.get())
m.chatInitialized = true
m.currentUser = try apiGetActiveUser()
if m.currentUser == nil {
@@ -1462,6 +1465,8 @@ class ChatReceiver {
private var receiveMessages = true
private var _lastMsgTime = Date.now
+ var messagesChannel: ((ChatResponse) -> Void)? = nil
+
static let shared = ChatReceiver()
var lastMsgTime: Date { get { _lastMsgTime } }
@@ -1479,6 +1484,9 @@ class ChatReceiver {
if let msg = await chatRecvMsg() {
self._lastMsgTime = .now
await processReceivedMsg(msg)
+ if let messagesChannel {
+ messagesChannel(msg)
+ }
}
_ = try? await Task.sleep(nanoseconds: 7_500_000)
}
@@ -1791,7 +1799,6 @@ func processReceivedMsg(_ res: ChatResponse) async {
}
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)
diff --git a/apps/ios/Shared/Views/Call/ActiveCallView.swift b/apps/ios/Shared/Views/Call/ActiveCallView.swift
index 9f246f63f3..97415018bf 100644
--- a/apps/ios/Shared/Views/Call/ActiveCallView.swift
+++ b/apps/ios/Shared/Views/Call/ActiveCallView.swift
@@ -9,6 +9,7 @@
import SwiftUI
import WebKit
import SimpleXChat
+import AVFoundation
struct ActiveCallView: View {
@EnvironmentObject var m: ChatModel
@@ -21,6 +22,7 @@ struct ActiveCallView: View {
@Binding var canConnectCall: Bool
@State var prevColorScheme: ColorScheme = .dark
@State var pipShown = false
+ @State var wasConnected = false
var body: some View {
ZStack(alignment: .topLeading) {
@@ -69,6 +71,11 @@ struct ActiveCallView: View {
Task { await m.callCommand.setClient(nil) }
AppDelegate.keepScreenOn(false)
client?.endCall()
+ CallSoundsPlayer.shared.stop()
+ try? AVAudioSession.sharedInstance().setCategory(.soloAmbient)
+ if (wasConnected) {
+ CallSoundsPlayer.shared.vibrate(long: true)
+ }
}
.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
@@ -103,6 +110,11 @@ struct ActiveCallView: View {
call.callState = .invitationSent
call.localCapabilities = capabilities
}
+ if call.supportsVideo && !AVAudioSession.sharedInstance().hasExternalAudioDevice() {
+ try? AVAudioSession.sharedInstance().setCategory(.playback, options: [.allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
+ }
+ CallSoundsPlayer.shared.startConnectingCallSound()
+ activeCallWaitDeliveryReceipt()
}
case let .offer(offer, iceCandidates, capabilities):
Task {
@@ -126,6 +138,7 @@ struct ActiveCallView: View {
}
await MainActor.run {
call.callState = .negotiated
+ CallSoundsPlayer.shared.stop()
}
}
case let .ice(iceCandidates):
@@ -144,6 +157,10 @@ struct ActiveCallView: View {
: CallController.shared.reportIncomingCall(call: call, connectedAt: nil)
call.callState = .connected
call.connectedAt = .now
+ if !wasConnected {
+ CallSoundsPlayer.shared.vibrate(long: false)
+ wasConnected = true
+ }
}
if state.connectionState == "closed" {
closeCallView(client)
@@ -161,6 +178,10 @@ struct ActiveCallView: View {
call.callState = .connected
call.connectionInfo = connectionInfo
call.connectedAt = .now
+ if !wasConnected {
+ CallSoundsPlayer.shared.vibrate(long: false)
+ wasConnected = true
+ }
case .ended:
closeCallView(client)
call.callState = .ended
@@ -187,6 +208,22 @@ struct ActiveCallView: View {
}
}
+ private func activeCallWaitDeliveryReceipt() {
+ ChatReceiver.shared.messagesChannel = { msg in
+ guard let call = ChatModel.shared.activeCall, call.callState == .invitationSent else {
+ ChatReceiver.shared.messagesChannel = nil
+ return
+ }
+ if case let .chatItemStatusUpdated(_, msg) = msg,
+ msg.chatInfo.id == call.contact.id,
+ case .sndCall = msg.chatItem.content,
+ case .sndRcvd = msg.chatItem.meta.itemStatus {
+ CallSoundsPlayer.shared.startInCallSound()
+ ChatReceiver.shared.messagesChannel = nil
+ }
+ }
+ }
+
private func closeCallView(_ client: WebRTCClient) {
if m.activeCall != nil {
m.showCallView = false
@@ -198,6 +235,7 @@ struct ActiveCallOverlay: View {
@EnvironmentObject var chatModel: ChatModel
@ObservedObject var call: Call
var client: WebRTCClient
+ @ObservedObject private var deviceManager = CallAudioDeviceManager.shared
var body: some View {
VStack {
@@ -213,7 +251,16 @@ struct ActiveCallOverlay: View {
HStack {
toggleAudioButton()
Spacer()
- Color.clear.frame(width: 40, height: 40)
+ if deviceManager.availableInputs.allSatisfy({ $0.portType == .builtInMic }) {
+ toggleSpeakerButton()
+ .frame(width: 40, height: 40)
+ } else if call.hasMedia {
+ AudioDevicePicker()
+ .scaleEffect(2)
+ .frame(maxWidth: 40, maxHeight: 40)
+ } else {
+ Color.clear.frame(width: 40, height: 40)
+ }
Spacer()
endCallButton()
Spacer()
@@ -239,9 +286,7 @@ struct ActiveCallOverlay: View {
.foregroundColor(.white.opacity(0.8))
}
VStack {
- ProfileImage(imageStr: call.contact.profile.image)
- .scaledToFit()
- .frame(width: 192, height: 192)
+ ProfileImage(imageStr: call.contact.profile.image, size: 192)
audioCallInfoView(call)
}
.foregroundColor(.white)
@@ -256,14 +301,33 @@ struct ActiveCallOverlay: View {
toggleAudioButton()
.frame(maxWidth: .infinity, alignment: .leading)
endCallButton()
- toggleSpeakerButton()
- .frame(maxWidth: .infinity, alignment: .trailing)
+ // Check if the only input is microphone. And in this case show toggle button,
+ // If there are more inputs, it probably means something like bluetooth headphones are available
+ // and in this case show iOS button for choosing different output.
+ // There is no way to get available outputs, only inputs
+ if deviceManager.availableInputs.allSatisfy({ $0.portType == .builtInMic }) {
+ toggleSpeakerButton()
+ .frame(maxWidth: .infinity, alignment: .trailing)
+ } else if call.hasMedia {
+ AudioDevicePicker()
+ .scaleEffect(2)
+ .frame(maxWidth: 50, maxHeight: 40)
+ .frame(maxWidth: .infinity, alignment: .trailing)
+ } else {
+ Color.clear.frame(width: 50, height: 40)
+ }
}
.padding(.bottom, 60)
.padding(.horizontal, 48)
}
}
.frame(maxWidth: .infinity)
+ .onAppear {
+ deviceManager.start()
+ }
+ .onDisappear {
+ deviceManager.stop()
+ }
}
private func audioCallInfoView(_ call: Call) -> some View {
@@ -341,12 +405,17 @@ struct ActiveCallOverlay: View {
private func toggleSpeakerButton() -> some View {
controlButton(call, call.speakerEnabled ? "speaker.wave.2.fill" : "speaker.wave.1.fill") {
Task {
- client.setSpeakerEnabledAndConfigureSession(!call.speakerEnabled)
+ let speakerEnabled = AVAudioSession.sharedInstance().currentRoute.outputs.first?.portType == .builtInSpeaker
+ client.setSpeakerEnabledAndConfigureSession(!speakerEnabled)
DispatchQueue.main.async {
- call.speakerEnabled = !call.speakerEnabled
+ call.speakerEnabled = !speakerEnabled
}
}
}
+ .onAppear {
+ deviceManager.call = call
+ //call.speakerEnabled = AVAudioSession.sharedInstance().currentRoute.outputs.first?.portType == .builtInSpeaker
+ }
}
private func toggleVideoButton() -> some View {
diff --git a/apps/ios/Shared/Views/Call/AudioDevicePicker.swift b/apps/ios/Shared/Views/Call/AudioDevicePicker.swift
new file mode 100644
index 0000000000..3d846c7b68
--- /dev/null
+++ b/apps/ios/Shared/Views/Call/AudioDevicePicker.swift
@@ -0,0 +1,25 @@
+//
+// MPVolumeView.swift
+// SimpleX (iOS)
+//
+// Created by Stanislav on 24.04.2024.
+// Copyright © 2024 SimpleX Chat. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+import UIKit
+import AVKit
+
+struct AudioDevicePicker: UIViewRepresentable {
+ func makeUIView(context: Context) -> some UIView {
+ let v = AVRoutePickerView(frame: .zero)
+ v.activeTintColor = .white
+ v.tintColor = .white
+ return v
+ }
+
+ func updateUIView(_ uiView: UIViewType, context: Context) {
+
+ }
+}
diff --git a/apps/ios/Shared/Views/Call/CallAudioDeviceManager.swift b/apps/ios/Shared/Views/Call/CallAudioDeviceManager.swift
new file mode 100644
index 0000000000..d56849d16a
--- /dev/null
+++ b/apps/ios/Shared/Views/Call/CallAudioDeviceManager.swift
@@ -0,0 +1,67 @@
+//
+// CallAudioDeviceManager.swift
+// SimpleX (iOS)
+//
+// Created by Avently on 23.04.2024.
+// Copyright © 2024 SimpleX Chat. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+import SimpleXChat
+import AVKit
+import WebRTC
+
+class CallAudioDeviceManager: ObservableObject {
+ static let shared = CallAudioDeviceManager()
+ let audioSession: AVAudioSession
+ let nc = NotificationCenter.default
+
+ var call: Call?
+ var timer: Timer? = nil
+
+ // Actually, only one output
+ @Published var outputs: [AVAudioSessionPortDescription]
+ @Published var currentDevice: AVAudioSessionPortDescription? = nil
+ // All devices that can record audio (the ones that can play audio are not included)
+ @Published var availableInputs: [AVAudioSessionPortDescription] = []
+
+
+ init(_ audioSession: AVAudioSession? = nil) {
+ self.audioSession = audioSession ?? RTCAudioSession.sharedInstance().session
+ self.outputs = self.audioSession.currentRoute.outputs
+ self.availableInputs = self.audioSession.availableInputs ?? []
+ }
+
+ func reloadDevices() {
+ outputs = audioSession.currentRoute.outputs
+ currentDevice = audioSession.currentRoute.outputs.first
+ availableInputs = audioSession.availableInputs ?? []
+ call?.speakerEnabled = currentDevice?.portType == .builtInSpeaker
+
+
+ // Workaround situation:
+ // have bluetooth device connected, choosing speaker, disconnecting bluetooth device. In this case iOS will not post notification, so do it manually
+ timer?.invalidate()
+ if availableInputs.contains(where: { $0.portType != .builtInReceiver && $0.portType != .builtInSpeaker }) {
+ timer = Timer.scheduledTimer(withTimeInterval: 2, repeats: false) { t in
+ self.reloadDevices()
+ }
+ }
+ }
+
+ @objc func audioCallback(notification: Notification) {
+ reloadDevices()
+
+ logger.debug("Changes in devices, current audio devices: \(String(describing: self.availableInputs.map({ $0.portType.rawValue }))), output: \(String(describing: self.currentDevice?.portType.rawValue))")
+ }
+
+ func start() {
+ nc.addObserver(self, selector: #selector(audioCallback), name: AVAudioSession.routeChangeNotification, object: nil)
+ }
+
+ func stop() {
+ nc.removeObserver(self, name: AVAudioSession.routeChangeNotification, object: nil)
+ timer?.invalidate()
+ }
+}
diff --git a/apps/ios/Shared/Views/Call/CallController.swift b/apps/ios/Shared/Views/Call/CallController.swift
index 6da8294ef8..64b565e8e6 100644
--- a/apps/ios/Shared/Views/Call/CallController.swift
+++ b/apps/ios/Shared/Views/Call/CallController.swift
@@ -103,7 +103,23 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession)
RTCAudioSession.sharedInstance().isAudioEnabled = true
do {
- try audioSession.setCategory(.playAndRecord, mode: .voiceChat, options: .mixWithOthers)
+ let supportsVideo = ChatModel.shared.activeCall?.supportsVideo == true
+ if supportsVideo {
+ try audioSession.setCategory(.playAndRecord, mode: .videoChat, options: [.defaultToSpeaker, .mixWithOthers, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
+ } else {
+ try audioSession.setCategory(.playAndRecord, mode: .voiceChat, options: [.mixWithOthers, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
+ }
+ // Without any delay sound is not playing from speaker or external device in incoming call
+ Task {
+ for i in 0 ... 3 {
+ try? await Task.sleep(nanoseconds: UInt64(i) * 300_000000)
+ if let preferred = audioSession.preferredInputDevice() {
+ await MainActor.run { try? audioSession.setPreferredInput(preferred) }
+ } else if supportsVideo {
+ await MainActor.run { try? audioSession.overrideOutputAudioPort(.speaker) }
+ }
+ }
+ }
logger.debug("audioSession category set")
try audioSession.setActive(true)
logger.debug("audioSession activated")
diff --git a/apps/ios/Shared/Views/Call/IncomingCallView.swift b/apps/ios/Shared/Views/Call/IncomingCallView.swift
index c2d5dabd48..4647995b28 100644
--- a/apps/ios/Shared/Views/Call/IncomingCallView.swift
+++ b/apps/ios/Shared/Views/Call/IncomingCallView.swift
@@ -30,8 +30,7 @@ struct IncomingCallView: View {
VStack(alignment: .leading, spacing: 6) {
HStack {
if m.users.count > 1 {
- ProfileImage(imageStr: invitation.user.image, color: .white)
- .frame(width: 24, height: 24)
+ ProfileImage(imageStr: invitation.user.image, size: 24, color: .white)
}
Image(systemName: invitation.callType.media == .video ? "video.fill" : "phone.fill").foregroundColor(.green)
Text(invitation.callTypeText)
diff --git a/apps/ios/Shared/Views/Call/SoundPlayer.swift b/apps/ios/Shared/Views/Call/SoundPlayer.swift
index 17c13ab403..c7803a0cb8 100644
--- a/apps/ios/Shared/Views/Call/SoundPlayer.swift
+++ b/apps/ios/Shared/Views/Call/SoundPlayer.swift
@@ -8,6 +8,7 @@
import Foundation
import AVFoundation
+import UIKit
class SoundPlayer {
static let shared = SoundPlayer()
@@ -43,3 +44,63 @@ class SoundPlayer {
audioPlayer = nil
}
}
+
+class CallSoundsPlayer {
+ static let shared = CallSoundsPlayer()
+ private var audioPlayer: AVAudioPlayer?
+ private var playerTask: Task = Task {}
+
+ private func start(_ soundName: String, delayMs: Double) {
+ audioPlayer?.stop()
+ playerTask.cancel()
+ logger.debug("start \(soundName)")
+ guard let path = Bundle.main.path(forResource: soundName, ofType: "mp3", inDirectory: "sounds") else {
+ logger.debug("start: file not found")
+ return
+ }
+ do {
+ let player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
+ if player.prepareToPlay() {
+ audioPlayer = player
+ }
+ } catch {
+ logger.debug("start: AVAudioPlayer error \(error.localizedDescription)")
+ }
+
+ playerTask = Task {
+ while let player = audioPlayer {
+ player.play()
+ do {
+ try await Task.sleep(nanoseconds: UInt64((player.duration * 1_000_000_000) + delayMs * 1_000_000))
+ } catch {
+ break
+ }
+ }
+ }
+ }
+
+ func startConnectingCallSound() {
+ start("connecting_call", delayMs: 0)
+ }
+
+ func startInCallSound() {
+ // Taken from https://github.com/TelegramOrg/Telegram-Android
+ // https://github.com/TelegramOrg/Telegram-Android/blob/master/LICENSE
+ start("in_call", delayMs: 1000)
+ }
+
+ func stop() {
+ playerTask.cancel()
+ audioPlayer?.stop()
+ audioPlayer = nil
+ }
+
+ func vibrate(long: Bool) {
+ // iOS just don't want to vibrate more than once after a short period of time, and all 'styles' feel the same
+ if long {
+ AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
+ } else {
+ UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
+ }
+ }
+}
diff --git a/apps/ios/Shared/Views/Call/WebRTC.swift b/apps/ios/Shared/Views/Call/WebRTC.swift
index 919b1e14e7..333dc082d5 100644
--- a/apps/ios/Shared/Views/Call/WebRTC.swift
+++ b/apps/ios/Shared/Views/Call/WebRTC.swift
@@ -431,17 +431,18 @@ struct RTCIceServer: Codable, Equatable {
}
// the servers are expected in this format:
-// stun:stun.simplex.im:443?transport=tcp
-// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443?transport=tcp
+// stuns:stun.simplex.im:443?transport=tcp
+// turns:private2:Hxuq2QxUjnhj96Zq2r4HjqHRj@turn.simplex.im:443?transport=tcp
func parseRTCIceServer(_ str: String) -> RTCIceServer? {
var s = replaceScheme(str, "stun:")
+ s = replaceScheme(s, "stuns:")
s = replaceScheme(s, "turn:")
s = replaceScheme(s, "turns:")
if let u: URL = URL(string: s),
let scheme = u.scheme,
let host = u.host,
let port = u.port,
- u.path == "" && (scheme == "stun" || scheme == "turn" || scheme == "turns") {
+ u.path == "" && (scheme == "stun" || scheme == "stuns" || scheme == "turn" || scheme == "turns") {
let query = u.query == nil || u.query == "" ? "" : "?" + (u.query ?? "")
return RTCIceServer(
urls: ["\(scheme):\(host):\(port)\(query)"],
diff --git a/apps/ios/Shared/Views/Call/WebRTCClient.swift b/apps/ios/Shared/Views/Call/WebRTCClient.swift
index 1806984d64..0b4917c103 100644
--- a/apps/ios/Shared/Views/Call/WebRTCClient.swift
+++ b/apps/ios/Shared/Views/Call/WebRTCClient.swift
@@ -49,7 +49,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
}
private let rtcAudioSession = RTCAudioSession.sharedInstance()
- private let audioQueue = DispatchQueue(label: "audio")
+ private let audioQueue = DispatchQueue(label: "chat.simplex.app.audio")
private var sendCallResponse: (WVAPIMessage) async -> Void
var activeCall: Binding
private var localRendererAspectRatio: Binding
@@ -65,14 +65,14 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
self.localRendererAspectRatio = localRendererAspectRatio
rtcAudioSession.useManualAudio = CallController.useCallKit()
rtcAudioSession.isAudioEnabled = !CallController.useCallKit()
- logger.debug("WebRTCClient: rtcAudioSession has manual audio \(self.rtcAudioSession.useManualAudio) and audio enabled \(self.rtcAudioSession.isAudioEnabled)}")
+ logger.debug("WebRTCClient: rtcAudioSession has manual audio \(self.rtcAudioSession.useManualAudio) and audio enabled \(self.rtcAudioSession.isAudioEnabled)")
super.init()
}
let defaultIceServers: [WebRTC.RTCIceServer] = [
- WebRTC.RTCIceServer(urlStrings: ["stun:stun.simplex.im:443"]),
- WebRTC.RTCIceServer(urlStrings: ["turn:turn.simplex.im:443?transport=udp"], username: "private", credential: "yleob6AVkiNI87hpR94Z"),
- WebRTC.RTCIceServer(urlStrings: ["turn:turn.simplex.im:443?transport=tcp"], username: "private", credential: "yleob6AVkiNI87hpR94Z"),
+ WebRTC.RTCIceServer(urlStrings: ["stuns:stun.simplex.im:443"]),
+ //WebRTC.RTCIceServer(urlStrings: ["turns:turn.simplex.im:443?transport=udp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj"),
+ WebRTC.RTCIceServer(urlStrings: ["turns:turn.simplex.im:443?transport=tcp"], username: "private2", credential: "Hxuq2QxUjnhj96Zq2r4HjqHRj"),
]
func initializeCall(_ iceServers: [WebRTC.RTCIceServer]?, _ mediaType: CallMediaType, _ aesKey: String?, _ relay: Bool?) -> Call {
@@ -605,9 +605,23 @@ extension WebRTCClient {
self.rtcAudioSession.unlockForConfiguration()
}
do {
- try self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue)
- try self.rtcAudioSession.setMode(AVAudioSession.Mode.voiceChat.rawValue)
- try self.rtcAudioSession.overrideOutputAudioPort(enabled ? .speaker : .none)
+ let hasExternalAudioDevice = self.rtcAudioSession.session.hasExternalAudioDevice()
+ if enabled {
+ try self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with: [.defaultToSpeaker, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
+ try self.rtcAudioSession.setMode(AVAudioSession.Mode.videoChat.rawValue)
+ if hasExternalAudioDevice, let preferred = self.rtcAudioSession.session.preferredInputDevice() {
+ try self.rtcAudioSession.setPreferredInput(preferred)
+ } else {
+ try self.rtcAudioSession.overrideOutputAudioPort(.speaker)
+ }
+ } else {
+ try self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with: [.allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
+ try self.rtcAudioSession.setMode(AVAudioSession.Mode.voiceChat.rawValue)
+ try self.rtcAudioSession.overrideOutputAudioPort(.none)
+ }
+ if hasExternalAudioDevice {
+ logger.debug("WebRTCClient: configuring session with external device available, skip configuring speaker")
+ }
try self.rtcAudioSession.setActive(true)
logger.debug("WebRTCClient: configuring session with speaker enabled \(enabled) success")
} catch let error {
@@ -658,6 +672,17 @@ extension WebRTCClient {
}
}
+extension AVAudioSession {
+ func hasExternalAudioDevice() -> Bool {
+ availableInputs?.allSatisfy({ $0.portType == .builtInMic }) != true
+ }
+
+ func preferredInputDevice() -> AVAudioSessionPortDescription? {
+// logger.debug("Preferred input device: \(String(describing: self.availableInputs?.filter({ $0.portType != .builtInMic })))")
+ return availableInputs?.filter({ $0.portType != .builtInMic }).last
+ }
+}
+
struct CustomRTCSessionDescription: Codable {
public var type: RTCSdpType?
public var sdp: String?
diff --git a/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift b/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift
index d0f4b6e55a..140b609902 100644
--- a/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift
+++ b/apps/ios/Shared/Views/Chat/ChatInfoToolbar.swift
@@ -25,11 +25,11 @@ struct ChatInfoToolbar: View {
}
ChatInfoImage(
chat: chat,
+ size: imageSize,
color: colorScheme == .dark
? chatImageColorDark
: chatImageColorLight
)
- .frame(width: imageSize, height: imageSize)
.padding(.trailing, 4)
VStack {
let t = Text(cInfo.displayName).font(.headline)
diff --git a/apps/ios/Shared/Views/Chat/ChatInfoView.swift b/apps/ios/Shared/Views/Chat/ChatInfoView.swift
index 8b60fc7649..55e84f20d3 100644
--- a/apps/ios/Shared/Views/Chat/ChatInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatInfoView.swift
@@ -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,19 +165,9 @@ struct ChatInfoView: View {
}
.disabled(!contact.ready || !contact.active)
- if pqExperimentalEnabled,
- let conn = contact.activeConn {
+ if 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."))
- }
}
}
@@ -256,7 +243,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)
}
}
@@ -285,8 +271,7 @@ struct ChatInfoView: View {
private func contactInfoHeader() -> some View {
VStack {
let cInfo = chat.chatInfo
- ChatInfoImage(chat: chat, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 192, height: 192)
+ ChatInfoImage(chat: chat, size: 192, color: Color(uiColor: .tertiarySystemFill))
.padding(.top, 12)
.padding()
if contact.verified {
@@ -430,15 +415,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 +548,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 {
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CICallItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CICallItemView.swift
index f0bf43dffe..e3913431f5 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CICallItemView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CICallItemView.swift
@@ -35,9 +35,7 @@ struct CICallItemView: View {
case .error: missedCallIcon(sent).foregroundColor(.orange)
}
- chatItem.timestampText
- .font(.caption)
- .foregroundColor(.secondary)
+ CIMetaView(chat: chat, chatItem: chatItem, showStatus: false, showEdited: false)
.padding(.bottom, 8)
.padding(.horizontal, 12)
}
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift
index 03afa30331..5c9ea0f6d8 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift
@@ -11,6 +11,7 @@ import SimpleXChat
struct CIChatFeatureView: View {
@EnvironmentObject var m: ChatModel
+ @ObservedObject var chat: Chat
var chatItem: ChatItem
@Binding var revealed: Bool
var feature: Feature
@@ -18,7 +19,7 @@ struct CIChatFeatureView: View {
var iconColor: Color
var body: some View {
- if !revealed, let fs = mergedFeautures() {
+ if !revealed, let fs = mergedFeatures() {
HStack {
ForEach(fs, content: featureIconView)
}
@@ -47,7 +48,7 @@ struct CIChatFeatureView: View {
}
}
- private func mergedFeautures() -> [FeatureInfo]? {
+ private func mergedFeatures() -> [FeatureInfo]? {
var fs: [FeatureInfo] = []
var icons: Set = []
if var i = m.getChatItemIndex(chatItem) {
@@ -67,8 +68,8 @@ struct CIChatFeatureView: View {
switch ci.content {
case let .rcvChatFeature(feature, enabled, param): FeatureInfo(feature, enabled.iconColor, param)
case let .sndChatFeature(feature, enabled, param): FeatureInfo(feature, enabled.iconColor, param)
- case let .rcvGroupFeature(feature, preference, param): FeatureInfo(feature, preference.enable.iconColor, param)
- case let .sndGroupFeature(feature, preference, param): FeatureInfo(feature, preference.enable.iconColor, param)
+ case let .rcvGroupFeature(feature, preference, param, role): FeatureInfo(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor, param)
+ case let .sndGroupFeature(feature, preference, param, role): FeatureInfo(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor, param)
default: nil
}
}
@@ -103,6 +104,6 @@ struct CIChatFeatureView: View {
struct CIChatFeatureView_Previews: PreviewProvider {
static var previews: some View {
let enabled = FeatureEnabled(forUser: false, forContact: false)
- CIChatFeatureView(chatItem: ChatItem.getChatFeatureSample(.fullDelete, enabled), revealed: Binding.constant(true), feature: ChatFeature.fullDelete, iconColor: enabled.iconColor)
+ CIChatFeatureView(chat: Chat.sampleData, chatItem: ChatItem.getChatFeatureSample(.fullDelete, enabled), revealed: Binding.constant(true), feature: ChatFeature.fullDelete, iconColor: enabled.iconColor)
}
}
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIEventView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIEventView.swift
index b6be3f837e..1375b87a5a 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIEventView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIEventView.swift
@@ -17,6 +17,7 @@ struct CIEventView: View {
.padding(.horizontal, 6)
.padding(.vertical, 4)
.textSelection(.disabled)
+ .lineLimit(4)
}
}
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift
index c94ba3f830..ae9e09b138 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift
@@ -69,19 +69,12 @@ struct CIFileView: View {
return false
}
- private func fileSizeValid() -> Bool {
- if let file = file {
- return file.fileSize <= getMaxFileSize(file.fileProtocol)
- }
- return false
- }
-
private func fileAction() {
logger.debug("CIFileView fileAction")
if let file = file {
switch (file.fileStatus) {
case .rcvInvitation:
- if fileSizeValid() {
+ if fileSizeValid(file) {
Task {
logger.debug("CIFileView fileAction - in .rcvInvitation, in Task")
if let user = m.currentUser {
@@ -143,7 +136,7 @@ struct CIFileView: View {
case .sndCancelled: fileIcon("doc.fill", innerIcon: "xmark", innerIconSize: 10)
case .sndError: fileIcon("doc.fill", innerIcon: "xmark", innerIconSize: 10)
case .rcvInvitation:
- if fileSizeValid() {
+ if fileSizeValid(file) {
fileIcon("arrow.down.doc.fill", color: .accentColor)
} else {
fileIcon("doc.fill", color: .orange, innerIcon: "exclamationmark", innerIconSize: 12)
@@ -201,6 +194,13 @@ struct CIFileView: View {
}
}
+func fileSizeValid(_ file: CIFile?) -> Bool {
+ if let file = file {
+ return file.fileSize <= getMaxFileSize(file.fileProtocol)
+ }
+ return false
+}
+
func saveCryptoFile(_ fileSource: CryptoFile) {
if let cfArgs = fileSource.cryptoArgs {
let url = getAppFilePath(fileSource.filePath)
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift
index 72013877ca..1c9df5fcbf 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift
@@ -12,6 +12,7 @@ import SimpleXChat
struct CIGroupInvitationView: View {
@EnvironmentObject var chatModel: ChatModel
@Environment(\.colorScheme) var colorScheme
+ @ObservedObject var chat: Chat
var chatItem: ChatItem
var groupInvitation: CIGroupInvitation
var memberRole: GroupMemberRole
@@ -37,16 +38,22 @@ struct CIGroupInvitationView: View {
VStack(alignment: .leading, spacing: 2) {
groupInvitationText()
.overlay(DetermineWidth())
- Text(chatIncognito ? "Tap to join incognito" : "Tap to join")
- .foregroundColor(inProgress ? .secondary : chatIncognito ? .indigo : .accentColor)
- .font(.callout)
- .padding(.trailing, 60)
- .overlay(DetermineWidth())
+ (
+ Text(chatIncognito ? "Tap to join incognito" : "Tap to join")
+ .foregroundColor(inProgress ? .secondary : chatIncognito ? .indigo : .accentColor)
+ .font(.callout)
+ + Text(" ")
+ + ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showStatus: false, showEdited: false)
+ )
+ .overlay(DetermineWidth())
}
} else {
- groupInvitationText()
- .padding(.trailing, 60)
- .overlay(DetermineWidth())
+ (
+ groupInvitationText()
+ + Text(" ")
+ + ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showStatus: false, showEdited: false)
+ )
+ .overlay(DetermineWidth())
}
}
.padding(.bottom, 2)
@@ -56,9 +63,7 @@ struct CIGroupInvitationView: View {
}
}
- chatItem.timestampText
- .font(.caption)
- .foregroundColor(.secondary)
+ CIMetaView(chat: chat, chatItem: chatItem, showStatus: false, showEdited: false)
}
.padding(.horizontal, 12)
.padding(.vertical, 6)
@@ -100,9 +105,9 @@ struct CIGroupInvitationView: View {
ProfileImage(
imageStr: groupInvitation.groupProfile.image,
iconName: "person.2.circle.fill",
+ size: 44,
color: color
)
- .frame(width: 44, height: 44)
.padding(.trailing, 4)
VStack(alignment: .leading) {
let p = groupInvitation.groupProfile
@@ -115,7 +120,7 @@ struct CIGroupInvitationView: View {
}
}
- private func groupInvitationText() -> some View {
+ private func groupInvitationText() -> Text {
Text(groupInvitationStr())
.font(.callout)
}
@@ -137,8 +142,8 @@ struct CIGroupInvitationView: View {
struct CIGroupInvitationView_Previews: PreviewProvider {
static var previews: some View {
Group {
- CIGroupInvitationView(chatItem: ChatItem.getGroupInvitationSample(), groupInvitation: CIGroupInvitation.getSample(groupProfile: GroupProfile(displayName: "team", fullName: "team")), memberRole: .admin)
- CIGroupInvitationView(chatItem: ChatItem.getGroupInvitationSample(), groupInvitation: CIGroupInvitation.getSample(status: .accepted), memberRole: .admin)
+ CIGroupInvitationView(chat: Chat.sampleData, chatItem: ChatItem.getGroupInvitationSample(), groupInvitation: CIGroupInvitation.getSample(groupProfile: GroupProfile(displayName: "team", fullName: "team")), memberRole: .admin)
+ CIGroupInvitationView(chat: Chat.sampleData, chatItem: ChatItem.getGroupInvitationSample(), groupInvitation: CIGroupInvitation.getSample(status: .accepted), memberRole: .admin)
}
}
}
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift
index c189abde24..17b93930fe 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift
@@ -14,6 +14,8 @@ struct CIMetaView: View {
var chatItem: ChatItem
var metaColor = Color.secondary
var paleMetaColor = Color(UIColor.tertiaryLabel)
+ var showStatus = true
+ var showEdited = true
var body: some View {
if chatItem.isDeletedContent {
@@ -25,24 +27,24 @@ struct CIMetaView: View {
switch meta.itemStatus {
case let .sndSent(sndProgress):
switch sndProgress {
- case .complete: ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .sent)
- case .partial: ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .sent)
+ case .complete: ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .sent, showStatus: showStatus, showEdited: showEdited)
+ case .partial: ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .sent, showStatus: showStatus, showEdited: showEdited)
}
case let .sndRcvd(_, sndProgress):
switch sndProgress {
case .complete:
ZStack {
- ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .rcvd1)
- ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .rcvd2)
+ ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .rcvd1, showStatus: showStatus, showEdited: showEdited)
+ ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .rcvd2, showStatus: showStatus, showEdited: showEdited)
}
case .partial:
ZStack {
- ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .rcvd1)
- ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .rcvd2)
+ ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .rcvd1, showStatus: showStatus, showEdited: showEdited)
+ ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .rcvd2, showStatus: showStatus, showEdited: showEdited)
}
}
default:
- ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor)
+ ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, showStatus: showStatus, showEdited: showEdited)
}
}
}
@@ -54,9 +56,18 @@ enum SentCheckmark {
case rcvd2
}
-func ciMetaText(_ meta: CIMeta, chatTTL: Int?, encrypted: Bool?, color: Color = .clear, transparent: Bool = false, sent: SentCheckmark? = nil) -> Text {
+func ciMetaText(
+ _ meta: CIMeta,
+ chatTTL: Int?,
+ encrypted: Bool?,
+ color: Color = .clear,
+ transparent: Bool = false,
+ sent: SentCheckmark? = nil,
+ showStatus: Bool = true,
+ showEdited: Bool = true
+) -> Text {
var r = Text("")
- if meta.itemEdited {
+ if showEdited, meta.itemEdited {
r = r + statusIconText("pencil", color)
}
if meta.disappearing {
@@ -67,19 +78,21 @@ func ciMetaText(_ meta: CIMeta, chatTTL: Int?, encrypted: Bool?, color: Color =
}
r = r + Text(" ")
}
- if let (icon, statusColor) = meta.statusIcon(color) {
- let t = Text(Image(systemName: icon)).font(.caption2)
- let gap = Text(" ").kerning(-1.25)
- let t1 = t.foregroundColor(transparent ? .clear : statusColor.opacity(0.67))
- switch sent {
- case nil: r = r + t1
- case .sent: r = r + t1 + gap
- case .rcvd1: r = r + t.foregroundColor(transparent ? .clear : statusColor.opacity(0.67)) + gap
- case .rcvd2: r = r + gap + t1
+ if showStatus {
+ if let (icon, statusColor) = meta.statusIcon(color) {
+ let t = Text(Image(systemName: icon)).font(.caption2)
+ let gap = Text(" ").kerning(-1.25)
+ let t1 = t.foregroundColor(transparent ? .clear : statusColor.opacity(0.67))
+ switch sent {
+ case nil: r = r + t1
+ case .sent: r = r + t1 + gap
+ case .rcvd1: r = r + t.foregroundColor(transparent ? .clear : statusColor.opacity(0.67)) + gap
+ case .rcvd2: r = r + gap + t1
+ }
+ r = r + Text(" ")
+ } else if !meta.disappearing {
+ r = r + statusIconText("circlebadge.fill", .clear) + Text(" ")
}
- r = r + Text(" ")
- } else if !meta.disappearing {
- r = r + statusIconText("circlebadge.fill", .clear) + Text(" ")
}
if let enc = encrypted {
r = r + statusIconText(enc ? "lock" : "lock.open", color) + Text(" ")
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift
index a3918e17bc..b4b190a43a 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift
@@ -126,7 +126,7 @@ struct CIVideoView: View {
if !decryptionInProgress {
Button {
decrypt(file: file) {
- if let decrypted = urlDecrypted {
+ if urlDecrypted != nil {
videoPlaying = true
player?.play()
}
diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift
index 3475e7a8b6..95c3347f90 100644
--- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift
@@ -65,6 +65,8 @@ struct FramedItemView: View {
}
}
}
+ } else if let itemForwarded = chatItem.meta.itemForwarded {
+ framedItemHeader(icon: "arrowshape.turn.up.forward", caption: Text(itemForwarded.text(chat.chatInfo.chatType)).italic(), pad: true)
}
ChatItemContentView(chat: chat, chatItem: chatItem, revealed: $revealed, msgContentView: framedMsgContentView)
@@ -163,7 +165,7 @@ struct FramedItemView: View {
)
}
- @ViewBuilder func framedItemHeader(icon: String? = nil, caption: Text) -> some View {
+ @ViewBuilder func framedItemHeader(icon: String? = nil, caption: Text, pad: Bool = false) -> some View {
let v = HStack(spacing: 6) {
if let icon = icon {
Image(systemName: icon)
@@ -178,7 +180,7 @@ struct FramedItemView: View {
.foregroundColor(.secondary)
.padding(.horizontal, 12)
.padding(.top, 6)
- .padding(.bottom, chatItem.quotedItem == nil ? 6 : 0) // TODO think how to regroup
+ .padding(.bottom, pad || (chatItem.quotedItem == nil && chatItem.meta.itemForwarded == nil) ? 6 : 0)
.overlay(DetermineWidth())
.frame(minWidth: msgWidth, alignment: .leading)
.background(chatItemFrameContextColor(chatItem, colorScheme))
@@ -246,7 +248,10 @@ struct FramedItemView: View {
Group {
if let sender = qi.getSender(membership()) {
VStack(alignment: .leading, spacing: 2) {
- Text(sender).font(.caption).foregroundColor(.secondary)
+ Text(sender)
+ .font(.caption)
+ .foregroundColor(.secondary)
+ .lineLimit(1)
ciQuotedMsgTextView(qi, lines: 2)
}
} else {
@@ -353,9 +358,9 @@ private struct MetaColorPreferenceKey: PreferenceKey {
func onlyImageOrVideo(_ ci: ChatItem) -> Bool {
if case let .image(text, _) = ci.content.msgContent {
- return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && text == ""
+ return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && ci.meta.itemForwarded == nil && text == ""
} else if case let .video(text, _, _) = ci.content.msgContent {
- return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && text == ""
+ return ci.meta.itemDeleted == nil && !ci.meta.isLive && ci.quotedItem == nil && ci.meta.itemForwarded == nil && text == ""
}
return false
}
diff --git a/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift
new file mode 100644
index 0000000000..7237711a2a
--- /dev/null
+++ b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift
@@ -0,0 +1,151 @@
+//
+// ChatItemForwardingView.swift
+// SimpleX (iOS)
+//
+// Created by spaced4ndy on 12.04.2024.
+// Copyright © 2024 SimpleX Chat. All rights reserved.
+//
+
+import SwiftUI
+import SimpleXChat
+
+struct ChatItemForwardingView: View {
+ @EnvironmentObject var chatModel: ChatModel
+ @Environment(\.dismiss) var dismiss
+
+ var ci: ChatItem
+ var fromChatInfo: ChatInfo
+ @Binding var composeState: ComposeState
+
+ @State private var searchText: String = ""
+ @FocusState private var searchFocused
+
+ var body: some View {
+ NavigationView {
+ forwardListView()
+ .toolbar {
+ ToolbarItem(placement: .navigationBarLeading) {
+ Button("Cancel") {
+ dismiss()
+ }
+ }
+ ToolbarItem(placement: .principal) {
+ Text("Forward")
+ .bold()
+ }
+ }
+ }
+ }
+
+ @ViewBuilder private func forwardListView() -> some View {
+ VStack(alignment: .leading) {
+ let chatsToForwardTo = filterChatsToForwardTo()
+ if !chatsToForwardTo.isEmpty {
+ ScrollView {
+ LazyVStack(alignment: .leading, spacing: 8) {
+ searchFieldView(text: $searchText, focussed: $searchFocused)
+ .padding(.leading, 2)
+ let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
+ let chats = s == "" ? chatsToForwardTo : chatsToForwardTo.filter { filterChatSearched($0, s) }
+ ForEach(chats) { chat in
+ Divider()
+ forwardListNavLinkView(chat)
+ .disabled(chatModel.deletedChats.contains(chat.chatInfo.id))
+ }
+ }
+ .padding(.horizontal)
+ .padding(.vertical, 8)
+ .background(Color(uiColor: .systemBackground))
+ .cornerRadius(12)
+ .padding(.horizontal)
+ }
+ .background(Color(.systemGroupedBackground))
+ } else {
+ emptyList()
+ }
+ }
+ }
+
+ private func filterChatsToForwardTo() -> [Chat] {
+ var filteredChats = chatModel.chats.filter({ canForwardToChat($0) })
+ if let index = filteredChats.firstIndex(where: { $0.chatInfo.chatType == .local }) {
+ let privateNotes = filteredChats.remove(at: index)
+ filteredChats.insert(privateNotes, at: 0)
+ }
+ return filteredChats
+ }
+
+ private func filterChatSearched(_ chat: Chat, _ searchStr: String) -> Bool {
+ let cInfo = chat.chatInfo
+ return switch cInfo {
+ case let .direct(contact):
+ viewNameContains(cInfo, searchStr) ||
+ contact.profile.displayName.localizedLowercase.contains(searchStr) ||
+ contact.fullName.localizedLowercase.contains(searchStr)
+ default:
+ viewNameContains(cInfo, searchStr)
+ }
+
+ func viewNameContains(_ cInfo: ChatInfo, _ s: String) -> Bool {
+ cInfo.chatViewName.localizedLowercase.contains(s)
+ }
+ }
+
+ private func canForwardToChat(_ chat: Chat) -> Bool {
+ switch chat.chatInfo {
+ case let .direct(contact): contact.sendMsgEnabled && !contact.nextSendGrpInv
+ case let .group(groupInfo): groupInfo.sendMsgEnabled
+ case let .local(noteFolder): noteFolder.sendMsgEnabled
+ case .contactRequest: false
+ case .contactConnection: false
+ case .invalidJSON: false
+ }
+ }
+
+ private func emptyList() -> some View {
+ Text("No filtered chats")
+ .foregroundColor(.secondary)
+ .frame(maxWidth: .infinity)
+ }
+
+ @ViewBuilder private func forwardListNavLinkView(_ chat: Chat) -> some View {
+ Button {
+ dismiss()
+ if chat.id == fromChatInfo.id {
+ composeState = ComposeState(
+ message: composeState.message,
+ preview: composeState.linkPreview != nil ? composeState.preview : .noPreview,
+ contextItem: .forwardingItem(chatItem: ci, fromChatInfo: fromChatInfo)
+ )
+ } else {
+ composeState = ComposeState.init(forwardingItem: ci, fromChatInfo: fromChatInfo)
+ chatModel.chatId = chat.id
+ }
+ } label: {
+ HStack {
+ ChatInfoImage(chat: chat, size: 30)
+ .padding(.trailing, 2)
+ Text(chat.chatInfo.chatViewName)
+ .foregroundColor(.primary)
+ .lineLimit(1)
+ if chat.chatInfo.incognito {
+ Spacer()
+ Image(systemName: "theatermasks")
+ .resizable()
+ .scaledToFit()
+ .frame(width: 22, height: 22)
+ .foregroundColor(.secondary)
+ }
+ }
+ .frame(maxWidth: .infinity, alignment: .leading)
+ }
+ }
+}
+
+#Preview {
+ ChatItemForwardingView(
+ ci: ChatItem.getSample(1, .directSnd, .now, "hello"),
+ fromChatInfo: .direct(contact: Contact.sampleData),
+ composeState: Binding.constant(ComposeState(message: "hello"))
+ )
+}
diff --git a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
index 8dd43cc01b..19aa261396 100644
--- a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift
@@ -11,6 +11,7 @@ import SimpleXChat
struct ChatItemInfoView: View {
@EnvironmentObject var chatModel: ChatModel
+ @Environment(\.dismiss) var dismiss
@Environment(\.colorScheme) var colorScheme
var ci: ChatItem
@Binding var chatItemInfo: ChatItemInfo?
@@ -21,6 +22,7 @@ struct ChatItemInfoView: View {
enum CIInfoTab {
case history
case quote
+ case forwarded
case delivery
}
@@ -68,9 +70,20 @@ struct ChatItemInfoView: View {
if ci.quotedItem != nil {
numTabs += 1
}
+ if chatItemInfo?.forwardedFromChatItem != nil {
+ numTabs += 1
+ }
return numTabs
}
+ private var local: Bool {
+ switch ci.chatDir {
+ case .localSnd: true
+ case .localRcv: true
+ default: false
+ }
+ }
+
@ViewBuilder private func itemInfoView() -> some View {
if numTabs > 1 {
TabView(selection: $selection) {
@@ -93,6 +106,13 @@ struct ChatItemInfoView: View {
}
.tag(CIInfoTab.quote)
}
+ if let forwardedFromItem = chatItemInfo?.forwardedFromChatItem {
+ forwardedFromTab(forwardedFromItem)
+ .tabItem {
+ Label(local ? "Saved" : "Forwarded", systemImage: "arrowshape.turn.up.forward")
+ }
+ .tag(CIInfoTab.forwarded)
+ }
}
.onAppear {
if chatItemInfo?.memberDeliveryStatuses != nil {
@@ -275,6 +295,74 @@ struct ChatItemInfoView: View {
: Color(uiColor: .tertiarySystemGroupedBackground)
}
+ @ViewBuilder private func forwardedFromTab(_ forwardedFromItem: AChatItem) -> some View {
+ ScrollView {
+ VStack(alignment: .leading, spacing: 16) {
+ details()
+ Divider().padding(.vertical)
+ Text(local ? "Saved from" : "Forwarded from")
+ .font(.title2)
+ .padding(.bottom, 4)
+ forwardedFromView(forwardedFromItem)
+ }
+ .padding()
+ }
+ .frame(maxHeight: .infinity, alignment: .top)
+ }
+
+ private func forwardedFromView(_ forwardedFromItem: AChatItem) -> some View {
+ VStack(alignment: .leading, spacing: 8) {
+ Button {
+ Task {
+ await MainActor.run {
+ chatModel.chatId = forwardedFromItem.chatInfo.id
+ dismiss()
+ }
+ }
+ } label: {
+ forwardedFromSender(forwardedFromItem)
+ }
+
+ if !local {
+ Divider().padding(.top, 32)
+ Text("Recipient(s) can't see who this message is from.")
+ .font(.caption)
+ .foregroundColor(.secondary)
+ }
+ }
+ }
+
+ @ViewBuilder private func forwardedFromSender(_ forwardedFromItem: AChatItem) -> some View {
+ HStack {
+ ChatInfoImage(chat: Chat(chatInfo: forwardedFromItem.chatInfo), size: 48)
+ .padding(.trailing, 6)
+
+ if forwardedFromItem.chatItem.chatDir.sent {
+ VStack(alignment: .leading) {
+ Text("you")
+ .italic()
+ .foregroundColor(.primary)
+ Text(forwardedFromItem.chatInfo.chatViewName)
+ .foregroundColor(.secondary)
+ .lineLimit(1)
+ }
+ } else if case let .groupRcv(groupMember) = forwardedFromItem.chatItem.chatDir {
+ VStack(alignment: .leading) {
+ Text(groupMember.chatViewName)
+ .foregroundColor(.primary)
+ .lineLimit(1)
+ Text(forwardedFromItem.chatInfo.chatViewName)
+ .foregroundColor(.secondary)
+ .lineLimit(1)
+ }
+ } else {
+ Text(forwardedFromItem.chatInfo.chatViewName)
+ .foregroundColor(.primary)
+ .lineLimit(1)
+ }
+ }
+ }
+
@ViewBuilder private func deliveryTab(_ memberDeliveryStatuses: [MemberDeliveryStatus]) -> some View {
ScrollView {
VStack(alignment: .leading, spacing: 16) {
@@ -316,8 +404,7 @@ struct ChatItemInfoView: View {
private func memberDeliveryStatusView(_ member: GroupMember, _ status: CIStatus) -> some View {
HStack{
- ProfileImage(imageStr: member.image)
- .frame(width: 30, height: 30)
+ ProfileImage(imageStr: member.image, size: 30)
.padding(.trailing, 2)
Text(member.chatViewName)
.lineLimit(1)
diff --git a/apps/ios/Shared/Views/Chat/ChatItemView.swift b/apps/ios/Shared/Views/Chat/ChatItemView.swift
index da9dc523e1..d580fb5f3e 100644
--- a/apps/ios/Shared/Views/Chat/ChatItemView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatItemView.swift
@@ -46,7 +46,7 @@ struct ChatItemView: View {
let ci = chatItem
if chatItem.meta.itemDeleted != nil && (!revealed || chatItem.isDeletedContent) {
MarkedDeletedItemView(chat: chat, chatItem: chatItem, revealed: $revealed)
- } else if ci.quotedItem == nil && ci.meta.itemDeleted == nil && !ci.meta.isLive {
+ } else if ci.quotedItem == nil && ci.meta.itemForwarded == nil && ci.meta.itemDeleted == nil && !ci.meta.isLive {
if let mc = ci.content.msgContent, mc.isText && isShortEmoji(ci.content.text) {
EmojiItemView(chat: chat, chatItem: ci)
} else if ci.content.text.isEmpty, case let .voice(_, duration) = ci.content.msgContent {
@@ -102,9 +102,9 @@ struct ChatItemContentView: View {
case let .rcvChatPreference(feature, allowed, param):
CIFeaturePreferenceView(chat: chat, chatItem: chatItem, feature: feature, allowed: allowed, param: param)
case let .sndChatPreference(feature, _, _):
- CIChatFeatureView(chatItem: chatItem, revealed: $revealed, feature: feature, icon: feature.icon, iconColor: .secondary)
- case let .rcvGroupFeature(feature, preference, _): chatFeatureView(feature, preference.enable.iconColor)
- case let .sndGroupFeature(feature, preference, _): chatFeatureView(feature, preference.enable.iconColor)
+ CIChatFeatureView(chat: chat, chatItem: chatItem, revealed: $revealed, feature: feature, icon: feature.icon, iconColor: .secondary)
+ case let .rcvGroupFeature(feature, preference, _, role): chatFeatureView(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor)
+ case let .sndGroupFeature(feature, preference, _, role): chatFeatureView(feature, preference.enabled(role, for: chat.chatInfo.groupInfo?.membership).iconColor)
case let .rcvChatFeatureRejected(feature): chatFeatureView(feature, .red)
case let .rcvGroupFeatureRejected(feature): chatFeatureView(feature, .red)
case .sndModerated: deletedItemView()
@@ -127,7 +127,7 @@ struct ChatItemContentView: View {
}
private func groupInvitationItemView(_ groupInvitation: CIGroupInvitation, _ memberRole: GroupMemberRole) -> some View {
- CIGroupInvitationView(chatItem: chatItem, groupInvitation: groupInvitation, memberRole: memberRole, chatIncognito: chat.chatInfo.incognito)
+ CIGroupInvitationView(chat: chat, chatItem: chatItem, groupInvitation: groupInvitation, memberRole: memberRole, chatIncognito: chat.chatInfo.incognito)
}
private func eventItemView() -> some View {
@@ -149,7 +149,7 @@ struct ChatItemContentView: View {
}
private func chatFeatureView(_ feature: Feature, _ iconColor: Color) -> some View {
- CIChatFeatureView(chatItem: chatItem, revealed: $revealed, feature: feature, iconColor: iconColor)
+ CIChatFeatureView(chat: chat, chatItem: chatItem, revealed: $revealed, feature: feature, iconColor: iconColor)
}
private var mergedGroupEventText: Text? {
diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift
index cd2aa55bc3..4055ca2b28 100644
--- a/apps/ios/Shared/Views/Chat/ChatView.swift
+++ b/apps/ios/Shared/Views/Chat/ChatView.swift
@@ -83,7 +83,11 @@ struct ChatView: View {
initChatView()
}
.onChange(of: chatModel.chatId) { cId in
- if cId != nil {
+ showChatInfoSheet = false
+ if let cId {
+ if let c = chatModel.getChat(cId) {
+ chat = c
+ }
initChatView()
} else {
dismiss()
@@ -179,7 +183,7 @@ struct ChatView: View {
.disabled(!contact.ready || !contact.active)
}
searchButton()
- toggleNtfsButton(chat)
+ ToggleNtfsButton(chat: chat)
.disabled(!contact.ready || !contact.active)
} label: {
Image(systemName: "ellipsis")
@@ -208,7 +212,7 @@ struct ChatView: View {
}
Menu {
searchButton()
- toggleNtfsButton(chat)
+ ToggleNtfsButton(chat: chat)
} label: {
Image(systemName: "ellipsis")
}
@@ -251,7 +255,8 @@ struct ChatView: View {
}
}
}
- if chatModel.draftChatId == cInfo.id, let draft = chatModel.draft {
+ if chatModel.draftChatId == cInfo.id && !composeState.forwarding,
+ let draft = chatModel.draft {
composeState = draft
}
if chat.chatStats.unreadChat {
@@ -296,7 +301,7 @@ struct ChatView: View {
}
private func voiceWithoutFrame(_ ci: ChatItem) -> Bool {
- ci.content.msgContent?.isVoice == true && ci.content.text.count == 0 && ci.quotedItem == nil
+ ci.content.msgContent?.isVoice == true && ci.content.text.count == 0 && ci.quotedItem == nil && ci.meta.itemForwarded == nil
}
private func chatItemsList() -> some View {
@@ -342,8 +347,8 @@ struct ChatView: View {
.onChange(of: searchText) { _ in
loadChat(chat: chat, search: searchText)
}
- .onChange(of: chatModel.chatId) { _ in
- if let chatId = chatModel.chatId, let c = chatModel.getChat(chatId) {
+ .onChange(of: chatModel.chatId) { chatId in
+ if let chatId, let c = chatModel.getChat(chatId) {
chat = c
showChatInfoSheet = false
loadChat(chat: c)
@@ -539,6 +544,7 @@ struct ChatView: View {
@State private var revealed = false
@State private var showChatItemInfoSheet: Bool = false
@State private var chatItemInfo: ChatItemInfo?
+ @State private var showForwardingSheet: Bool = false
@State private var allowMenu: Bool = true
@@ -587,12 +593,12 @@ struct ChatView: View {
Text(memberNames(member, prevMember, memCount))
.font(.caption)
.foregroundStyle(.secondary)
+ .lineLimit(2)
.padding(.leading, memberImageSize + 14)
.padding(.top, 7)
}
HStack(alignment: .top, spacing: 8) {
- ProfileImage(imageStr: member.memberProfile.image)
- .frame(width: memberImageSize, height: memberImageSize)
+ ProfileImage(imageStr: member.memberProfile.image, size: memberImageSize)
.onTapGesture {
if chatView.membersLoaded {
selectedMember = m.getGroupMember(member.groupMemberId)
@@ -667,7 +673,7 @@ struct ChatView: View {
Button("Delete for me", role: .destructive) {
deleteMessage(.cidmInternal)
}
- if let di = deletingItem, di.meta.editable && !di.localNote {
+ if let di = deletingItem, di.meta.deletable && !di.localNote {
Button(broadcastDeleteButtonText, role: .destructive) {
deleteMessage(.cidmBroadcast)
}
@@ -693,6 +699,14 @@ struct ChatView: View {
}) {
ChatItemInfoView(ci: ci, chatItemInfo: $chatItemInfo)
}
+ .sheet(isPresented: $showForwardingSheet) {
+ if #available(iOS 16.0, *) {
+ ChatItemForwardingView(ci: ci, fromChatInfo: chat.chatInfo, composeState: $composeState)
+ .presentationDetents([.fraction(0.8)])
+ } else {
+ ChatItemForwardingView(ci: ci, fromChatInfo: chat.chatInfo, composeState: $composeState)
+ }
+ }
}
private func showMemberImage(_ member: GroupMember, _ prevItem: ChatItem?) -> Bool {
@@ -771,10 +785,17 @@ struct ChatView: View {
} else {
menu.append(saveFileAction(fileSource))
}
+ } else if let file = ci.file, case .rcvInvitation = file.fileStatus, fileSizeValid(file) {
+ menu.append(downloadFileAction(file))
}
if ci.meta.editable && !mc.isVoice && !live {
menu.append(editAction(ci))
}
+ if ci.meta.itemDeleted == nil
+ && (ci.file == nil || (fileSource != nil && fileExists))
+ && !ci.isLiveDummy && !live {
+ menu.append(forwardUIAction(ci))
+ }
if !ci.isLiveDummy {
menu.append(viewInfoUIAction(ci))
}
@@ -807,6 +828,9 @@ struct ChatView: View {
menu.append(deleteUIAction(ci))
} else if ci.mergeCategory != nil && ((range?.count ?? 0) > 1 || revealed) {
menu.append(revealed ? shrinkUIAction() : expandUIAction())
+ menu.append(deleteUIAction(ci))
+ } else if ci.showLocalDelete {
+ menu.append(deleteUIAction(ci))
}
return menu
}
@@ -826,6 +850,15 @@ struct ChatView: View {
}
}
+ private func forwardUIAction(_ ci: ChatItem) -> UIAction {
+ UIAction(
+ title: NSLocalizedString("Forward", comment: "chat item action"),
+ image: UIImage(systemName: "arrowshape.turn.up.forward")
+ ) { _ in
+ showForwardingSheet = true
+ }
+ }
+
private func reactionUIMenuPreiOS16(_ rs: [UIAction]) -> UIMenu {
UIMenu(
title: NSLocalizedString("React…", comment: "chat item menu"),
@@ -923,7 +956,21 @@ struct ChatView: View {
saveCryptoFile(fileSource)
}
}
-
+
+ private func downloadFileAction(_ file: CIFile) -> UIAction {
+ UIAction(
+ title: NSLocalizedString("Download", comment: "chat item action"),
+ image: UIImage(systemName: "arrow.down.doc")
+ ) { _ in
+ Task {
+ logger.debug("ChatView downloadFileAction, in Task")
+ if let user = m.currentUser {
+ await receiveFile(user: user, fileId: file.fileId)
+ }
+ }
+ }
+ }
+
private func editAction(_ ci: ChatItem) -> UIAction {
UIAction(
title: NSLocalizedString("Edit", comment: "chat item action"),
@@ -996,7 +1043,7 @@ struct ChatView: View {
image: UIImage(systemName: "trash"),
attributes: [.destructive]
) { _ in
- if !revealed && ci.meta.itemDeleted != nil,
+ if !revealed,
let currIndex = m.getChatItemIndex(ci),
let ciCategory = ci.mergeCategory {
let (prevHidden, _) = m.getPrevShownChatItem(currIndex, ciCategory)
@@ -1172,14 +1219,18 @@ struct ChatView: View {
}
}
-@ViewBuilder func toggleNtfsButton(_ chat: Chat) -> some View {
- Button {
- toggleNotifications(chat, enableNtfs: !chat.chatInfo.ntfsEnabled)
- } label: {
- if chat.chatInfo.ntfsEnabled {
- Label("Mute", systemImage: "speaker.slash")
- } else {
- Label("Unmute", systemImage: "speaker.wave.2")
+struct ToggleNtfsButton: View {
+ @ObservedObject var chat: Chat
+
+ var body: some View {
+ Button {
+ toggleNotifications(chat, enableNtfs: !chat.chatInfo.ntfsEnabled)
+ } label: {
+ if chat.chatInfo.ntfsEnabled {
+ Label("Mute", systemImage: "speaker.slash")
+ } else {
+ Label("Unmute", systemImage: "speaker.wave.2")
+ }
}
}
}
diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift
index 604e0a276d..6cf9df782b 100644
--- a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift
+++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift
@@ -23,6 +23,7 @@ enum ComposeContextItem {
case noContextItem
case quotedItem(chatItem: ChatItem)
case editingItem(chatItem: ChatItem)
+ case forwardingItem(chatItem: ChatItem, fromChatInfo: ChatInfo)
}
enum VoiceMessageRecordingState {
@@ -72,6 +73,13 @@ struct ComposeState {
}
}
+ init(forwardingItem: ChatItem, fromChatInfo: ChatInfo) {
+ self.message = ""
+ self.preview = .noPreview
+ self.contextItem = .forwardingItem(chatItem: forwardingItem, fromChatInfo: fromChatInfo)
+ self.voiceMessageRecordingState = .noRecording
+ }
+
func copy(
message: String? = nil,
liveMessage: LiveMessage? = nil,
@@ -102,12 +110,19 @@ struct ComposeState {
}
}
+ var forwarding: Bool {
+ switch contextItem {
+ case .forwardingItem: return true
+ default: return false
+ }
+ }
+
var sendEnabled: Bool {
switch preview {
case let .mediaPreviews(media): return !media.isEmpty
case .voicePreview: return voiceMessageRecordingState == .finished
case .filePreview: return true
- default: return !message.isEmpty || liveMessage != nil
+ default: return !message.isEmpty || forwarding || liveMessage != nil
}
}
@@ -153,7 +168,7 @@ struct ComposeState {
}
var attachmentDisabled: Bool {
- if editing || liveMessage != nil || inProgress { return true }
+ if editing || forwarding || liveMessage != nil || inProgress { return true }
switch preview {
case .noPreview: return false
case .linkPreview: return false
@@ -161,6 +176,16 @@ struct ComposeState {
}
}
+ var attachmentPreview: Bool {
+ switch preview {
+ case .noPreview: false
+ case .linkPreview: false
+ case let .mediaPreviews(mediaPreviews): !mediaPreviews.isEmpty
+ case .voicePreview: false
+ case .filePreview: true
+ }
+ }
+
var empty: Bool {
message == "" && noPreview
}
@@ -234,6 +259,7 @@ struct ComposeView: View {
@Binding var keyboardVisible: Bool
@State var linkUrl: URL? = nil
+ @State var hasSimplexLink: Bool = false
@State var prevLinkUrl: URL? = nil
@State var pendingLinkUrl: URL? = nil
@State var cancelledLinks: Set = []
@@ -260,6 +286,16 @@ struct ComposeView: View {
if chat.chatInfo.contact?.nextSendGrpInv ?? false {
ContextInvitingContactMemberView()
}
+ let simplexLinkProhibited = hasSimplexLink && !chat.groupFeatureEnabled(.simplexLinks)
+ let fileProhibited = composeState.attachmentPreview && !chat.groupFeatureEnabled(.files)
+ let voiceProhibited = composeState.voicePreview && !chat.chatInfo.featureEnabled(.voice)
+ if simplexLinkProhibited {
+ msgNotAllowedView("SimpleX links not allowed", icon: "link")
+ } else if fileProhibited {
+ msgNotAllowedView("Files and media not allowed", icon: "doc")
+ } else if voiceProhibited {
+ msgNotAllowedView("Voice messages not allowed", icon: "mic")
+ }
contextItemView()
switch (composeState.editing, composeState.preview) {
case (true, .filePreview): EmptyView()
@@ -278,7 +314,7 @@ struct ComposeView: View {
.padding(.bottom, 12)
.padding(.leading, 12)
if case let .group(g) = chat.chatInfo,
- !g.fullGroupPreferences.files.on {
+ !g.fullGroupPreferences.files.on(for: g.membership) {
b.disabled(true).onTapGesture {
AlertManager.shared.showAlertMsg(
title: "Files and media prohibited!",
@@ -303,6 +339,7 @@ struct ComposeView: View {
},
nextSendGrpInv: chat.chatInfo.contact?.nextSendGrpInv ?? false,
voiceMessageAllowed: chat.chatInfo.featureEnabled(.voice),
+ disableSendButton: simplexLinkProhibited || fileProhibited || voiceProhibited,
showEnableVoiceMessagesAlert: chat.chatInfo.showEnableVoiceMessagesAlert,
startVoiceMessageRecording: {
Task {
@@ -337,13 +374,18 @@ struct ComposeView: View {
}
}
}
- .onChange(of: composeState.message) { _ in
+ .onChange(of: composeState.message) { msg in
if composeState.linkPreviewAllowed {
- if composeState.message.count > 0 {
- showLinkPreview(composeState.message)
+ if msg.count > 0 {
+ showLinkPreview(msg)
} else {
resetLinkPreview()
+ hasSimplexLink = false
}
+ } else if msg.count > 0 && !chat.groupFeatureEnabled(.simplexLinks) {
+ (_, hasSimplexLink) = parseMessage(msg)
+ } else {
+ hasSimplexLink = false
}
}
.onChange(of: chat.userCanSend) { canSend in
@@ -610,6 +652,18 @@ struct ComposeView: View {
}
}
+ private func msgNotAllowedView(_ reason: LocalizedStringKey, icon: String) -> some View {
+ HStack {
+ Image(systemName: icon).foregroundColor(.secondary)
+ Text(reason).italic()
+ }
+ .padding(12)
+ .frame(minHeight: 50)
+ .frame(maxWidth: .infinity, alignment: .leading)
+ .background(Color(uiColor: .tertiarySystemGroupedBackground))
+ .padding(.top, 8)
+ }
+
@ViewBuilder private func contextItemView() -> some View {
switch composeState.contextItem {
case .noContextItem:
@@ -628,6 +682,14 @@ struct ComposeView: View {
contextIcon: "pencil",
cancelContextItem: { clearState() }
)
+ case let .forwardingItem(chatItem: forwardedItem, _):
+ ContextItemView(
+ chat: chat,
+ contextItem: forwardedItem,
+ contextIcon: "arrowshape.turn.up.forward",
+ cancelContextItem: { composeState = composeState.copy(contextItem: .noContextItem) },
+ showSender: false
+ )
}
}
@@ -649,6 +711,11 @@ struct ComposeView: View {
}
if chat.chatInfo.contact?.nextSendGrpInv ?? false {
await sendMemberContactInvitation()
+ } else if case let .forwardingItem(ci, fromChatInfo) = composeState.contextItem {
+ sent = await forwardItem(ci, fromChatInfo)
+ if !composeState.message.isEmpty {
+ sent = await send(checkLinkPreview(), quoted: sent?.id, live: false, ttl: nil)
+ }
} else if case let .editingItem(ci) = composeState.contextItem {
sent = await updateMessage(ci, live: live)
} else if let liveMessage = liveMessage, liveMessage.sentMsg != nil {
@@ -694,7 +761,15 @@ struct ComposeView: View {
}
}
}
- await MainActor.run { clearState(live: live) }
+ await MainActor.run {
+ let wasForwarding = composeState.forwarding
+ clearState(live: live)
+ if wasForwarding,
+ chatModel.draftChatId == chat.chatInfo.id,
+ let draft = chatModel.draft {
+ composeState = draft
+ }
+ }
return sent
func sending() async {
@@ -815,10 +890,26 @@ struct ComposeView: View {
return nil
}
+ func forwardItem(_ forwardedItem: ChatItem, _ fromChatInfo: ChatInfo) async -> ChatItem? {
+ if let chatItem = await apiForwardChatItem(
+ toChatType: chat.chatInfo.chatType,
+ toChatId: chat.chatInfo.apiId,
+ fromChatType: fromChatInfo.chatType,
+ fromChatId: fromChatInfo.apiId,
+ itemId: forwardedItem.id
+ ) {
+ await MainActor.run {
+ chatModel.addChatItem(chat.chatInfo, chatItem)
+ }
+ return chatItem
+ }
+ return nil
+ }
+
func checkLinkPreview() -> MsgContent {
switch (composeState.preview) {
case let .linkPreview(linkPreview: linkPreview):
- if let url = parseMessage(msgText),
+ if let url = parseMessage(msgText).url,
let linkPreview = linkPreview,
url == linkPreview.uri {
return .link(text: msgText, preview: linkPreview)
@@ -947,7 +1038,7 @@ struct ComposeView: View {
private func showLinkPreview(_ s: String) {
prevLinkUrl = linkUrl
- linkUrl = parseMessage(s)
+ (linkUrl, hasSimplexLink) = parseMessage(s)
if let url = linkUrl {
if url != composeState.linkPreview?.uri && url != pendingLinkUrl {
pendingLinkUrl = url
@@ -964,13 +1055,17 @@ struct ComposeView: View {
}
}
- private func parseMessage(_ msg: String) -> URL? {
- let parsedMsg = parseSimpleXMarkdown(msg)
- let uri = parsedMsg?.first(where: { ft in
+ private func parseMessage(_ msg: String) -> (url: URL?, hasSimplexLink: Bool) {
+ guard let parsedMsg = parseSimpleXMarkdown(msg) else { return (nil, false) }
+ let url: URL? = if let uri = parsedMsg.first(where: { ft in
ft.format == .uri && !cancelledLinks.contains(ft.text) && !isSimplexLink(ft.text)
- })
- if let uri = uri { return URL(string: uri.text) }
- else { return nil }
+ }) {
+ URL(string: uri.text)
+ } else {
+ nil
+ }
+ let simplexLink = parsedMsg.contains(where: { ft in ft.format?.isSimplexLink ?? false })
+ return (url, simplexLink)
}
private func isSimplexLink(_ link: String) -> Bool {
diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift
index 3eb128cded..2777d8321c 100644
--- a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift
+++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift
@@ -15,6 +15,7 @@ struct ContextItemView: View {
let contextItem: ChatItem
let contextIcon: String
let cancelContextItem: () -> Void
+ var showSender: Bool = true
var body: some View {
HStack {
@@ -23,7 +24,7 @@ struct ContextItemView: View {
.aspectRatio(contentMode: .fit)
.frame(width: 16, height: 16)
.foregroundColor(.secondary)
- if let sender = contextItem.memberDisplayName {
+ if showSender, let sender = contextItem.memberDisplayName {
VStack(alignment: .leading, spacing: 4) {
Text(sender).font(.caption).foregroundColor(.secondary)
msgContentView(lines: 2)
@@ -48,14 +49,26 @@ struct ContextItemView: View {
}
private func msgContentView(lines: Int) -> some View {
- MsgContentView(
- chat: chat,
- text: contextItem.text,
- formattedText: contextItem.formattedText,
- showSecrets: false
- )
- .multilineTextAlignment(isRightToLeft(contextItem.text) ? .trailing : .leading)
- .lineLimit(lines)
+ contextMsgPreview()
+ .multilineTextAlignment(isRightToLeft(contextItem.text) ? .trailing : .leading)
+ .lineLimit(lines)
+ }
+
+ private func contextMsgPreview() -> Text {
+ return attachment() + messageText(contextItem.text, contextItem.formattedText, nil, preview: true, showSecrets: false)
+
+ func attachment() -> Text {
+ switch contextItem.content.msgContent {
+ case .file: return image("doc.fill")
+ case .image: return image("photo")
+ case .voice: return image("play.fill")
+ default: return Text("")
+ }
+ }
+
+ func image(_ s: String) -> Text {
+ Text(Image(systemName: s)).foregroundColor(Color(uiColor: .tertiaryLabel)) + Text(" ")
+ }
}
}
diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift
index 3eead5b0af..f2c7221835 100644
--- a/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift
+++ b/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift
@@ -16,7 +16,6 @@ struct NativeTextEditor: UIViewRepresentable {
@Binding var disableEditing: Bool
@Binding var height: CGFloat
@Binding var focused: Bool
- let alignment: TextAlignment
let onImagesAdded: ([UploadContent]) -> Void
private let minHeight: CGFloat = 37
@@ -30,13 +29,16 @@ struct NativeTextEditor: UIViewRepresentable {
func makeUIView(context: Context) -> UITextView {
let field = CustomUITextField(height: _height)
field.text = text
- field.textAlignment = alignment == .leading ? .left : .right
+ field.textAlignment = alignment(text)
field.autocapitalizationType = .sentences
field.setOnTextChangedListener { newText, images in
if !disableEditing {
- // Speed up the process of updating layout, reduce jumping content on screen
- if !isShortEmoji(newText) { updateHeight(field) }
text = newText
+ field.textAlignment = alignment(text)
+ updateFont(field)
+ // Speed up the process of updating layout, reduce jumping content on screen
+ updateHeight(field)
+ self.height = field.frame.size.height
} else {
field.text = text
}
@@ -53,10 +55,12 @@ struct NativeTextEditor: UIViewRepresentable {
}
func updateUIView(_ field: UITextView, context: Context) {
- field.text = text
- field.textAlignment = alignment == .leading ? .left : .right
- updateFont(field)
- updateHeight(field)
+ if field.markedTextRange == nil && field.text != text {
+ field.text = text
+ field.textAlignment = alignment(text)
+ updateFont(field)
+ updateHeight(field)
+ }
}
private func updateHeight(_ field: UITextView) {
@@ -73,12 +77,19 @@ struct NativeTextEditor: UIViewRepresentable {
}
private func updateFont(_ field: UITextView) {
- field.font = isShortEmoji(field.text)
+ let newFont = isShortEmoji(field.text)
? (field.text.count < 4 ? largeEmojiUIFont : mediumEmojiUIFont)
: UIFont.preferredFont(forTextStyle: .body)
+ if field.font != newFont {
+ field.font = newFont
+ }
}
}
+private func alignment(_ text: String) -> NSTextAlignment {
+ isRightToLeft(text) ? .right : .left
+}
+
private class CustomUITextField: UITextView, UITextViewDelegate {
var height: Binding
var newHeight: CGFloat = 0
@@ -205,7 +216,6 @@ struct NativeTextEditor_Previews: PreviewProvider{
disableEditing: Binding.constant(false),
height: Binding.constant(100),
focused: Binding.constant(false),
- alignment: TextAlignment.leading,
onImagesAdded: { _ in }
)
.fixedSize(horizontal: false, vertical: true)
diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift
index 8f7b23c888..8b528a201c 100644
--- a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift
+++ b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift
@@ -20,6 +20,7 @@ struct SendMessageView: View {
var nextSendGrpInv: Bool = false
var showVoiceMessageButton: Bool = true
var voiceMessageAllowed: Bool = true
+ var disableSendButton = false
var showEnableVoiceMessagesAlert: ChatInfo.ShowEnableVoiceMessagesAlert = .other
var startVoiceMessageRecording: (() -> Void)? = nil
var finishVoiceMessageRecording: (() -> Void)? = nil
@@ -53,13 +54,11 @@ struct SendMessageView: View {
.padding(.vertical, 8)
.frame(maxWidth: .infinity)
} else {
- let alignment: TextAlignment = isRightToLeft(composeState.message) ? .trailing : .leading
NativeTextEditor(
text: $composeState.message,
disableEditing: $composeState.inProgress,
height: $teHeight,
focused: $keyboardVisible,
- alignment: alignment,
onImagesAdded: onMediaAdded
)
.allowsTightening(false)
@@ -109,6 +108,7 @@ struct SendMessageView: View {
} else if showVoiceMessageButton
&& composeState.message.isEmpty
&& !composeState.editing
+ && !composeState.forwarding
&& composeState.liveMessage == nil
&& ((composeState.noPreview && vmrs == .noRecording)
|| (vmrs == .recording && holdingVMR)) {
@@ -184,7 +184,8 @@ struct SendMessageView: View {
!composeState.sendEnabled ||
composeState.inProgress ||
(!voiceMessageAllowed && composeState.voicePreview) ||
- composeState.endLiveDisabled
+ composeState.endLiveDisabled ||
+ disableSendButton
)
.frame(width: 29, height: 29)
.contextMenu{
@@ -223,7 +224,8 @@ struct SendMessageView: View {
@ViewBuilder private func sendButtonContextMenuItems() -> some View {
if composeState.liveMessage == nil,
- !composeState.editing {
+ !composeState.editing,
+ !composeState.forwarding {
if case .noContextItem = composeState.contextItem,
!composeState.voicePreview,
let send = sendLiveMessage,
diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift
index b89c006c61..ed2afb91b3 100644
--- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift
@@ -194,8 +194,7 @@ struct AddGroupMembersViewCommon: View {
}
} label: {
HStack{
- ProfileImage(imageStr: contact.image)
- .frame(width: 30, height: 30)
+ ProfileImage(imageStr: contact.image, size: 30)
.padding(.trailing, 2)
Text(ChatInfo.direct(contact: contact).chatViewName)
.foregroundColor(prohibitedToInviteIncognito ? .secondary : .primary)
diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift
index 88b36077b4..c22f3f0fed 100644
--- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift
@@ -62,7 +62,7 @@ struct GroupChatInfoView: View {
NavigationView {
let members = chatModel.groupMembers
.filter { m in let status = m.wrapped.memberStatus; return status != .memLeft && status != .memRemoved }
- .sorted { $0.displayName.lowercased() < $1.displayName.lowercased() }
+ .sorted { $0.wrapped.memberRole > $1.wrapped.memberRole }
List {
groupInfoHeader()
@@ -172,8 +172,7 @@ struct GroupChatInfoView: View {
private func groupInfoHeader() -> some View {
VStack {
let cInfo = chat.chatInfo
- ChatInfoImage(chat: chat, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 192, height: 192)
+ ChatInfoImage(chat: chat, size: 192, color: Color(uiColor: .tertiarySystemFill))
.padding(.top, 12)
.padding()
Text(cInfo.displayName)
@@ -217,8 +216,7 @@ struct GroupChatInfoView: View {
var body: some View {
let member = groupMember.wrapped
let v = HStack{
- ProfileImage(imageStr: member.image)
- .frame(width: 38, height: 38)
+ ProfileImage(imageStr: member.image, size: 38)
.padding(.trailing, 2)
// TODO server connection status
VStack(alignment: .leading) {
diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift
index 999617dde7..a24608b7e7 100644
--- a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift
@@ -83,7 +83,7 @@ struct GroupMemberInfoView: View {
Section {
if let contactId = member.memberContactId, let chat = knownDirectChat(contactId) {
knownDirectChatButton(chat)
- } else if groupInfo.fullGroupPreferences.directMessages.on {
+ } else if groupInfo.fullGroupPreferences.directMessages.on(for: groupInfo.membership) {
if let contactId = member.memberContactId {
newDirectChatButton(contactId)
} else if member.activeConn?.peerChatVRange.isCompatibleRange(CREATE_MEMBER_CONTACT_VRANGE) ?? false {
@@ -110,7 +110,7 @@ struct GroupMemberInfoView: View {
Label("Share address", systemImage: "square.and.arrow.up")
}
if let contactId = member.memberContactId {
- if knownDirectChat(contactId) == nil && !groupInfo.fullGroupPreferences.directMessages.on {
+ if knownDirectChat(contactId) == nil && !groupInfo.fullGroupPreferences.directMessages.on(for: groupInfo.membership) {
connectViaAddressButton(contactLink)
}
} else {
@@ -305,8 +305,7 @@ struct GroupMemberInfoView: View {
private func groupMemberInfoHeader(_ mem: GroupMember) -> some View {
VStack {
- ProfileImage(imageStr: mem.image, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 192, height: 192)
+ ProfileImage(imageStr: mem.image, size: 192, color: Color(uiColor: .tertiarySystemFill))
.padding(.top, 12)
.padding()
if mem.verified {
diff --git a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift
index 7ab4bf4ece..b4e1992848 100644
--- a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift
@@ -9,6 +9,12 @@
import SwiftUI
import SimpleXChat
+private let featureRoles: [(role: GroupMemberRole?, text: LocalizedStringKey)] = [
+ (nil, "all members"),
+ (.admin, "admins"),
+ (.owner, "owners")
+]
+
struct GroupPreferencesView: View {
@Environment(\.dismiss) var dismiss: DismissAction
@EnvironmentObject var chatModel: ChatModel
@@ -24,10 +30,12 @@ struct GroupPreferencesView: View {
List {
featureSection(.timedMessages, $preferences.timedMessages.enable)
featureSection(.fullDelete, $preferences.fullDelete.enable)
- featureSection(.directMessages, $preferences.directMessages.enable)
+ featureSection(.directMessages, $preferences.directMessages.enable, $preferences.directMessages.role)
featureSection(.reactions, $preferences.reactions.enable)
- featureSection(.voice, $preferences.voice.enable)
- featureSection(.files, $preferences.files.enable)
+ featureSection(.voice, $preferences.voice.enable, $preferences.voice.role)
+ featureSection(.files, $preferences.files.enable, $preferences.files.role)
+ // TODO enable simplexLinks preference in 5.8
+ // featureSection(.simplexLinks, $preferences.simplexLinks.enable, $preferences.simplexLinks.role)
featureSection(.history, $preferences.history.enable)
if groupInfo.canEdit {
@@ -64,7 +72,7 @@ struct GroupPreferencesView: View {
}
}
- private func featureSection(_ feature: GroupFeature, _ enableFeature: Binding) -> some View {
+ private func featureSection(_ feature: GroupFeature, _ enableFeature: Binding, _ enableForRole: Binding? = nil) -> some View {
Section {
let color: Color = enableFeature.wrappedValue == .on ? .green : .secondary
let icon = enableFeature.wrappedValue == .on ? feature.iconFilled : feature.icon
@@ -87,6 +95,16 @@ struct GroupPreferencesView: View {
)
.frame(height: 36)
}
+ if enableFeature.wrappedValue == .on, let enableForRole {
+ Picker("Enabled for", selection: enableForRole) {
+ ForEach(featureRoles, id: \.role) { fr in
+ Text(fr.text)
+ }
+ }
+ .frame(height: 36)
+ // remove in v5.8
+ .disabled(true)
+ }
} else {
settingsRow(icon, color: color) {
infoRow(Text(feature.text), enableFeature.wrappedValue.text)
@@ -94,10 +112,26 @@ struct GroupPreferencesView: View {
if timedOn {
infoRow("Delete after", timeText(preferences.timedMessages.ttl))
}
+ if enableFeature.wrappedValue == .on, let enableForRole {
+ HStack {
+ Text("Enabled for").foregroundColor(.secondary)
+ Spacer()
+ Text(
+ featureRoles.first(where: { fr in fr.role == enableForRole.wrappedValue })?.text
+ ?? "all members"
+ )
+ .foregroundColor(.secondary)
+ }
+ }
}
} footer: {
Text(feature.enableDescription(enableFeature.wrappedValue, groupInfo.canEdit))
}
+ .onChange(of: enableFeature.wrappedValue) { enabled in
+ if case .off = enabled {
+ enableForRole?.wrappedValue = nil
+ }
+ }
}
private func savePreferences() {
diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift
index 7fbc1e4ac8..efe254323e 100644
--- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift
@@ -92,7 +92,7 @@ struct ChatListNavLink: View {
.swipeActions(edge: .leading, allowsFullSwipe: true) {
markReadButton()
toggleFavoriteButton()
- toggleNtfsButton(chat)
+ ToggleNtfsButton(chat: chat)
}
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
if !chat.chatItems.isEmpty {
@@ -181,7 +181,7 @@ struct ChatListNavLink: View {
.swipeActions(edge: .leading, allowsFullSwipe: true) {
markReadButton()
toggleFavoriteButton()
- toggleNtfsButton(chat)
+ ToggleNtfsButton(chat: chat)
}
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
if !chat.chatItems.isEmpty {
diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift
index 38aabdc21d..6bf63bb2e3 100644
--- a/apps/ios/Shared/Views/ChatList/ChatListView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift
@@ -92,8 +92,7 @@ struct ChatListView: View {
ToolbarItem(placement: .navigationBarLeading) {
let user = chatModel.currentUser ?? User.sampleData
ZStack(alignment: .topTrailing) {
- ProfileImage(imageStr: user.image, color: Color(uiColor: .quaternaryLabel))
- .frame(width: 32, height: 32)
+ ProfileImage(imageStr: user.image, size: 32, color: Color(uiColor: .quaternaryLabel))
.padding(.trailing, 4)
let allRead = chatModel.users
.filter { u in !u.user.activeUser && !u.user.hidden }
diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
index 8bfc8fec03..fe8fd8b28e 100644
--- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
@@ -23,8 +23,7 @@ struct ChatPreviewView: View {
let cItem = chat.chatItems.last
return HStack(spacing: 8) {
ZStack(alignment: .bottomTrailing) {
- ChatInfoImage(chat: chat)
- .frame(width: 63, height: 63)
+ ChatInfoImage(chat: chat, size: 63)
chatPreviewImageOverlayIcon()
.padding([.bottom, .trailing], 1)
}
diff --git a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift
index c5c062a6ec..dacf51a5e8 100644
--- a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift
+++ b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift
@@ -16,8 +16,7 @@ struct ContactRequestView: View {
var body: some View {
HStack(spacing: 8) {
- ChatInfoImage(chat: chat)
- .frame(width: 63, height: 63)
+ ChatInfoImage(chat: chat, size: 63)
.padding(.leading, 4)
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .top) {
diff --git a/apps/ios/Shared/Views/ChatList/UserPicker.swift b/apps/ios/Shared/Views/ChatList/UserPicker.swift
index 922fc84e53..a615f9c118 100644
--- a/apps/ios/Shared/Views/ChatList/UserPicker.swift
+++ b/apps/ios/Shared/Views/ChatList/UserPicker.swift
@@ -127,8 +127,7 @@ struct UserPicker: View {
}
}, label: {
HStack(spacing: 0) {
- ProfileImage(imageStr: user.image, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 44, height: 44)
+ ProfileImage(imageStr: user.image, size: 44, color: Color(uiColor: .tertiarySystemFill))
.padding(.trailing, 12)
Text(user.chatViewName)
.fontWeight(user.activeUser ? .medium : .regular)
diff --git a/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift b/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift
index e253cdd72c..0180b066ab 100644
--- a/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift
+++ b/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift
@@ -12,6 +12,7 @@ import SimpleXChat
struct ChatInfoImage: View {
@Environment(\.colorScheme) var colorScheme
@ObservedObject var chat: Chat
+ var size: CGFloat
var color = Color(uiColor: .tertiarySystemGroupedBackground)
var body: some View {
@@ -28,6 +29,7 @@ struct ChatInfoImage: View {
return ProfileImage(
imageStr: chat.chatInfo.image,
iconName: iconName,
+ size: size,
color: iconColor
)
}
@@ -36,8 +38,9 @@ struct ChatInfoImage: View {
struct ChatInfoImage_Previews: PreviewProvider {
static var previews: some View {
ChatInfoImage(
- chat: Chat(chatInfo: ChatInfo.sampleData.direct, chatItems: [])
- , color: Color(red: 0.9, green: 0.9, blue: 0.9)
+ chat: Chat(chatInfo: ChatInfo.sampleData.direct, chatItems: []),
+ size: 63,
+ color: Color(red: 0.9, green: 0.9, blue: 0.9)
)
.previewLayout(.fixed(width: 63, height: 63))
}
diff --git a/apps/ios/Shared/Views/Helpers/ProfileImage.swift b/apps/ios/Shared/Views/Helpers/ProfileImage.swift
index cc4f09ae3b..6b8439504a 100644
--- a/apps/ios/Shared/Views/Helpers/ProfileImage.swift
+++ b/apps/ios/Shared/Views/Helpers/ProfileImage.swift
@@ -9,29 +9,51 @@
import SwiftUI
import SimpleXChat
+let defaultProfileImageCorner = 22.5
+
struct ProfileImage: View {
var imageStr: String? = nil
var iconName: String = "person.crop.circle.fill"
+ var size: CGFloat
var color = Color(uiColor: .tertiarySystemGroupedBackground)
-
+ @AppStorage(DEFAULT_PROFILE_IMAGE_CORNER_RADIUS) private var radius = defaultProfileImageCorner
+
var body: some View {
if let image = imageStr,
let data = Data(base64Encoded: dropImagePrefix(image)),
let uiImage = UIImage(data: data) {
- Image(uiImage: uiImage)
- .resizable()
- .clipShape(Circle())
+ clipProfileImage(Image(uiImage: uiImage), size: size, radius: radius)
} else {
Image(systemName: iconName)
.resizable()
.foregroundColor(color)
+ .frame(width: size, height: size)
}
}
}
+private let squareToCircleRatio = 0.935
+
+private let radiusFactor = (1 - squareToCircleRatio) / 50
+
+@ViewBuilder func clipProfileImage(_ img: Image, size: CGFloat, radius: Double) -> some View {
+ let v = img.resizable()
+ if radius >= 50 {
+ v.frame(width: size, height: size).clipShape(Circle())
+ } else if radius <= 0 {
+ let sz = size * squareToCircleRatio
+ v.frame(width: sz, height: sz).padding((size - sz) / 2)
+ } else {
+ let sz = size * (squareToCircleRatio + radius * radiusFactor)
+ v.frame(width: sz, height: sz)
+ .clipShape(RoundedRectangle(cornerRadius: sz * radius / 100, style: .continuous))
+ .padding((size - sz) / 2)
+ }
+}
+
struct ProfileImage_Previews: PreviewProvider {
static var previews: some View {
- ProfileImage(imageStr: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAKHGlDQ1BJQ0MgUHJvZmlsZQAASImFVgdUVNcWve9Nb7QZeu9NehtAem/Sq6gMQ28OQxWxgAQjEFFEREARNFQFg1KjiIhiIQgoYA9IEFBisCAq6OQNJNH4//r/zDpz9ttzz7n73ffWmg0A6QCDxYqD+QCIT0hmezlYywQEBsngngEYCAIy0AC6DGYSy8rDwxUg8Xf9d7wbAxC33tHgzvrP3/9nCISFJzEBgIIRTGey2MkILkawT1oyi4tnEUxjI6IQvMLFkauYqxjQQtewwuoaHy8bBNMBwJMZDHYkAERbhJdJZUYic4hhCNZOCItOQDB3vjkzioFwxLsIXhcRl5IOAImrRzs+fivCk7QRrIL0shAcwNUW+tX8yH/tFfrPXgxG5D84Pi6F+dc9ck+HHJ7g641UMSQlQATQBHEgBaQDGcACbLAVYaIRJhx5Dv+9j77aZ4OsZIFtSEc0iARRIBnpt/9qlvfqpGSQBhjImnCEcUU+NtxnujZy4fbqVEiU/wuXdQyA9S0cDqfzC+e2F4DzyLkSB79wyi0A8KoBcL2GmcJOXePQ3C8MIAJeQAOiQArIAxXuWwMMgSmwBHbAGbgDHxAINgMmojceUZUGMkEWyAX54AA4DMpAJTgJ6sAZ0ALawQVwGVwDt8AQGAUPwQSYBi/AAngHliEIwkEUiAqJQtKQIqQO6UJ0yByyg1whLygQCoEioQQoBcqE9kD5UBFUBlVB9dBPUCd0GboBDUP3oUloDnoNfYRRMBmmwZKwEqwF02Er2AX2gTfBkXAinAHnwPvhUrgaPg23wZfhW/AoPAG/gBdRAEVCCaFkURooOsoG5Y4KQkWg2KidqDxUCaoa1YTqQvWj7qAmUPOoD2gsmoqWQWugTdGOaF80E52I3okuQJeh69Bt6D70HfQkegH9GUPBSGDUMSYYJ0wAJhKThsnFlGBqMK2Yq5hRzDTmHRaLFcIqY42wjthAbAx2O7YAewzbjO3BDmOnsIs4HE4Up44zw7njGLhkXC7uKO407hJuBDeNe48n4aXxunh7fBA+AZ+NL8E34LvxI/gZ/DKBj6BIMCG4E8II2wiFhFOELsJtwjRhmchPVCaaEX2IMcQsYimxiXiV+Ij4hkQiyZGMSZ6kaNJuUinpLOk6aZL0gSxAViPbkIPJKeT95FpyD/k++Q2FQlGiWFKCKMmU/ZR6yhXKE8p7HiqPJo8TTxjPLp5ynjaeEZ6XvAReRV4r3s28GbwlvOd4b/PO8xH4lPhs+Bh8O/nK+Tr5xvkW+an8Ovzu/PH8BfwN/Df4ZwVwAkoCdgJhAjkCJwWuCExRUVR5qg2VSd1DPUW9Sp2mYWnKNCdaDC2fdoY2SFsQFBDUF/QTTBcsF7woOCGEElISchKKEyoUahEaE/ooLClsJRwuvE+4SXhEeElEXMRSJFwkT6RZZFTko6iMqJ1orOhB0XbRx2JoMTUxT7E0seNiV8XmxWnipuJM8TzxFvEHErCEmoSXxHaJkxIDEouSUpIOkizJo5JXJOelhKQspWKkiqW6peakqdLm0tHSxdKXpJ/LCMpYycTJlMr0ySzISsg6yqbIVskOyi7LKcv5ymXLNcs9lifK0+Uj5Ivle+UXFKQV3BQyFRoVHigSFOmKUYpHFPsVl5SUlfyV9iq1K80qiyg7KWcoNyo/UqGoWKgkqlSr3FXFqtJVY1WPqQ6pwWoGalFq5Wq31WF1Q/Vo9WPqw+sw64zXJayrXjeuQdaw0kjVaNSY1BTSdNXM1mzXfKmloBWkdVCrX+uztoF2nPYp7Yc6AjrOOtk6XTqvddV0mbrlunf1KHr2erv0OvRe6avrh+sf179nQDVwM9hr0GvwydDIkG3YZDhnpGAUYlRhNE6n0T3oBfTrxhhja+NdxheMP5gYmiSbtJj8YaphGmvaYDq7Xnl9+PpT66fM5MwYZlVmE+Yy5iHmJ8wnLGQtGBbVFk8t5S3DLGssZ6xUrWKsTlu9tNa2Zlu3Wi/ZmNjssOmxRdk62ObZDtoJ2Pnaldk9sZezj7RvtF9wMHDY7tDjiHF0cTzoOO4k6cR0qndacDZy3uHc50J28XYpc3nqqubKdu1yg92c3Q65PdqguCFhQ7s7cHdyP+T+2EPZI9HjZ0+sp4dnueczLx2vTK9+b6r3Fu8G73c+1j6FPg99VXxTfHv9eP2C/er9lvxt/Yv8JwK0AnYE3AoUC4wO7AjCBfkF1QQtbrTbeHjjdLBBcG7w2CblTembbmwW2xy3+eIW3i2MLedCMCH+IQ0hKwx3RjVjMdQptCJ0gWnDPMJ8EWYZVhw2F24WXhQ+E2EWURQxG2kWeShyLsoiqiRqPtomuiz6VYxjTGXMUqx7bG0sJ84/rjkeHx8S35kgkBCb0LdVamv61mGWOiuXNZFokng4cYHtwq5JgpI2JXUk05A/0oEUlZTvUiZTzVPLU9+n+aWdS+dPT0gf2Ka2bd+2mQz7jB+3o7czt/dmymZmZU7usNpRtRPaGbqzd5f8rpxd07sddtdlEbNis37J1s4uyn67x39PV45kzu6cqe8cvmvM5cll547vNd1b+T36++jvB/fp7Tu673NeWN7NfO38kvyVAmbBzR90fij9gbM/Yv9goWHh8QPYAwkHxg5aHKwr4i/KKJo65HaorVimOK/47eEth2+U6JdUHiEeSTkyUepa2nFU4eiBoytlUWWj5dblzRUSFfsqlo6FHRs5bnm8qVKyMr/y44noE/eqHKraqpWqS05iT6aefHbK71T/j/Qf62vEavJrPtUm1E7UedX11RvV1zdINBQ2wo0pjXOng08PnbE909Gk0VTVLNScfxacTTn7/KeQn8ZaXFp6z9HPNZ1XPF/RSm3Na4PatrUttEe1T3QEdgx3Onf2dpl2tf6s+XPtBdkL5RcFLxZ2E7tzujmXMi4t9rB65i9HXp7q3dL78ErAlbt9nn2DV12uXr9mf+1Kv1X/petm1y/cMLnReZN+s/2W4a22AYOB1l8MfmkdNBxsu210u2PIeKhreP1w94jFyOU7tneu3XW6e2t0w+jwmO/YvfHg8Yl7Yfdm78fdf/Ug9cHyw92PMI/yHvM9Lnki8aT6V9VfmycMJy5O2k4OPPV++nCKOfXit6TfVqZznlGelcxIz9TP6s5emLOfG3q+8fn0C9aL5fnc3/l/r3ip8vL8H5Z/DCwELEy/Yr/ivC54I/qm9q3+295Fj8Un7+LfLS/lvRd9X/eB/qH/o//HmeW0FdxK6SfVT12fXT4/4sRzOCwGm7FqBVBIwhERALyuBYASCAB1CPEPG9f8119+BvrK2fyNwVndL5jhvubRVsMQgCakeCFp04OsQ1LJEgAe5NodqT6WANbT+yf/iqQIPd21PXgaAcDJcjivtwJAQHLFgcNZ9uBwPlUgYhHf1z37f7V9g9e8ITewiP88wfWIYET6HPg21nzjV2fybQVcxfrg2/onng/F50lD/ccAAAA4ZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAABigAwAEAAAAAQAAABgAAAAAwf1XlwAAAaNJREFUSA3FlT1LA0EQQBN/gYUYRTksJZVgEbCR/D+7QMr8ABtttBBCsLGzsLG2sxaxED/ie4d77u0dyaE5HHjczn7MzO7M7nU6/yXz+bwLhzCCjTQO+rZhDH3opuNLdRYN4RHe4RIKJ7R34Ro+4AEGSw2mE1iUwT18gpI74WvkGlccu4XNdH0jnYU7cAUacidn37qR23cOxc4aGU0nYUAn7iSWEHkz46w0ocdQu1X6B/AMQZ5o7KfBqNOfwRH8JB7FajGhnmcpKvQe3MEbvILiDm5gPXaCHnZr4vvFGMoEKudKn8YvQIOOe+YzCPop7dwJ3zRfJ7GDuso4YJGRa0yZgg4tUaNXdGrbuZWKKxzYYEJc2xp9AUUjGt8KC2jvgYadF8+10vJyDnNLXwbdiWUZi0fUK01Eoc+AZhCLZVzK4Vq6sDUdz+0dEcbbTTIOJmAyTVhx/WmvrExbv2jtPhWLKodjCtefZiEeZeVZWWSndgwj6fVf3XON8Qwq15++uoqrfYVrow6dGBpCq79ME291jaB0/Q2CPncyht/99MNO/vr9AqW/CGi8sJqbAAAAAElFTkSuQmCC")
+ ProfileImage(imageStr: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAKHGlDQ1BJQ0MgUHJvZmlsZQAASImFVgdUVNcWve9Nb7QZeu9NehtAem/Sq6gMQ28OQxWxgAQjEFFEREARNFQFg1KjiIhiIQgoYA9IEFBisCAq6OQNJNH4//r/zDpz9ttzz7n73ffWmg0A6QCDxYqD+QCIT0hmezlYywQEBsngngEYCAIy0AC6DGYSy8rDwxUg8Xf9d7wbAxC33tHgzvrP3/9nCISFJzEBgIIRTGey2MkILkawT1oyi4tnEUxjI6IQvMLFkauYqxjQQtewwuoaHy8bBNMBwJMZDHYkAERbhJdJZUYic4hhCNZOCItOQDB3vjkzioFwxLsIXhcRl5IOAImrRzs+fivCk7QRrIL0shAcwNUW+tX8yH/tFfrPXgxG5D84Pi6F+dc9ck+HHJ7g641UMSQlQATQBHEgBaQDGcACbLAVYaIRJhx5Dv+9j77aZ4OsZIFtSEc0iARRIBnpt/9qlvfqpGSQBhjImnCEcUU+NtxnujZy4fbqVEiU/wuXdQyA9S0cDqfzC+e2F4DzyLkSB79wyi0A8KoBcL2GmcJOXePQ3C8MIAJeQAOiQArIAxXuWwMMgSmwBHbAGbgDHxAINgMmojceUZUGMkEWyAX54AA4DMpAJTgJ6sAZ0ALawQVwGVwDt8AQGAUPwQSYBi/AAngHliEIwkEUiAqJQtKQIqQO6UJ0yByyg1whLygQCoEioQQoBcqE9kD5UBFUBlVB9dBPUCd0GboBDUP3oUloDnoNfYRRMBmmwZKwEqwF02Er2AX2gTfBkXAinAHnwPvhUrgaPg23wZfhW/AoPAG/gBdRAEVCCaFkURooOsoG5Y4KQkWg2KidqDxUCaoa1YTqQvWj7qAmUPOoD2gsmoqWQWugTdGOaF80E52I3okuQJeh69Bt6D70HfQkegH9GUPBSGDUMSYYJ0wAJhKThsnFlGBqMK2Yq5hRzDTmHRaLFcIqY42wjthAbAx2O7YAewzbjO3BDmOnsIs4HE4Up44zw7njGLhkXC7uKO407hJuBDeNe48n4aXxunh7fBA+AZ+NL8E34LvxI/gZ/DKBj6BIMCG4E8II2wiFhFOELsJtwjRhmchPVCaaEX2IMcQsYimxiXiV+Ij4hkQiyZGMSZ6kaNJuUinpLOk6aZL0gSxAViPbkIPJKeT95FpyD/k++Q2FQlGiWFKCKMmU/ZR6yhXKE8p7HiqPJo8TTxjPLp5ynjaeEZ6XvAReRV4r3s28GbwlvOd4b/PO8xH4lPhs+Bh8O/nK+Tr5xvkW+an8Ovzu/PH8BfwN/Df4ZwVwAkoCdgJhAjkCJwWuCExRUVR5qg2VSd1DPUW9Sp2mYWnKNCdaDC2fdoY2SFsQFBDUF/QTTBcsF7woOCGEElISchKKEyoUahEaE/ooLClsJRwuvE+4SXhEeElEXMRSJFwkT6RZZFTko6iMqJ1orOhB0XbRx2JoMTUxT7E0seNiV8XmxWnipuJM8TzxFvEHErCEmoSXxHaJkxIDEouSUpIOkizJo5JXJOelhKQspWKkiqW6peakqdLm0tHSxdKXpJ/LCMpYycTJlMr0ySzISsg6yqbIVskOyi7LKcv5ymXLNcs9lifK0+Uj5Ivle+UXFKQV3BQyFRoVHigSFOmKUYpHFPsVl5SUlfyV9iq1K80qiyg7KWcoNyo/UqGoWKgkqlSr3FXFqtJVY1WPqQ6pwWoGalFq5Wq31WF1Q/Vo9WPqw+sw64zXJayrXjeuQdaw0kjVaNSY1BTSdNXM1mzXfKmloBWkdVCrX+uztoF2nPYp7Yc6AjrOOtk6XTqvddV0mbrlunf1KHr2erv0OvRe6avrh+sf179nQDVwM9hr0GvwydDIkG3YZDhnpGAUYlRhNE6n0T3oBfTrxhhja+NdxheMP5gYmiSbtJj8YaphGmvaYDq7Xnl9+PpT66fM5MwYZlVmE+Yy5iHmJ8wnLGQtGBbVFk8t5S3DLGssZ6xUrWKsTlu9tNa2Zlu3Wi/ZmNjssOmxRdk62ObZDtoJ2Pnaldk9sZezj7RvtF9wMHDY7tDjiHF0cTzoOO4k6cR0qndacDZy3uHc50J28XYpc3nqqubKdu1yg92c3Q65PdqguCFhQ7s7cHdyP+T+2EPZI9HjZ0+sp4dnueczLx2vTK9+b6r3Fu8G73c+1j6FPg99VXxTfHv9eP2C/er9lvxt/Yv8JwK0AnYE3AoUC4wO7AjCBfkF1QQtbrTbeHjjdLBBcG7w2CblTembbmwW2xy3+eIW3i2MLedCMCH+IQ0hKwx3RjVjMdQptCJ0gWnDPMJ8EWYZVhw2F24WXhQ+E2EWURQxG2kWeShyLsoiqiRqPtomuiz6VYxjTGXMUqx7bG0sJ84/rjkeHx8S35kgkBCb0LdVamv61mGWOiuXNZFokng4cYHtwq5JgpI2JXUk05A/0oEUlZTvUiZTzVPLU9+n+aWdS+dPT0gf2Ka2bd+2mQz7jB+3o7czt/dmymZmZU7usNpRtRPaGbqzd5f8rpxd07sddtdlEbNis37J1s4uyn67x39PV45kzu6cqe8cvmvM5cll547vNd1b+T36++jvB/fp7Tu673NeWN7NfO38kvyVAmbBzR90fij9gbM/Yv9goWHh8QPYAwkHxg5aHKwr4i/KKJo65HaorVimOK/47eEth2+U6JdUHiEeSTkyUepa2nFU4eiBoytlUWWj5dblzRUSFfsqlo6FHRs5bnm8qVKyMr/y44noE/eqHKraqpWqS05iT6aefHbK71T/j/Qf62vEavJrPtUm1E7UedX11RvV1zdINBQ2wo0pjXOng08PnbE909Gk0VTVLNScfxacTTn7/KeQn8ZaXFp6z9HPNZ1XPF/RSm3Na4PatrUttEe1T3QEdgx3Onf2dpl2tf6s+XPtBdkL5RcFLxZ2E7tzujmXMi4t9rB65i9HXp7q3dL78ErAlbt9nn2DV12uXr9mf+1Kv1X/petm1y/cMLnReZN+s/2W4a22AYOB1l8MfmkdNBxsu210u2PIeKhreP1w94jFyOU7tneu3XW6e2t0w+jwmO/YvfHg8Yl7Yfdm78fdf/Ug9cHyw92PMI/yHvM9Lnki8aT6V9VfmycMJy5O2k4OPPV++nCKOfXit6TfVqZznlGelcxIz9TP6s5emLOfG3q+8fn0C9aL5fnc3/l/r3ip8vL8H5Z/DCwELEy/Yr/ivC54I/qm9q3+295Fj8Un7+LfLS/lvRd9X/eB/qH/o//HmeW0FdxK6SfVT12fXT4/4sRzOCwGm7FqBVBIwhERALyuBYASCAB1CPEPG9f8119+BvrK2fyNwVndL5jhvubRVsMQgCakeCFp04OsQ1LJEgAe5NodqT6WANbT+yf/iqQIPd21PXgaAcDJcjivtwJAQHLFgcNZ9uBwPlUgYhHf1z37f7V9g9e8ITewiP88wfWIYET6HPg21nzjV2fybQVcxfrg2/onng/F50lD/ccAAAA4ZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAABigAwAEAAAAAQAAABgAAAAAwf1XlwAAAaNJREFUSA3FlT1LA0EQQBN/gYUYRTksJZVgEbCR/D+7QMr8ABtttBBCsLGzsLG2sxaxED/ie4d77u0dyaE5HHjczn7MzO7M7nU6/yXz+bwLhzCCjTQO+rZhDH3opuNLdRYN4RHe4RIKJ7R34Ro+4AEGSw2mE1iUwT18gpI74WvkGlccu4XNdH0jnYU7cAUacidn37qR23cOxc4aGU0nYUAn7iSWEHkz46w0ocdQu1X6B/AMQZ5o7KfBqNOfwRH8JB7FajGhnmcpKvQe3MEbvILiDm5gPXaCHnZr4vvFGMoEKudKn8YvQIOOe+YzCPop7dwJ3zRfJ7GDuso4YJGRa0yZgg4tUaNXdGrbuZWKKxzYYEJc2xp9AUUjGt8KC2jvgYadF8+10vJyDnNLXwbdiWUZi0fUK01Eoc+AZhCLZVzK4Vq6sDUdz+0dEcbbTTIOJmAyTVhx/WmvrExbv2jtPhWLKodjCtefZiEeZeVZWWSndgwj6fVf3XON8Qwq15++uoqrfYVrow6dGBpCq79ME291jaB0/Q2CPncyht/99MNO/vr9AqW/CGi8sJqbAAAAAElFTkSuQmCC", size: 63)
.previewLayout(.fixed(width: 63, height: 63))
.background(.black)
}
diff --git a/apps/ios/Shared/Views/Migration/MigrateToDevice.swift b/apps/ios/Shared/Views/Migration/MigrateToDevice.swift
index 9afd0dd406..e290537b46 100644
--- a/apps/ios/Shared/Views/Migration/MigrateToDevice.swift
+++ b/apps/ios/Shared/Views/Migration/MigrateToDevice.swift
@@ -448,6 +448,9 @@ struct MigrateToDevice: View {
case .rcvFileError:
alert = .error(title: "Download failed", error: "File was deleted or link is invalid")
migrationState = .downloadFailed(totalBytes: totalBytes, link: link, archivePath: archivePath)
+ case .chatError(_, .error(.noRcvFileUser)):
+ 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)")
}
diff --git a/apps/ios/Shared/Views/NewChat/AddGroupView.swift b/apps/ios/Shared/Views/NewChat/AddGroupView.swift
index 3f3623033e..4b272f4caa 100644
--- a/apps/ios/Shared/Views/NewChat/AddGroupView.swift
+++ b/apps/ios/Shared/Views/NewChat/AddGroupView.swift
@@ -70,9 +70,7 @@ struct AddGroupView: View {
ZStack(alignment: .center) {
ZStack(alignment: .topTrailing) {
- ProfileImage(imageStr: profile.image, color: Color(uiColor: .secondarySystemGroupedBackground))
- .aspectRatio(1, contentMode: .fit)
- .frame(maxWidth: 128, maxHeight: 128)
+ ProfileImage(imageStr: profile.image, size: 128, color: Color(uiColor: .secondarySystemGroupedBackground))
if profile.image != nil {
Button {
profile.image = nil
diff --git a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift
index 73ea5720c6..209c440b16 100644
--- a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift
+++ b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift
@@ -375,6 +375,37 @@ 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.7",
+ post: URL(string: "https://simplex.chat/blog/20240426-simplex-legally-binding-transparency-v5-7-better-user-experience.html"),
+ features: [
+ FeatureDescription(
+ icon: "key",
+ title: "Quantum resistant encryption",
+ description: "Will be enabled in direct chats!"
+ ),
+ FeatureDescription(
+ icon: "arrowshape.turn.up.forward",
+ title: "Forward and save messages",
+ description: "Message source remains private."
+ ),
+ FeatureDescription(
+ icon: "music.note",
+ title: "In-call sounds",
+ description: "When connecting audio and video calls."
+ ),
+ FeatureDescription(
+ icon: "person.crop.square",
+ title: "Shape profile images",
+ description: "Square, circle, or anything in between."
+ ),
+ FeatureDescription(
+ icon: "antenna.radiowaves.left.and.right",
+ title: "Network management",
+ description: "More reliable network connection."
+ )
+ ]
)
]
diff --git a/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift b/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift
index 9da3bac00b..f027127db3 100644
--- a/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift
+++ b/apps/ios/Shared/Views/UserSettings/AdvancedNetworkSettings.swift
@@ -51,9 +51,10 @@ struct AdvancedNetworkSettings: View {
}
.disabled(currentNetCfg == NetCfg.proxyDefaults)
- timeoutSettingPicker("TCP connection timeout", selection: $netCfg.tcpConnectTimeout, values: [7_500000, 10_000000, 15_000000, 20_000000, 30_000000, 45_000000], label: secondsLabel)
+ timeoutSettingPicker("TCP connection timeout", selection: $netCfg.tcpConnectTimeout, values: [10_000000, 15_000000, 20_000000, 25_000000, 35_000000, 50_000000], label: secondsLabel)
timeoutSettingPicker("Protocol timeout", selection: $netCfg.tcpTimeout, values: [5_000000, 7_000000, 10_000000, 15_000000, 20_000000, 30_000000], label: secondsLabel)
- timeoutSettingPicker("Protocol timeout per KB", selection: $netCfg.tcpTimeoutPerKb, values: [15_000, 30_000, 45_000, 60_000, 90_000, 120_000], label: secondsLabel)
+ timeoutSettingPicker("Protocol timeout per KB", selection: $netCfg.tcpTimeoutPerKb, values: [2_500, 5_000, 10_000, 15_000, 20_000, 30_000], label: secondsLabel)
+ intSettingPicker("Receiving concurrency", selection: $netCfg.rcvConcurrency, values: [1, 2, 4, 8, 12, 16, 24], label: "")
timeoutSettingPicker("PING interval", selection: $netCfg.smpPingInterval, values: [120_000000, 300_000000, 600_000000, 1200_000000, 2400_000000, 3600_000000], label: secondsLabel)
intSettingPicker("PING count", selection: $netCfg.smpPingCount, values: [1, 2, 3, 5, 8], label: "")
Toggle("Enable TCP keep-alive", isOn: $enableKeepAlive)
diff --git a/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift b/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift
index 1f648b09dc..b91d2c9369 100644
--- a/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift
+++ b/apps/ios/Shared/Views/UserSettings/AppearanceSettings.swift
@@ -17,11 +17,14 @@ let interfaceStyleNames: [LocalizedStringKey] = ["System", "Light", "Dark"]
let appSettingsURL = URL(string: UIApplication.openSettingsURLString)!
struct AppearanceSettings: View {
+ @EnvironmentObject var m: ChatModel
+ @Environment(\.colorScheme) var colorScheme
@EnvironmentObject var sceneDelegate: SceneDelegate
@State private var iconLightTapped = false
@State private var iconDarkTapped = false
@State private var userInterfaceStyle = getUserInterfaceStyleDefault()
@State private var uiTintColor = getUIAccentColorDefault()
+ @AppStorage(DEFAULT_PROFILE_IMAGE_CORNER_RADIUS) private var profileImageCornerRadius = defaultProfileImageCorner
var body: some View {
VStack{
@@ -44,6 +47,23 @@ struct AppearanceSettings: View {
}
}
+ Section("Profile images") {
+ HStack(spacing: 16) {
+ if let img = m.currentUser?.image, img != "" {
+ ProfileImage(imageStr: img, size: 60)
+ } else {
+ clipProfileImage(Image(colorScheme == .light ? "icon-dark" : "icon-light"), size: 60, radius: profileImageCornerRadius)
+ }
+
+ Slider(
+ value: $profileImageCornerRadius,
+ in: 0...50,
+ step: 2.5
+ )
+ }
+ .foregroundColor(.secondary)
+ }
+
Section {
Picker("Theme", selection: $userInterfaceStyle) {
ForEach(interfaceStyles, id: \.self) { style in
@@ -93,7 +113,7 @@ struct AppearanceSettings: View {
}
._onButtonGesture { tapped.wrappedValue = $0 } perform: {}
.overlay(tapped.wrappedValue ? Color.secondary : Color.clear)
- .cornerRadius(20)
+ .cornerRadius(13.5)
}
}
diff --git a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift
index 9b11c6d0f7..3bbfbfe33e 100644
--- a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift
+++ b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift
@@ -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 {
@@ -43,33 +42,9 @@ struct DeveloperView: View {
} footer: {
(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."))
- }
- }
}
}
}
-
- private func setPQExperimentalEnabled(_ enable: Bool) {
- do {
- try apiSetPQEncryption(enable)
- } catch let error {
- let err = responseError(error)
- logger.error("apiSetPQEncryption \(err)")
- }
- }
}
struct DeveloperView_Previews: PreviewProvider {
diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift
index d721cfad50..a6702b1821 100644
--- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift
+++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers.swift
@@ -24,6 +24,7 @@ private enum NetworkAlert: Identifiable {
}
struct NetworkAndServers: View {
+ @EnvironmentObject var m: ChatModel
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@State private var cfgLoaded = false
@State private var currentNetCfg = NetCfg.defaults
@@ -82,6 +83,14 @@ struct NetworkAndServers: View {
Text("WebRTC ICE servers")
}
}
+
+ Section("Network connection") {
+ HStack {
+ Text(m.networkInfo.networkType.text)
+ Spacer()
+ Image(systemName: "circle.fill").foregroundColor(m.networkInfo.online ? .green : .red)
+ }
+ }
}
}
.onAppear {
diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift
index 1799d8136a..e532448a90 100644
--- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift
+++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift
@@ -45,6 +45,7 @@ let DEFAULT_ACCENT_COLOR_RED = "accentColorRed"
let DEFAULT_ACCENT_COLOR_GREEN = "accentColorGreen"
let DEFAULT_ACCENT_COLOR_BLUE = "accentColorBlue"
let DEFAULT_USER_INTERFACE_STYLE = "userInterfaceStyle"
+let DEFAULT_PROFILE_IMAGE_CORNER_RADIUS = "profileImageCornerRadius"
let DEFAULT_CONNECT_VIA_LINK_TAB = "connectViaLinkTab"
let DEFAULT_LIVE_MESSAGE_ALERT_SHOWN = "liveMessageAlertShown"
let DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE = "showHiddenProfilesNotice"
@@ -87,6 +88,7 @@ let appDefaults: [String: Any] = [
DEFAULT_ACCENT_COLOR_GREEN: 0.533,
DEFAULT_ACCENT_COLOR_BLUE: 1.000,
DEFAULT_USER_INTERFACE_STYLE: 0,
+ DEFAULT_PROFILE_IMAGE_CORNER_RADIUS: defaultProfileImageCorner,
DEFAULT_CONNECT_VIA_LINK_TAB: ConnectViaLinkTab.scan.rawValue,
DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false,
DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE: true,
@@ -425,8 +427,7 @@ struct ProfilePreview: View {
var body: some View {
HStack {
- ProfileImage(imageStr: profileOf.image, color: color)
- .frame(width: 44, height: 44)
+ ProfileImage(imageStr: profileOf.image, size: 44, color: color)
.padding(.trailing, 6)
.padding(.vertical, 6)
VStack(alignment: .leading) {
diff --git a/apps/ios/Shared/Views/UserSettings/UserProfile.swift b/apps/ios/Shared/Views/UserSettings/UserProfile.swift
index e5ec23178d..198fd495bd 100644
--- a/apps/ios/Shared/Views/UserSettings/UserProfile.swift
+++ b/apps/ios/Shared/Views/UserSettings/UserProfile.swift
@@ -188,9 +188,7 @@ struct UserProfile: View {
}
func profileImageView(_ imageStr: String?) -> some View {
- ProfileImage(imageStr: imageStr)
- .aspectRatio(1, contentMode: .fit)
- .frame(maxWidth: 192, maxHeight: 192)
+ ProfileImage(imageStr: imageStr, size: 192)
}
func editImageButton(action: @escaping () -> Void) -> some View {
diff --git a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift
index af3d60c9c0..8c1a3bf4e1 100644
--- a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift
+++ b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift
@@ -309,8 +309,7 @@ struct UserProfilesView: View {
}
} label: {
HStack {
- ProfileImage(imageStr: user.image, color: Color(uiColor: .tertiarySystemFill))
- .frame(width: 44, height: 44)
+ ProfileImage(imageStr: user.image, size: 44, color: Color(uiColor: .tertiarySystemFill))
.padding(.vertical, 4)
.padding(.trailing, 12)
Text(user.chatViewName)
diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
index 0f8bff18ea..3d0bb2bf2c 100644
--- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
+++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff
@@ -109,6 +109,7 @@
%@ downloaded
+ %@ изтеглено
No comment provided by engineer.
@@ -133,6 +134,7 @@
%@ uploaded
+ %@ качено
No comment provided by engineer.
@@ -352,6 +354,7 @@
**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.
@@ -371,6 +374,7 @@
**Warning**: the archive will be removed.
+ **Внимание**: архивът ще бъде изтрит.
No comment provided by engineer.
@@ -739,6 +743,11 @@
Позволи необратимо изтриване на изпратените съобщения. (24 часа)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Разрешаване на изпращане на SimpleX линкове.
+ No comment provided by engineer.
+
Allow to send files and media.
Позволи изпращане на файлове и медия.
@@ -1079,6 +1088,11 @@
Файлът не може да бъде получен
No comment provided by engineer.
+
+ Cellular
+ Мобилна мрежа
+ No comment provided by engineer.
+
Change
Промени
@@ -1197,6 +1211,7 @@
Choose _Migrate from another device_ on the new device and scan QR code.
+ Изберете _Мигриране от друго устройство_ на новото устройство и сканирайте QR кода.
No comment provided by engineer.
@@ -2073,6 +2088,11 @@ This cannot be undone!
Понижи версията и отвори чата
No comment provided by engineer.
+
+ Download
+ Изтегли
+ chat item action
+
Download failed
Неуспешно изтегляне
@@ -2183,6 +2203,11 @@ This cannot be undone!
Активирай kод за достъп за самоунищожение
set passcode view
+
+ Enabled for
+ Активирано за
+ No comment provided by engineer.
+
Encrypt
Криптирай
@@ -2333,11 +2358,6 @@ This cannot be undone!
Грешка при добавяне на член(ове)
No comment provided by engineer.
-
- Error allowing contact PQ encryption
- Грешка при разрешаване на PQ криптиране за контакт
- No comment provided by engineer.
-
Error changing address
Грешка при промяна на адреса
@@ -2708,6 +2728,11 @@ This cannot be undone!
Файловете и медията са забранени в тази група.
No comment provided by engineer.
+
+ Files and media not allowed
+ Файлове и медия не са разрешени
+ No comment provided by engineer.
+
Files and media prohibited!
Файловете и медията са забранени!
@@ -2773,6 +2798,26 @@ This cannot be undone!
За конзолата
No comment provided by engineer.
+
+ Forward
+ Препрати
+ chat item action
+
+
+ Forward and save messages
+ Препращане и запазване на съобщения
+ No comment provided by engineer.
+
+
+ Forwarded
+ Препратено
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Препратено от
+ No comment provided by engineer.
+
Found desktop
Намерено настолно устройство
@@ -2883,6 +2928,11 @@ This cannot be undone!
Членовете на групата могат необратимо да изтриват изпратените съобщения. (24 часа)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ Членовете на групата могат да изпращат SimpleX линкове.
+ No comment provided by engineer.
+
Group members can send direct messages.
Членовете на групата могат да изпращат лични съобщения.
@@ -3123,6 +3173,11 @@ This cannot be undone!
В отговор на
No comment provided by engineer.
+
+ In-call sounds
+ Звуци по време на разговор
+ No comment provided by engineer.
+
Incognito
Инкогнито
@@ -3598,6 +3653,11 @@ This is your link for group %@!
Реакциите на съобщения са забранени в тази група.
No comment provided by engineer.
+
+ Message source remains private.
+ Източникът на съобщението остава скрит.
+ No comment provided by engineer.
+
Message text
Текст на съобщението
@@ -3625,10 +3685,12 @@ This is your link for group %@!
Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.
+ Съобщенията, файловете и разговорите са защитени чрез **криптиране от край до край** с перфектна секретност при препращане, правдоподобно опровержение и възстановяване при взлом.
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.
+ Съобщенията, файловете и разговорите са защитени чрез **квантово устойчиво e2e криптиране** с перфектна секретност при препращане, правдоподобно опровержение и възстановяване при взлом.
No comment provided by engineer.
@@ -3711,6 +3773,11 @@ This is your link for group %@!
Очаквайте скоро още подобрения!
No comment provided by engineer.
+
+ More reliable network connection.
+ По-надеждна мрежова връзка.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Най-вероятно тази връзка е изтрита.
@@ -3746,6 +3813,16 @@ This is your link for group %@!
Мрежа и сървъри
No comment provided by engineer.
+
+ Network connection
+ Мрежова връзка
+ No comment provided by engineer.
+
+
+ Network management
+ Управление на мрежата
+ No comment provided by engineer.
+
Network settings
Мрежови настройки
@@ -3856,6 +3933,11 @@ This is your link for group %@!
Няма история
No comment provided by engineer.
+
+ No network connection
+ Няма мрежова връзка
+ No comment provided by engineer.
+
No permission to record voice message
Няма разрешение за запис на гласово съобщение
@@ -4070,6 +4152,11 @@ This is your link for group %@!
Или покажи този код
No comment provided by engineer.
+
+ Other
+ Други
+ No comment provided by engineer.
+
PING count
PING бройка
@@ -4237,11 +4324,6 @@ Error: %@
Въжможно е пръстовият отпечатък на сертификата в адреса на сървъра да е неправилен
server test error
-
- Post-quantum E2EE
- Постквантово E2EE
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
Запазете последната чернова на съобщението с прикачени файлове.
@@ -4292,6 +4374,11 @@ Error: %@
Профилно изображение
No comment provided by engineer.
+
+ Profile images
+ Профилни изображения
+ No comment provided by engineer.
+
Profile name
Име на профила
@@ -4332,6 +4419,11 @@ Error: %@
Забрани реакциите на съобщенията.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ Забранете изпращането на SimpleX линкове.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Забрани изпращането на лични съобщения до членовете.
@@ -4462,6 +4554,11 @@ Error: %@
Получаващият адрес ще бъде променен към друг сървър. Промяната на адреса ще завърши, след като подателят е онлайн.
No comment provided by engineer.
+
+ Receiving concurrency
+ Паралелност на получаване
+ No comment provided by engineer.
+
Receiving file will be stopped.
Получаващият се файл ще бъде спрян.
@@ -4477,6 +4574,11 @@ Error: %@
Скорошна история и подобрен [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.
+
+ Recipient(s) can't see who this message is from.
+ Получателят(ите) не могат да видят от кого е това съобщение.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Получателите виждат актуализации, докато ги въвеждате.
@@ -4777,11 +4879,21 @@ Error: %@
Запази съобщението при посрещане?
No comment provided by engineer.
+
+ Saved
+ Запазено
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Запазените WebRTC ICE сървъри ще бъдат премахнати
No comment provided by engineer.
+
+ Saved from
+ Запазено от
+ No comment provided by engineer.
+
Saved message
Запазено съобщение
@@ -5087,6 +5199,11 @@ Error: %@
Настройки
No comment provided by engineer.
+
+ Shape profile images
+ Променете формата на профилните изображения
+ No comment provided by engineer.
+
Share
Сподели
@@ -5205,6 +5322,16 @@ Error: %@
SimpleX links
SimpleX линкове
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ SimpleX линкове са забранени в тази група.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ SimpleX линковете не са разрешени
No comment provided by engineer.
@@ -5242,6 +5369,11 @@ Error: %@
Някой
notification title
+
+ Square, circle, or anything in between.
+ Квадрат, кръг или нещо между тях.
+ No comment provided by engineer.
+
Start chat
Започни чат
@@ -6043,6 +6175,11 @@ To connect, please ask your contact to create another connection link and check
Гласовите съобщения са забранени в тази група.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Гласовите съобщения не са разрешени
+ No comment provided by engineer.
+
Voice messages prohibited!
Гласовите съобщения са забранени!
@@ -6113,6 +6250,11 @@ To connect, please ask your contact to create another connection link and check
Когато са налични
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ При свързване на аудио и видео разговори.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Когато хората искат да се свържат с вас, можете да ги приемете или отхвърлите.
@@ -6123,6 +6265,21 @@ To connect, please ask your contact to create another connection link and check
Когато споделяте инкогнито профил с някого, този профил ще се използва за групите, в които той ви кани.
No comment provided by engineer.
+
+ WiFi
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ Ще бъде активирано в личните чатове!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Кабелен Ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
С криптирани файлове и медия.
@@ -6160,6 +6317,7 @@ To connect, please ask your contact to create another connection link and check
You **must not** use the same database on two devices.
+ **Не трябва** да използвате една и съща база данни на две устройства.
No comment provided by engineer.
@@ -6605,6 +6763,11 @@ SimpleX сървърите не могат да видят вашия профи
админ
member role
+
+ admins
+ администратори
+ feature role
+
agreeing encryption for %@…
съгласуване на криптиране за %@…
@@ -6615,6 +6778,11 @@ SimpleX сървърите не могат да видят вашия профи
съгласуване на криптиране…
chat item text
+
+ all members
+ всички членове
+ feature role
+
always
винаги
@@ -6945,6 +7113,11 @@ SimpleX сървърите не могат да видят вашия профи
събитие се случи
No comment provided by engineer.
+
+ forwarded
+ препратено
+ No comment provided by engineer.
+
group deleted
групата е изтрита
@@ -7152,6 +7325,11 @@ SimpleX сървърите не могат да видят вашия профи
собственик
member role
+
+ owners
+ собственици
+ feature role
+
peer-to-peer
peer-to-peer
@@ -7202,6 +7380,16 @@ SimpleX сървърите не могат да видят вашия профи
ви острани
rcv group event chat item
+
+ saved
+ запазено
+ No comment provided by engineer.
+
+
+ saved from %@
+ запазено от %@
+ No comment provided by engineer.
+
sec
сек.
@@ -7342,6 +7530,11 @@ SimpleX сървърите не могат да видят вашия профи
да
pref value
+
+ you
+ вие
+ No comment provided by engineer.
+
you are invited to group
вие сте поканени в групата
diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
index cf6e0e1fcd..a1ef39b2fb 100644
--- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
+++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff
@@ -720,6 +720,10 @@
Povolit nevratné smazání odeslaných zpráv. (24 hodin)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ No comment provided by engineer.
+
Allow to send files and media.
Povolit odesílání souborů a médii.
@@ -1043,6 +1047,10 @@
Nelze přijmout soubor
No comment provided by engineer.
+
+ Cellular
+ No comment provided by engineer.
+
Change
Změnit
@@ -1999,6 +2007,10 @@ This cannot be undone!
Snížit a otevřít chat
No comment provided by engineer.
+
+ Download
+ chat item action
+
Download failed
No comment provided by engineer.
@@ -2104,6 +2116,10 @@ This cannot be undone!
Povolit sebedestrukční heslo
set passcode view
+
+ Enabled for
+ No comment provided by engineer.
+
Encrypt
Šifrovat
@@ -2247,10 +2263,6 @@ This cannot be undone!
Chyba přidávání člena(ů)
No comment provided by engineer.
-
- Error allowing contact PQ encryption
- No comment provided by engineer.
-
Error changing address
Chuba změny adresy
@@ -2611,6 +2623,10 @@ This cannot be undone!
Soubory a média jsou zakázány v této skupině.
No comment provided by engineer.
+
+ Files and media not allowed
+ No comment provided by engineer.
+
Files and media prohibited!
Soubory a média jsou zakázány!
@@ -2674,6 +2690,22 @@ This cannot be undone!
Pro konzoli
No comment provided by engineer.
+
+ Forward
+ chat item action
+
+
+ Forward and save messages
+ No comment provided by engineer.
+
+
+ Forwarded
+ No comment provided by engineer.
+
+
+ Forwarded from
+ No comment provided by engineer.
+
Found desktop
No comment provided by engineer.
@@ -2780,6 +2812,10 @@ This cannot be undone!
Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ No comment provided by engineer.
+
Group members can send direct messages.
Členové skupiny mohou posílat přímé zprávy.
@@ -3014,6 +3050,10 @@ This cannot be undone!
V odpovědi na
No comment provided by engineer.
+
+ In-call sounds
+ No comment provided by engineer.
+
Incognito
Inkognito
@@ -3470,6 +3510,10 @@ This is your link for group %@!
Reakce na zprávy jsou v této skupině zakázány.
No comment provided by engineer.
+
+ Message source remains private.
+ No comment provided by engineer.
+
Message text
Text zprávy
@@ -3574,6 +3618,10 @@ This is your link for group %@!
Další vylepšení se chystají již brzy!
No comment provided by engineer.
+
+ More reliable network connection.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Pravděpodobně je toto spojení smazáno.
@@ -3609,6 +3657,14 @@ This is your link for group %@!
Síť a servery
No comment provided by engineer.
+
+ Network connection
+ No comment provided by engineer.
+
+
+ Network management
+ No comment provided by engineer.
+
Network settings
Nastavení sítě
@@ -3718,6 +3774,10 @@ This is your link for group %@!
Žádná historie
No comment provided by engineer.
+
+ No network connection
+ No comment provided by engineer.
+
No permission to record voice message
Nemáte oprávnění nahrávat hlasové zprávy
@@ -3923,6 +3983,10 @@ This is your link for group %@!
Or show this code
No comment provided by engineer.
+
+ Other
+ No comment provided by engineer.
+
PING count
Počet PING
@@ -4082,10 +4146,6 @@ Error: %@
Je možné, že otisk certifikátu v adrese serveru je nesprávný
server test error
-
- Post-quantum E2EE
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
Zachování posledního návrhu zprávy s přílohami.
@@ -4135,6 +4195,10 @@ Error: %@
Profilový obrázek
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -4173,6 +4237,10 @@ Error: %@
Zakázat reakce na zprávy.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Zakázat odesílání přímých zpráv členům.
@@ -4300,6 +4368,10 @@ Error: %@
Přijímací adresa bude změněna na jiný server. Změna adresy bude dokončena po připojení odesílatele.
No comment provided by engineer.
+
+ Receiving concurrency
+ No comment provided by engineer.
+
Receiving file will be stopped.
Příjem souboru bude zastaven.
@@ -4314,6 +4386,10 @@ Error: %@
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).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Příjemci uvidí aktualizace během jejich psaní.
@@ -4607,11 +4683,19 @@ Error: %@
Uložit uvítací zprávu?
No comment provided by engineer.
+
+ Saved
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Uložené servery WebRTC ICE budou odstraněny
No comment provided by engineer.
+
+ Saved from
+ No comment provided by engineer.
+
Saved message
message info title
@@ -4910,6 +4994,10 @@ Error: %@
Nastavení
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Sdílet
@@ -5026,6 +5114,14 @@ Error: %@
SimpleX links
Odkazy na SimpleX
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
No comment provided by engineer.
@@ -5063,6 +5159,10 @@ Error: %@
Někdo
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Začít chat
@@ -5828,6 +5928,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
Hlasové zprávy jsou v této skupině zakázány.
No comment provided by engineer.
+
+ Voice messages not allowed
+ No comment provided by engineer.
+
Voice messages prohibited!
Hlasové zprávy jsou zakázány!
@@ -5895,6 +5999,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
Když je k dispozici
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Když někdo požádá o připojení, můžete žádost přijmout nebo odmítnout.
@@ -5905,6 +6013,18 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
Pokud s někým sdílíte inkognito profil, bude tento profil použit pro skupiny, do kterých vás pozve.
No comment provided by engineer.
+
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
No comment provided by engineer.
@@ -6368,6 +6488,10 @@ Servery SimpleX nevidí váš profil.
správce
member role
+
+ admins
+ feature role
+
agreeing encryption for %@…
povoluji šifrování pro %@…
@@ -6378,6 +6502,10 @@ Servery SimpleX nevidí váš profil.
povoluji šifrování…
chat item text
+
+ all members
+ feature role
+
always
vždy
@@ -6700,6 +6828,10 @@ Servery SimpleX nevidí váš profil.
event happened
No comment provided by engineer.
+
+ forwarded
+ No comment provided by engineer.
+
group deleted
skupina smazána
@@ -6906,6 +7038,10 @@ Servery SimpleX nevidí váš profil.
vlastník
member role
+
+ owners
+ feature role
+
peer-to-peer
peer-to-peer
@@ -6953,6 +7089,14 @@ Servery SimpleX nevidí váš profil.
odstranil vás
rcv group event chat item
+
+ saved
+ No comment provided by engineer.
+
+
+ saved from %@
+ No comment provided by engineer.
+
sec
sek
@@ -7086,6 +7230,10 @@ Servery SimpleX nevidí váš profil.
ano
pref value
+
+ you
+ No comment provided by engineer.
+
you are invited to group
jste pozváni do skupiny
diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
index 7ad19ff86f..29384aecc4 100644
--- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
+++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff
@@ -743,6 +743,11 @@
Unwiederbringliches löschen von gesendeten Nachrichten erlauben. (24 Stunden)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Das Senden von SimpleX-Links erlauben.
+ No comment provided by engineer.
+
Allow to send files and media.
Das Senden von Dateien und Medien erlauben.
@@ -1083,6 +1088,11 @@
Datei kann nicht empfangen werden
No comment provided by engineer.
+
+ Cellular
+ Zellulär
+ No comment provided by engineer.
+
Change
Ändern
@@ -2078,6 +2088,11 @@ Das kann nicht rückgängig gemacht werden!
Datenbank herabstufen und den Chat öffnen
No comment provided by engineer.
+
+ Download
+ Herunterladen
+ chat item action
+
Download failed
Herunterladen fehlgeschlagen
@@ -2188,6 +2203,11 @@ Das kann nicht rückgängig gemacht werden!
Selbstzerstörungs-Zugangscode aktivieren
set passcode view
+
+ Enabled for
+ Aktiviert für
+ No comment provided by engineer.
+
Encrypt
Verschlüsseln
@@ -2338,11 +2358,6 @@ Das kann nicht rückgängig gemacht werden!
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
@@ -2713,6 +2728,11 @@ Das kann nicht rückgängig gemacht werden!
In dieser Gruppe sind Dateien und Medien nicht erlaubt.
No comment provided by engineer.
+
+ Files and media not allowed
+ Dateien und Medien sind nicht erlaubt
+ No comment provided by engineer.
+
Files and media prohibited!
Dateien und Medien sind nicht erlaubt!
@@ -2778,6 +2798,26 @@ Das kann nicht rückgängig gemacht werden!
Für Konsole
No comment provided by engineer.
+
+ Forward
+ Weiterleiten
+ chat item action
+
+
+ Forward and save messages
+ Nachrichten weiterleiten und speichern
+ No comment provided by engineer.
+
+
+ Forwarded
+ Weitergeleitet
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Weitergeleitet aus
+ No comment provided by engineer.
+
Found desktop
Gefundener Desktop
@@ -2888,6 +2928,11 @@ Das kann nicht rückgängig gemacht werden!
Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ Gruppenmitglieder können SimpleX-Links senden.
+ No comment provided by engineer.
+
Group members can send direct messages.
Gruppenmitglieder können Direktnachrichten versenden.
@@ -3128,6 +3173,11 @@ Das kann nicht rückgängig gemacht werden!
Als Antwort auf
No comment provided by engineer.
+
+ In-call sounds
+ Klingeltöne
+ No comment provided by engineer.
+
Incognito
Inkognito
@@ -3603,6 +3653,11 @@ Das ist Ihr Link für die Gruppe %@!
In dieser Gruppe sind Reaktionen auf Nachrichten nicht erlaubt.
No comment provided by engineer.
+
+ Message source remains private.
+ Die Nachrichtenquelle bleibt privat.
+ No comment provided by engineer.
+
Message text
Nachrichtentext
@@ -3718,6 +3773,11 @@ Das ist Ihr Link für die Gruppe %@!
Weitere Verbesserungen sind bald verfügbar!
No comment provided by engineer.
+
+ More reliable network connection.
+ Zuverlässigere Netzwerkverbindung.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Wahrscheinlich ist diese Verbindung gelöscht worden.
@@ -3753,6 +3813,16 @@ Das ist Ihr Link für die Gruppe %@!
Netzwerk & Server
No comment provided by engineer.
+
+ Network connection
+ Netzwerkverbindung
+ No comment provided by engineer.
+
+
+ Network management
+ Netzwerk-Verwaltung
+ No comment provided by engineer.
+
Network settings
Netzwerkeinstellungen
@@ -3863,6 +3933,11 @@ Das ist Ihr Link für die Gruppe %@!
Kein Nachrichtenverlauf
No comment provided by engineer.
+
+ No network connection
+ Keine Netzwerkverbindung
+ No comment provided by engineer.
+
No permission to record voice message
Keine Berechtigung für das Aufnehmen von Sprachnachrichten
@@ -4077,6 +4152,11 @@ Das ist Ihr Link für die Gruppe %@!
Oder diesen QR-Code anzeigen
No comment provided by engineer.
+
+ Other
+ Andere
+ No comment provided by engineer.
+
PING count
PING-Zähler
@@ -4244,11 +4324,6 @@ Fehler: %@
Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig
server test error
-
- 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.
@@ -4299,6 +4374,11 @@ Fehler: %@
Profilbild
No comment provided by engineer.
+
+ Profile images
+ Profil-Bilder
+ No comment provided by engineer.
+
Profile name
Profilname
@@ -4339,6 +4419,11 @@ Fehler: %@
Reaktionen auf Nachrichten nicht erlauben.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ Das Senden von SimpleX-Links nicht erlauben.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Das Senden von Direktnachrichten an Gruppenmitglieder nicht erlauben.
@@ -4346,7 +4431,7 @@ Fehler: %@
Prohibit sending disappearing messages.
- Das Senden von verschwindenden Nachrichten verbieten.
+ Das Senden von verschwindenden Nachrichten nicht erlauben.
No comment provided by engineer.
@@ -4469,6 +4554,11 @@ Fehler: %@
Die Empfängeradresse wird auf einen anderen Server geändert. Der Adresswechsel wird abgeschlossen, wenn der Absender wieder online ist.
No comment provided by engineer.
+
+ Receiving concurrency
+ Gleichzeitiger Empfang
+ No comment provided by engineer.
+
Receiving file will be stopped.
Der Empfang der Datei wird beendet.
@@ -4484,6 +4574,11 @@ Fehler: %@
Aktueller Nachrichtenverlauf und verbesserter [Gruppenverzeichnis-Bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ Empfänger können nicht sehen, von wem die Nachricht stammt.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Die Empfänger sehen Nachrichtenaktualisierungen, während Sie sie eingeben.
@@ -4784,11 +4879,21 @@ Fehler: %@
Begrüßungsmeldung speichern?
No comment provided by engineer.
+
+ Saved
+ Abgespeichert
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Gespeicherte WebRTC ICE-Server werden entfernt
No comment provided by engineer.
+
+ Saved from
+ Abgespeichert von
+ No comment provided by engineer.
+
Saved message
Gespeicherte Nachricht
@@ -5094,6 +5199,11 @@ Fehler: %@
Einstellungen
No comment provided by engineer.
+
+ Shape profile images
+ Form der Profil-Bilder
+ No comment provided by engineer.
+
Share
Teilen
@@ -5212,6 +5322,16 @@ Fehler: %@
SimpleX links
SimpleX-Links
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ In dieser Gruppe sind SimpleX-Links nicht erlaubt.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ SimpleX-Links sind nicht erlaubt
No comment provided by engineer.
@@ -5249,6 +5369,11 @@ Fehler: %@
Jemand
notification title
+
+ Square, circle, or anything in between.
+ Quadratisch, kreisförmig oder irgendetwas dazwischen.
+ No comment provided by engineer.
+
Start chat
Starten Sie den Chat
@@ -5907,7 +6032,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
Use current profile
- Nutzen Sie das aktuelle Profil
+ Das aktuelle Profil nutzen
No comment provided by engineer.
@@ -5927,7 +6052,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
Use new incognito profile
- Nutzen Sie das neue Inkognito-Profil
+ Ein neues Inkognito-Profil nutzen
No comment provided by engineer.
@@ -6050,6 +6175,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
In dieser Gruppe sind Sprachnachrichten nicht erlaubt.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Sprachnachrichten sind nicht erlaubt
+ No comment provided by engineer.
+
Voice messages prohibited!
Sprachnachrichten sind nicht erlaubt!
@@ -6120,6 +6250,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
Wenn verfügbar
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ Bei der Verbindung über Audio- und Video-Anrufe.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Wenn Personen eine Verbindung anfordern, können Sie diese annehmen oder ablehnen.
@@ -6130,6 +6265,21 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
Wenn Sie ein Inkognito-Profil mit Jemandem teilen, wird dieses Profil auch für die Gruppen verwendet, für die Sie von diesem Kontakt eingeladen werden.
No comment provided by engineer.
+
+ WiFi
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ Wird in direkten Chats automatisch aktiviert!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Kabelgebundenes Netzwerk
+ No comment provided by engineer.
+
With encrypted files and media.
Mit verschlüsselten Dateien und Medien.
@@ -6613,6 +6763,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.
Admin
member role
+
+ admins
+ Administratoren
+ feature role
+
agreeing encryption for %@…
Verschlüsselung von %@ zustimmen…
@@ -6623,6 +6778,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.
Verschlüsselung zustimmen…
chat item text
+
+ all members
+ Alle Mitglieder
+ feature role
+
always
Immer
@@ -6953,6 +7113,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.
event happened
No comment provided by engineer.
+
+ forwarded
+ weitergeleitet
+ No comment provided by engineer.
+
group deleted
Gruppe gelöscht
@@ -7160,6 +7325,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.
Eigentümer
member role
+
+ owners
+ Eigentümer
+ feature role
+
peer-to-peer
Peer-to-Peer
@@ -7210,6 +7380,16 @@ SimpleX-Server können Ihr Profil nicht einsehen.
hat Sie aus der Gruppe entfernt
rcv group event chat item
+
+ saved
+ abgespeichert
+ No comment provided by engineer.
+
+
+ saved from %@
+ abgespeichert von %@
+ No comment provided by engineer.
+
sec
sek
@@ -7350,6 +7530,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.
Ja
pref value
+
+ you
+ Profil
+ No comment provided by engineer.
+
you are invited to group
Sie sind zu der Gruppe eingeladen
diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
index 39ee4e2a9b..2b5677dd61 100644
--- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
+++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff
@@ -743,6 +743,11 @@
Allow to irreversibly delete sent messages. (24 hours)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Allow to send SimpleX links.
+ No comment provided by engineer.
+
Allow to send files and media.
Allow to send files and media.
@@ -1083,6 +1088,11 @@
Cannot receive file
No comment provided by engineer.
+
+ Cellular
+ Cellular
+ No comment provided by engineer.
+
Change
Change
@@ -2078,6 +2088,11 @@ This cannot be undone!
Downgrade and open chat
No comment provided by engineer.
+
+ Download
+ Download
+ chat item action
+
Download failed
Download failed
@@ -2188,6 +2203,11 @@ This cannot be undone!
Enable self-destruct passcode
set passcode view
+
+ Enabled for
+ Enabled for
+ No comment provided by engineer.
+
Encrypt
Encrypt
@@ -2338,11 +2358,6 @@ This cannot be undone!
Error adding member(s)
No comment provided by engineer.
-
- Error allowing contact PQ encryption
- Error allowing contact PQ encryption
- No comment provided by engineer.
-
Error changing address
Error changing address
@@ -2713,6 +2728,11 @@ This cannot be undone!
Files and media are prohibited in this group.
No comment provided by engineer.
+
+ Files and media not allowed
+ Files and media not allowed
+ No comment provided by engineer.
+
Files and media prohibited!
Files and media prohibited!
@@ -2778,6 +2798,26 @@ This cannot be undone!
For console
No comment provided by engineer.
+
+ Forward
+ Forward
+ chat item action
+
+
+ Forward and save messages
+ Forward and save messages
+ No comment provided by engineer.
+
+
+ Forwarded
+ Forwarded
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Forwarded from
+ No comment provided by engineer.
+
Found desktop
Found desktop
@@ -2888,6 +2928,11 @@ This cannot be undone!
Group members can irreversibly delete sent messages. (24 hours)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ Group members can send SimpleX links.
+ No comment provided by engineer.
+
Group members can send direct messages.
Group members can send direct messages.
@@ -3128,6 +3173,11 @@ This cannot be undone!
In reply to
No comment provided by engineer.
+
+ In-call sounds
+ In-call sounds
+ No comment provided by engineer.
+
Incognito
Incognito
@@ -3603,6 +3653,11 @@ This is your link for group %@!
Message reactions are prohibited in this group.
No comment provided by engineer.
+
+ Message source remains private.
+ Message source remains private.
+ No comment provided by engineer.
+
Message text
Message text
@@ -3718,6 +3773,11 @@ This is your link for group %@!
More improvements are coming soon!
No comment provided by engineer.
+
+ More reliable network connection.
+ More reliable network connection.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Most likely this connection is deleted.
@@ -3753,6 +3813,16 @@ This is your link for group %@!
Network & servers
No comment provided by engineer.
+
+ Network connection
+ Network connection
+ No comment provided by engineer.
+
+
+ Network management
+ Network management
+ No comment provided by engineer.
+
Network settings
Network settings
@@ -3863,6 +3933,11 @@ This is your link for group %@!
No history
No comment provided by engineer.
+
+ No network connection
+ No network connection
+ No comment provided by engineer.
+
No permission to record voice message
No permission to record voice message
@@ -4077,6 +4152,11 @@ This is your link for group %@!
Or show this code
No comment provided by engineer.
+
+ Other
+ Other
+ No comment provided by engineer.
+
PING count
PING count
@@ -4244,11 +4324,6 @@ Error: %@
Possibly, certificate fingerprint in server address is incorrect
server test error
-
- Post-quantum E2EE
- Post-quantum E2EE
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
Preserve the last message draft, with attachments.
@@ -4299,6 +4374,11 @@ Error: %@
Profile image
No comment provided by engineer.
+
+ Profile images
+ Profile images
+ No comment provided by engineer.
+
Profile name
Profile name
@@ -4339,6 +4419,11 @@ Error: %@
Prohibit messages reactions.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ Prohibit sending SimpleX links.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Prohibit sending direct messages to members.
@@ -4469,6 +4554,11 @@ Error: %@
Receiving address will be changed to a different server. Address change will complete after sender comes online.
No comment provided by engineer.
+
+ Receiving concurrency
+ Receiving concurrency
+ No comment provided by engineer.
+
Receiving file will be stopped.
Receiving file will be stopped.
@@ -4484,6 +4574,11 @@ Error: %@
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).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ Recipient(s) can't see who this message is from.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Recipients see updates as you type them.
@@ -4784,11 +4879,21 @@ Error: %@
Save welcome message?
No comment provided by engineer.
+
+ Saved
+ Saved
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Saved WebRTC ICE servers will be removed
No comment provided by engineer.
+
+ Saved from
+ Saved from
+ No comment provided by engineer.
+
Saved message
Saved message
@@ -5094,6 +5199,11 @@ Error: %@
Settings
No comment provided by engineer.
+
+ Shape profile images
+ Shape profile images
+ No comment provided by engineer.
+
Share
Share
@@ -5212,6 +5322,16 @@ Error: %@
SimpleX links
SimpleX links
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ SimpleX links are prohibited in this group.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ SimpleX links not allowed
No comment provided by engineer.
@@ -5249,6 +5369,11 @@ Error: %@
Somebody
notification title
+
+ Square, circle, or anything in between.
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Start chat
@@ -6050,6 +6175,11 @@ To connect, please ask your contact to create another connection link and check
Voice messages are prohibited in this group.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Voice messages not allowed
+ No comment provided by engineer.
+
Voice messages prohibited!
Voice messages prohibited!
@@ -6120,6 +6250,11 @@ To connect, please ask your contact to create another connection link and check
When available
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ When connecting audio and video calls.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
When people request to connect, you can accept or reject it.
@@ -6130,6 +6265,21 @@ To connect, please ask your contact to create another connection link and check
When you share an incognito profile with somebody, this profile will be used for the groups they invite you to.
No comment provided by engineer.
+
+ WiFi
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ Will be enabled in direct chats!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Wired ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
With encrypted files and media.
@@ -6613,6 +6763,11 @@ SimpleX servers cannot see your profile.
admin
member role
+
+ admins
+ admins
+ feature role
+
agreeing encryption for %@…
agreeing encryption for %@…
@@ -6623,6 +6778,11 @@ SimpleX servers cannot see your profile.
agreeing encryption…
chat item text
+
+ all members
+ all members
+ feature role
+
always
always
@@ -6953,6 +7113,11 @@ SimpleX servers cannot see your profile.
event happened
No comment provided by engineer.
+
+ forwarded
+ forwarded
+ No comment provided by engineer.
+
group deleted
group deleted
@@ -7160,6 +7325,11 @@ SimpleX servers cannot see your profile.
owner
member role
+
+ owners
+ owners
+ feature role
+
peer-to-peer
peer-to-peer
@@ -7210,6 +7380,16 @@ SimpleX servers cannot see your profile.
removed you
rcv group event chat item
+
+ saved
+ saved
+ No comment provided by engineer.
+
+
+ saved from %@
+ saved from %@
+ No comment provided by engineer.
+
sec
sec
@@ -7350,6 +7530,11 @@ SimpleX servers cannot see your profile.
yes
pref value
+
+ you
+ you
+ No comment provided by engineer.
+
you are invited to group
you are invited to group
diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
index 99a117d786..5d2482ae27 100644
--- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
+++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff
@@ -109,7 +109,7 @@
%@ downloaded
- %@ downloaded
+ %@ descargado
No comment provided by engineer.
@@ -134,7 +134,7 @@
%@ uploaded
- %@ cargado
+ %@ subido
No comment provided by engineer.
@@ -354,7 +354,7 @@
**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.
+ **Recuarda**: usar la misma base de datos en dos dispositivos hará que falle el descifrado de mensajes como protección de seguridad.
No comment provided by engineer.
@@ -635,7 +635,7 @@
Admins can block a member for all.
- Los admins pueden bloquear un miembro por todos.
+ Los administradores pueden bloquear a un miembro para los demás.
No comment provided by engineer.
@@ -695,7 +695,7 @@
All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.
- Todos sus contactos, conversaciones y archivos se cifrarán de forma segura y se subirán en fragmentos hacia puntos XFTP configurados.
+ Todos tus contactos, conversaciones y archivos serán cifrados, divididos y subidos de forma segura a los servidores XFTP configurados.
No comment provided by engineer.
@@ -743,6 +743,11 @@
Se permite la eliminación irreversible de mensajes. (24 horas)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Permitir enviar enlaces SimpleX.
+ No comment provided by engineer.
+
Allow to send files and media.
Se permite enviar archivos y multimedia.
@@ -825,7 +830,7 @@
App data migration
- Migración de datos de la aplicación
+ Migrar datos de la aplicación
No comment provided by engineer.
@@ -870,7 +875,7 @@
Archive and upload
- Archivar y transferir
+ Archivar y subir
No comment provided by engineer.
@@ -1000,7 +1005,7 @@
Blocked by admin
- Bloqueado por el administrador
+ Bloqueado por administrador
No comment provided by engineer.
@@ -1083,6 +1088,11 @@
No se puede recibir el archivo
No comment provided by engineer.
+
+ Cellular
+ Móvil
+ No comment provided by engineer.
+
Change
Cambiar
@@ -1166,17 +1176,17 @@
Chat is stopped
- Chat está detenido
+ Chat está parado
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.
+ Chat parado. Si has usado esta base de datos en otro dispositivo, debes transferirla de vuelta antes de iniciar Chat.
No comment provided by engineer.
Chat migrated!
- Chat transferido !
+ ¡Chat migrado!
No comment provided by engineer.
@@ -1201,7 +1211,7 @@
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.
+ En el nuevo dispositivo selecciona _Migrar desde otro dispositivo_ y escanéa el código QR.
No comment provided by engineer.
@@ -1276,7 +1286,7 @@
Confirm network settings
- Confirmar los ajustes de red
+ Confirmar configuración de red
No comment provided by engineer.
@@ -1291,7 +1301,7 @@
Confirm that you remember database passphrase to migrate it.
- Confirme que recuerda la frase secreta de la base de datos para migrarla.
+ Confirma que recuerdas la frase de contraseña de la base de datos para migrarla.
No comment provided by engineer.
@@ -1560,7 +1570,7 @@ This is your own one-time link!
Creating archive link
- Creando enlace de archivo
+ Creando enlace al archivo
No comment provided by engineer.
@@ -1758,7 +1768,7 @@ This is your own one-time link!
Delete chat profile?
- ¿Eliminar el perfil?
+ ¿Eliminar perfil?
No comment provided by engineer.
@@ -2078,9 +2088,14 @@ This cannot be undone!
Degradar y abrir Chat
No comment provided by engineer.
+
+ Download
+ Descargar
+ chat item action
+
Download failed
- Error en la descarga
+ Descarga fallida
No comment provided by engineer.
@@ -2155,7 +2170,7 @@ This cannot be undone!
Enable in direct chats (BETA)!
- Activar en chats directos (BETA)!
+ ¡Activar en chats directos (BETA)!
No comment provided by engineer.
@@ -2188,6 +2203,11 @@ This cannot be undone!
Activar código de autodestrucción
set passcode view
+
+ Enabled for
+ Activar para
+ No comment provided by engineer.
+
Encrypt
Cifrar
@@ -2275,7 +2295,7 @@ This cannot be undone!
Enter passphrase
- Introducir frase de contraseña
+ Introduce la frase de contraseña
No comment provided by engineer.
@@ -2338,11 +2358,6 @@ This cannot be undone!
Error al añadir miembro(s)
No comment provided by engineer.
-
- Error allowing contact PQ encryption
- Error al permitir cifrado PQ al contacto
- No comment provided by engineer.
-
Error changing address
Error al cambiar servidor
@@ -2555,7 +2570,7 @@ This cannot be undone!
Error stopping chat
- Error al detener Chat
+ Error al parar Chat
No comment provided by engineer.
@@ -2685,12 +2700,12 @@ This cannot be undone!
File will be received when your contact completes uploading it.
- El archivo se recibirá cuando tu contacto termine de subirlo.
+ El archivo se recibirá cuando el contacto termine de subirlo.
No comment provided by engineer.
File will be received when your contact is online, please wait or check later!
- El archivo se recibirá cuando tu contacto esté en línea, ¡por favor espera o compruébalo más tarde!
+ El archivo se recibirá cuando el contacto esté en línea, ¡por favor espera o compruébalo más tarde!
No comment provided by engineer.
@@ -2710,7 +2725,12 @@ This cannot be undone!
Files and media are prohibited in this group.
- No se permiten archivos y multimedia en este grupo.
+ Los archivos y multimedia no están permitidos en este grupo.
+ No comment provided by engineer.
+
+
+ Files and media not allowed
+ Archivos y multimedia no permitidos
No comment provided by engineer.
@@ -2725,7 +2745,7 @@ This cannot be undone!
Finalize migration
- Finalizar la migración
+ Finalizar migración
No comment provided by engineer.
@@ -2778,6 +2798,26 @@ This cannot be undone!
Para consola
No comment provided by engineer.
+
+ Forward
+ Reenviar
+ chat item action
+
+
+ Forward and save messages
+ Reenviar y guardar mensajes
+ No comment provided by engineer.
+
+
+ Forwarded
+ Reenviado
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Reenviado por
+ No comment provided by engineer.
+
Found desktop
Ordenador encontrado
@@ -2888,6 +2928,11 @@ This cannot be undone!
Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ Los miembros del grupo pueden enviar enlaces SimpleX.
+ No comment provided by engineer.
+
Group members can send direct messages.
Los miembros del grupo pueden enviar mensajes directos.
@@ -3025,7 +3070,7 @@ This cannot be undone!
Hungarian interface
- Interfaz húngara
+ Interfaz en húngaro
No comment provided by engineer.
@@ -3060,12 +3105,12 @@ This cannot be undone!
Image will be received when your contact completes uploading it.
- La imagen se recibirá cuando tu contacto termine de subirla.
+ La imagen se recibirá cuando el contacto termine de subirla.
No comment provided by engineer.
Image will be received when your contact is online, please wait or check later!
- La imagen se recibirá cuando tu contacto esté en línea, ¡por favor espera o compruébalo más tarde!
+ La imagen se recibirá cuando el contacto esté en línea, ¡por favor espera o compruébalo más tarde!
No comment provided by engineer.
@@ -3120,7 +3165,7 @@ This cannot be undone!
In order to continue, chat should be stopped.
- Para continuar, el chat debe ser interrumpido.
+ Para continuar, Chat debe estar parado.
No comment provided by engineer.
@@ -3128,6 +3173,11 @@ This cannot be undone!
En respuesta a
No comment provided by engineer.
+
+ In-call sounds
+ Sonido de llamada
+ No comment provided by engineer.
+
Incognito
Incógnito
@@ -3237,7 +3287,7 @@ This cannot be undone!
Invalid migration confirmation
- Confirmación de migración inválida
+ Confirmación de migración no válida
No comment provided by engineer.
@@ -3311,7 +3361,7 @@ This cannot be undone!
2. Message decryption failed, because you or your contact used old database backup.
3. The connection was compromised.
Esto puede suceder cuando:
-1. Los mensajes caducan en el cliente saliente tras 2 días o en el servidor tras 30 días.
+1. Los mensajes caducan tras 2 días en el cliente saliente o tras 30 días en el servidor.
2. El descifrado ha fallado porque tu o tu contacto estáis usando una copia de seguridad antigua de la base de datos.
3. La conexión ha sido comprometida.
No comment provided by engineer.
@@ -3603,6 +3653,11 @@ This is your link for group %@!
Las reacciones a los mensajes no están permitidas en este grupo.
No comment provided by engineer.
+
+ Message source remains private.
+ El autor del mensaje se mantiene privado.
+ No comment provided by engineer.
+
Message text
Contacto y texto
@@ -3610,7 +3665,7 @@ This is your link for group %@!
Message too large
- Mensaje demasiado grande
+ Mensaje demasiado largo
No comment provided by engineer.
@@ -3630,12 +3685,12 @@ This is your link for group %@!
Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.
- Los mensajes, archivos y llamadas están protegidos por **cifrado de extremo a extremo** con perfecta confidencialidad, repudio y recuperación tras ataques.
+ Los mensajes, archivos y llamadas están protegidos mediante **cifrado de extremo a extremo** con secreto perfecto hacía adelante, repudio y recuperación tras ataque.
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.
- Los mensajes, archivos y llamadas están protegidos por **cifrado de extremo a extremo resistente a la computación cuántica** con perfecta confidencialidad, repudio y recuperación tras ataques.
+ Los mensajes, archivos y llamadas están protegidos mediante **cifrado de extremo a extremo resistente a tecnología cuántica** con secreto perfecto hacía adelante, repudio y recuperación tras ataque.
No comment provided by engineer.
@@ -3655,12 +3710,12 @@ This is your link for group %@!
Migrate to another device
- Migrar hacia otro dispositivo
+ Migrar a otro dispositivo
No comment provided by engineer.
Migrate to another device via QR code.
- Migrar hacia otro dispositivo mediante código QR.
+ Migrar a otro dispositivo mediante código QR.
No comment provided by engineer.
@@ -3718,6 +3773,11 @@ This is your link for group %@!
¡Pronto habrá más mejoras!
No comment provided by engineer.
+
+ More reliable network connection.
+ Conexión de red más fiable.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Probablemente la conexión ha sido eliminada.
@@ -3753,6 +3813,16 @@ This is your link for group %@!
Servidores y Redes
No comment provided by engineer.
+
+ Network connection
+ Conexión de red
+ No comment provided by engineer.
+
+
+ Network management
+ Gestión de la red
+ No comment provided by engineer.
+
Network settings
Configuración de red
@@ -3863,6 +3933,11 @@ This is your link for group %@!
Sin historial
No comment provided by engineer.
+
+ No network connection
+ Sin conexión de red
+ No comment provided by engineer.
+
No permission to record voice message
Sin permiso para grabar mensajes de voz
@@ -4039,7 +4114,7 @@ This is your link for group %@!
Open migration to another device
- Abrir la migración hacia otro dispositivo
+ Abrir menú migración a otro dispositivo
authentication reason
@@ -4069,7 +4144,7 @@ This is your link for group %@!
Or securely share this file link
- O comparta de forma segura el enlace de este archivo
+ O comparte de forma segura este enlace al archivo
No comment provided by engineer.
@@ -4077,6 +4152,11 @@ This is your link for group %@!
O mostrar este código
No comment provided by engineer.
+
+ Other
+ Otro
+ No comment provided by engineer.
+
PING count
Contador PING
@@ -4184,7 +4264,7 @@ This is your link for group %@!
Please confirm that network settings are correct for this device.
- Por favor confirme que la configuración de red es correcta para este dispositivo.
+ Por favor, confirma que la configuración de red es correcta para este dispositivo.
No comment provided by engineer.
@@ -4244,11 +4324,6 @@ Error: %@
Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta
server test error
-
- Post-quantum E2EE
- E2EE postcuántica
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
Conserva el último borrador del mensaje con los datos adjuntos.
@@ -4291,7 +4366,7 @@ Error: %@
Profile and server connections
- Perfil y conexiones de servidor
+ Datos del perfil y conexiones
No comment provided by engineer.
@@ -4299,6 +4374,11 @@ Error: %@
Imagen del perfil
No comment provided by engineer.
+
+ Profile images
+ Imágenes del perfil
+ No comment provided by engineer.
+
Profile name
Nombre del perfil
@@ -4339,6 +4419,11 @@ Error: %@
No se permiten reacciones a los mensajes.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ No permitir el envío de enlaces SimpleX.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
No se permiten mensajes directos entre miembros.
@@ -4391,7 +4476,7 @@ Error: %@
Quantum resistant encryption
- Cifrado resistente a la tecnología cuántica
+ Cifrado resistente a tecnología cuántica
No comment provided by engineer.
@@ -4469,6 +4554,11 @@ Error: %@
La dirección de recepción pasará a otro servidor. El cambio se completará cuando el remitente esté en línea.
No comment provided by engineer.
+
+ Receiving concurrency
+ Concurrencia en la recepción
+ No comment provided by engineer.
+
Receiving file will be stopped.
Se detendrá la recepción del archivo.
@@ -4484,6 +4574,11 @@ Error: %@
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.
+
+ Recipient(s) can't see who this message is from.
+ Los destinatarios no ven de quién procede este mensaje.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Los destinatarios ven actualizarse mientras escribes.
@@ -4596,7 +4691,7 @@ Error: %@
Repeat upload
- Repetir la carga
+ Repetir subida
No comment provided by engineer.
@@ -4784,11 +4879,21 @@ Error: %@
¿Guardar mensaje de bienvenida?
No comment provided by engineer.
+
+ Saved
+ Guardado
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Los servidores WebRTC ICE guardados serán eliminados
No comment provided by engineer.
+
+ Saved from
+ Guardado desde
+ No comment provided by engineer.
+
Saved message
Mensaje guardado
@@ -4881,7 +4986,7 @@ Error: %@
Send a live message - it will update for the recipient(s) as you type it
- Envía un mensaje en vivo: se actualizará para el(los) destinatario(s) a medida que se escribe
+ Envía un mensaje en vivo: se actualizará para el (los) destinatario(s) a medida que se escribe
No comment provided by engineer.
@@ -5094,6 +5199,11 @@ Error: %@
Configuración
No comment provided by engineer.
+
+ Shape profile images
+ Dar forma a las imágenes de perfil
+ No comment provided by engineer.
+
Share
Compartir
@@ -5212,6 +5322,16 @@ Error: %@
SimpleX links
Enlaces SimpleX
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ Los enlaces SimpleX no se permiten en este grupo.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ Enlaces SimpleX no permitidos
No comment provided by engineer.
@@ -5249,6 +5369,11 @@ Error: %@
Alguien
notification title
+
+ Square, circle, or anything in between.
+ Cuadrada, circular o cualquier forma intermedia.
+ No comment provided by engineer.
+
Start chat
Iniciar chat
@@ -5266,32 +5391,32 @@ Error: %@
Stop
- Detener
+ Parar
No comment provided by engineer.
Stop SimpleX
- Detener SimpleX
+ Parar SimpleX
authentication reason
Stop chat
- Detener el chat
+ Parar chat
No comment provided by engineer.
Stop chat to enable database actions
- Detén SimpleX para habilitar las acciones sobre la base de datos
+ Para habilitar las acciones sobre la base de datos, debes parar Chat
No comment provided by engineer.
Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped.
- Para poder exportar, importar o eliminar la base de datos primero debes detener Chat. Durante el tiempo que esté detenido no podrás recibir ni enviar mensajes.
+ Para poder exportar, importar o eliminar la base de datos primero debes parar Chat. Mientras tanto no podrás recibir ni enviar mensajes.
No comment provided by engineer.
Stop chat?
- ¿Detener Chat?
+ ¿Parar Chat?
No comment provided by engineer.
@@ -5321,7 +5446,7 @@ Error: %@
Stopping chat
- Detención del chat
+ Parando chat
No comment provided by engineer.
@@ -5436,12 +5561,12 @@ Error: %@
Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!
- Gracias a los usuarios: [contribuye vía Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#traducir-el-aplicaciones)!
+ ¡Nuestro agradecimiento a todos los colaboradores, [puedes contribuir a través de Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#traducir-el-aplicaciones)!
No comment provided by engineer.
Thanks to the users – contribute via Weblate!
- ¡Gracias a los colaboradores! Contribuye a través de Weblate.
+ ¡Nuestro agradecimiento a todos los colaboradores! Puedes contribuir a través de Weblate
No comment provided by engineer.
@@ -5458,7 +5583,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.
The app can notify you when you receive messages or contact requests - please open settings to enable.
- La aplicación puede notificarte cuando recibas mensajes o solicitudes de contacto: abre la configuración para habilitar.
+ La aplicación puede notificarte cuando recibas mensajes o solicitudes de contacto: por favor, abre la configuración para activarlo.
No comment provided by engineer.
@@ -5563,7 +5688,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.
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.
+ Esta acción es irreversible. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Podría tardar varios minutos.
No comment provided by engineer.
@@ -5578,7 +5703,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.
This chat is protected by quantum resistant end-to-end encryption.
- Este chat está protegido por un cifrado de extremo a extremo resistente a tecnologías cuánticas.
+ Este chat está protegido por cifrado de extremo a extremo resistente a tecnología cuántica.
E2EE info chat item
@@ -5878,7 +6003,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Upload failed
- Error de carga
+ Error de subida
No comment provided by engineer.
@@ -5888,7 +6013,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Uploading archive
- Subiendo el archivo
+ Subiendo archivo
No comment provided by engineer.
@@ -5943,7 +6068,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Use the app while in the call.
- Usar la app durante la llamada.
+ Usar la aplicación durante la llamada.
No comment provided by engineer.
@@ -6013,12 +6138,12 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Video will be received when your contact completes uploading it.
- El video se recibirá cuando tu contacto termine de subirlo.
+ El video se recibirá cuando el contacto termine de subirlo.
No comment provided by engineer.
Video will be received when your contact is online, please wait or check later!
- El vídeo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.
+ El vídeo se recibirá cuando el contacto esté en línea, por favor espera o compruébalo más tarde.
No comment provided by engineer.
@@ -6051,6 +6176,11 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Los mensajes de voz no están permitidos en este grupo.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Mensajes de voz no permitidos
+ No comment provided by engineer.
+
Voice messages prohibited!
¡Mensajes de voz no permitidos!
@@ -6083,7 +6213,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Warning: starting chat on multiple devices is not supported and will cause message delivery failures
- Advertencia: el inicio del chat en varios dispositivos no es compatible y provocará fallos en la entrega de mensajes
+ Atención: el inicio del chat en varios dispositivos es incompatible y provocará fallos en la entrega de mensajes
No comment provided by engineer.
@@ -6108,7 +6238,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Welcome message is too long
- El mensaje de bienvenida es demasiado largo
+ Mensaje de bienvenida demasiado largo
No comment provided by engineer.
@@ -6121,6 +6251,11 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
Si disponibles
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ Al iniciar llamadas de audio y vídeo.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Cuando alguien solicite conectarse podrás aceptar o rechazar la solicitud.
@@ -6131,6 +6266,21 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
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.
+
+ WiFi
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ ¡Será habilitado en los chats directos!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Ethernet por cable
+ No comment provided by engineer.
+
With encrypted files and media.
Con cifrado de archivos y multimedia.
@@ -6168,7 +6318,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
You **must not** use the same database on two devices.
- **No debe** usar la misma base de datos en dos dispositivos.
+ **No debes** usar la misma base de datos en dos dispositivos.
No comment provided by engineer.
@@ -6260,7 +6410,7 @@ Repeat join request?
You can give another try.
- Puede intentarlo de nuevo.
+ Puedes intentarlo de nuevo.
No comment provided by engineer.
@@ -6407,7 +6557,7 @@ Repeat connection request?
You will be connected when your contact's device is online, please wait or check later!
- Te conectarás cuando el dispositivo de tu contacto esté en línea, por favor espera o compruébalo más tarde.
+ Te conectarás cuando el dispositivo del contacto esté en línea, por favor espera o compruébalo más tarde.
No comment provided by engineer.
@@ -6493,8 +6643,8 @@ Repeat connection request?
Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).
- Tu contacto debe estar en línea para que se complete la conexión.
-Puedes cancelar esta conexión y eliminar el contacto (e intentarlo más tarde con un enlace nuevo).
+ El contacto debe estar en línea para completar la conexión.
+Puedes cancelarla y eliminar el contacto (e intentarlo más tarde con un enlace nuevo).
No comment provided by engineer.
@@ -6614,6 +6764,11 @@ Los servidores de SimpleX no pueden ver tu perfil.
administrador
member role
+
+ admins
+ administradores
+ feature role
+
agreeing encryption for %@…
acordando cifrado para %@…
@@ -6624,6 +6779,11 @@ Los servidores de SimpleX no pueden ver tu perfil.
acordando cifrado…
chat item text
+
+ all members
+ todos los miembros
+ feature role
+
always
siempre
@@ -6661,12 +6821,12 @@ Los servidores de SimpleX no pueden ver tu perfil.
blocked %@
- %@ bloqueado
+ ha bloqueado a %@
rcv group event chat item
blocked by admin
- bloqueado por el administrador
+ bloqueado por administrador
marked deleted chat item preview text
@@ -6954,6 +7114,11 @@ Los servidores de SimpleX no pueden ver tu perfil.
evento ocurrido
No comment provided by engineer.
+
+ forwarded
+ reenviado
+ No comment provided by engineer.
+
group deleted
grupo eliminado
@@ -7161,6 +7326,11 @@ Los servidores de SimpleX no pueden ver tu perfil.
propietario
member role
+
+ owners
+ propietarios
+ feature role
+
peer-to-peer
p2p
@@ -7168,7 +7338,7 @@ Los servidores de SimpleX no pueden ver tu perfil.
quantum resistant e2e encryption
- cifrado e2e resistente a la cuántica
+ cifrado e2e resistente a tecnología cuántica
chat item text
@@ -7211,6 +7381,16 @@ Los servidores de SimpleX no pueden ver tu perfil.
te ha expulsado
rcv group event chat item
+
+ saved
+ guardado
+ No comment provided by engineer.
+
+
+ saved from %@
+ Guardado desde %@
+ No comment provided by engineer.
+
sec
seg
@@ -7268,7 +7448,7 @@ Los servidores de SimpleX no pueden ver tu perfil.
unblocked %@
- %@ desbloqueado
+ ha desbloqueado a %@
rcv group event chat item
@@ -7351,6 +7531,11 @@ Los servidores de SimpleX no pueden ver tu perfil.
sí
pref value
+
+ you
+ tu
+ No comment provided by engineer.
+
you are invited to group
has sido invitado a un grupo
diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
index 3e971985ef..a239bebbcf 100644
--- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
+++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff
@@ -715,6 +715,10 @@
Salli lähetettyjen viestien peruuttamaton poistaminen. (24 tuntia)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ No comment provided by engineer.
+
Allow to send files and media.
Salli tiedostojen ja median lähettäminen.
@@ -1036,6 +1040,10 @@
Tiedostoa ei voi vastaanottaa
No comment provided by engineer.
+
+ Cellular
+ No comment provided by engineer.
+
Change
Muuta
@@ -1992,6 +2000,10 @@ This cannot be undone!
Alenna ja avaa keskustelu
No comment provided by engineer.
+
+ Download
+ chat item action
+
Download failed
No comment provided by engineer.
@@ -2097,6 +2109,10 @@ This cannot be undone!
Ota itsetuhoava pääsykoodi käyttöön
set passcode view
+
+ Enabled for
+ No comment provided by engineer.
+
Encrypt
Salaa
@@ -2239,10 +2255,6 @@ This cannot be undone!
Virhe lisättäessä jäseniä
No comment provided by engineer.
-
- Error allowing contact PQ encryption
- No comment provided by engineer.
-
Error changing address
Virhe osoitteenvaihdossa
@@ -2601,6 +2613,10 @@ This cannot be undone!
Tiedostot ja media ovat tässä ryhmässä kiellettyjä.
No comment provided by engineer.
+
+ Files and media not allowed
+ No comment provided by engineer.
+
Files and media prohibited!
Tiedostot ja media kielletty!
@@ -2664,6 +2680,22 @@ This cannot be undone!
Konsoliin
No comment provided by engineer.
+
+ Forward
+ chat item action
+
+
+ Forward and save messages
+ No comment provided by engineer.
+
+
+ Forwarded
+ No comment provided by engineer.
+
+
+ Forwarded from
+ No comment provided by engineer.
+
Found desktop
No comment provided by engineer.
@@ -2770,6 +2802,10 @@ This cannot be undone!
Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ No comment provided by engineer.
+
Group members can send direct messages.
Ryhmän jäsenet voivat lähettää suoraviestejä.
@@ -3004,6 +3040,10 @@ This cannot be undone!
Vastauksena
No comment provided by engineer.
+
+ In-call sounds
+ No comment provided by engineer.
+
Incognito
Incognito
@@ -3460,6 +3500,10 @@ This is your link for group %@!
Viestireaktiot ovat kiellettyjä tässä ryhmässä.
No comment provided by engineer.
+
+ Message source remains private.
+ No comment provided by engineer.
+
Message text
Viestin teksti
@@ -3564,6 +3608,10 @@ This is your link for group %@!
Lisää parannuksia on tulossa pian!
No comment provided by engineer.
+
+ More reliable network connection.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Todennäköisesti tämä yhteys on poistettu.
@@ -3599,6 +3647,14 @@ This is your link for group %@!
Verkko ja palvelimet
No comment provided by engineer.
+
+ Network connection
+ No comment provided by engineer.
+
+
+ Network management
+ No comment provided by engineer.
+
Network settings
Verkkoasetukset
@@ -3707,6 +3763,10 @@ This is your link for group %@!
Ei historiaa
No comment provided by engineer.
+
+ No network connection
+ No comment provided by engineer.
+
No permission to record voice message
Ei lupaa ääniviestin tallentamiseen
@@ -3911,6 +3971,10 @@ This is your link for group %@!
Or show this code
No comment provided by engineer.
+
+ Other
+ No comment provided by engineer.
+
PING count
PING-määrä
@@ -4070,10 +4134,6 @@ Error: %@
Palvelimen osoitteen varmenteen sormenjälki on mahdollisesti virheellinen
server test error
-
- Post-quantum E2EE
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
Säilytä viimeinen viestiluonnos liitteineen.
@@ -4123,6 +4183,10 @@ Error: %@
Profiilikuva
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -4161,6 +4225,10 @@ Error: %@
Estä viestireaktiot.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Estä suorien viestien lähettäminen jäsenille.
@@ -4288,6 +4356,10 @@ Error: %@
Vastaanotto-osoite vaihdetaan toiseen palvelimeen. Osoitteenmuutos tehdään sen jälkeen, kun lähettäjä tulee verkkoon.
No comment provided by engineer.
+
+ Receiving concurrency
+ No comment provided by engineer.
+
Receiving file will be stopped.
Tiedoston vastaanotto pysäytetään.
@@ -4302,6 +4374,10 @@ Error: %@
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).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Vastaanottajat näkevät päivitykset, kun kirjoitat niitä.
@@ -4595,11 +4671,19 @@ Error: %@
Tallenna tervetuloviesti?
No comment provided by engineer.
+
+ Saved
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Tallennetut WebRTC ICE -palvelimet poistetaan
No comment provided by engineer.
+
+ Saved from
+ No comment provided by engineer.
+
Saved message
message info title
@@ -4897,6 +4981,10 @@ Error: %@
Asetukset
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
Jaa
@@ -5013,6 +5101,14 @@ Error: %@
SimpleX links
SimpleX-linkit
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
No comment provided by engineer.
@@ -5049,6 +5145,10 @@ Error: %@
Joku
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
Aloita keskustelu
@@ -5813,6 +5913,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
Ääniviestit ovat kiellettyjä tässä ryhmässä.
No comment provided by engineer.
+
+ Voice messages not allowed
+ No comment provided by engineer.
+
Voice messages prohibited!
Ääniviestit kielletty!
@@ -5880,6 +5984,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
Kun saatavilla
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Kun ihmiset pyytävät yhteyden muodostamista, voit hyväksyä tai hylätä sen.
@@ -5890,6 +5998,18 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
Kun jaat inkognitoprofiilin jonkun kanssa, tätä profiilia käytetään ryhmissä, joihin tämä sinut kutsuu.
No comment provided by engineer.
+
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
No comment provided by engineer.
@@ -6353,6 +6473,10 @@ SimpleX-palvelimet eivät näe profiiliasi.
ylläpitäjä
member role
+
+ admins
+ feature role
+
agreeing encryption for %@…
salauksesta sovitaan %@:lle…
@@ -6363,6 +6487,10 @@ SimpleX-palvelimet eivät näe profiiliasi.
hyväksyy salausta…
chat item text
+
+ all members
+ feature role
+
always
aina
@@ -6685,6 +6813,10 @@ SimpleX-palvelimet eivät näe profiiliasi.
tapahtuma tapahtui
No comment provided by engineer.
+
+ forwarded
+ No comment provided by engineer.
+
group deleted
ryhmä poistettu
@@ -6891,6 +7023,10 @@ SimpleX-palvelimet eivät näe profiiliasi.
omistaja
member role
+
+ owners
+ feature role
+
peer-to-peer
vertais
@@ -6938,6 +7074,14 @@ SimpleX-palvelimet eivät näe profiiliasi.
poisti sinut
rcv group event chat item
+
+ saved
+ No comment provided by engineer.
+
+
+ saved from %@
+ No comment provided by engineer.
+
sec
sek
@@ -7070,6 +7214,10 @@ SimpleX-palvelimet eivät näe profiiliasi.
kyllä
pref value
+
+ you
+ No comment provided by engineer.
+
you are invited to group
sinut on kutsuttu ryhmään
diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
index 1e335c00b0..ac7fc8cc8b 100644
--- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
+++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff
@@ -743,6 +743,11 @@
Autoriser la suppression irréversible de messages envoyés. (24 heures)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Autorise l'envoi de liens SimpleX.
+ No comment provided by engineer.
+
Allow to send files and media.
Permet l'envoi de fichiers et de médias.
@@ -1083,6 +1088,11 @@
Impossible de recevoir le fichier
No comment provided by engineer.
+
+ Cellular
+ Cellulaire
+ No comment provided by engineer.
+
Change
Changer
@@ -2078,6 +2088,11 @@ Cette opération ne peut être annulée !
Rétrograder et ouvrir le chat
No comment provided by engineer.
+
+ Download
+ Télécharger
+ chat item action
+
Download failed
Échec du téléchargement
@@ -2188,6 +2203,11 @@ Cette opération ne peut être annulée !
Activer le code d'autodestruction
set passcode view
+
+ Enabled for
+ Activé pour
+ No comment provided by engineer.
+
Encrypt
Chiffrer
@@ -2338,11 +2358,6 @@ Cette opération ne peut être annulée !
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
@@ -2713,6 +2728,11 @@ Cette opération ne peut être annulée !
Les fichiers et les médias sont interdits dans ce groupe.
No comment provided by engineer.
+
+ Files and media not allowed
+ Fichiers et médias non autorisés
+ No comment provided by engineer.
+
Files and media prohibited!
Fichiers et médias interdits !
@@ -2778,6 +2798,26 @@ Cette opération ne peut être annulée !
Pour la console
No comment provided by engineer.
+
+ Forward
+ Transférer
+ chat item action
+
+
+ Forward and save messages
+ Transférer et sauvegarder des messages
+ No comment provided by engineer.
+
+
+ Forwarded
+ Transféré
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Transféré depuis
+ No comment provided by engineer.
+
Found desktop
Bureau trouvé
@@ -2888,6 +2928,11 @@ Cette opération ne peut être annulée !
Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ Les membres du groupe peuvent envoyer des liens SimpleX.
+ No comment provided by engineer.
+
Group members can send direct messages.
Les membres du groupe peuvent envoyer des messages directs.
@@ -3128,6 +3173,11 @@ Cette opération ne peut être annulée !
En réponse à
No comment provided by engineer.
+
+ In-call sounds
+ Sons d'appel
+ No comment provided by engineer.
+
Incognito
Incognito
@@ -3603,6 +3653,11 @@ Voici votre lien pour le groupe %@ !
Les réactions aux messages sont interdites dans ce groupe.
No comment provided by engineer.
+
+ Message source remains private.
+ La source du message reste privée.
+ No comment provided by engineer.
+
Message text
Texte du message
@@ -3718,6 +3773,11 @@ Voici votre lien pour le groupe %@ !
Plus d'améliorations à venir !
No comment provided by engineer.
+
+ More reliable network connection.
+ Connexion réseau plus fiable.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Connexion probablement supprimée.
@@ -3753,6 +3813,16 @@ Voici votre lien pour le groupe %@ !
Réseau et serveurs
No comment provided by engineer.
+
+ Network connection
+ Connexion au réseau
+ No comment provided by engineer.
+
+
+ Network management
+ Gestion du réseau
+ No comment provided by engineer.
+
Network settings
Paramètres réseau
@@ -3863,6 +3933,11 @@ Voici votre lien pour le groupe %@ !
Aucun historique
No comment provided by engineer.
+
+ No network connection
+ Pas de connexion au réseau
+ No comment provided by engineer.
+
No permission to record voice message
Pas l'autorisation d'enregistrer un message vocal
@@ -4077,6 +4152,11 @@ Voici votre lien pour le groupe %@ !
Ou présenter ce code
No comment provided by engineer.
+
+ Other
+ Autres
+ No comment provided by engineer.
+
PING count
Nombre de PING
@@ -4244,11 +4324,6 @@ Erreur : %@
Il est possible que l'empreinte du certificat dans l'adresse du serveur soit incorrecte
server test error
-
- 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.
@@ -4299,6 +4374,11 @@ Erreur : %@
Image de profil
No comment provided by engineer.
+
+ Profile images
+ Images de profil
+ No comment provided by engineer.
+
Profile name
Nom du profil
@@ -4339,6 +4419,11 @@ Erreur : %@
Interdire les réactions aux messages.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ Interdire l'envoi de liens SimpleX.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Interdire l'envoi de messages directs aux membres.
@@ -4469,6 +4554,11 @@ Erreur : %@
L'adresse de réception sera changée pour un autre serveur. Le changement d'adresse sera terminé lorsque l'expéditeur sera en ligne.
No comment provided by engineer.
+
+ Receiving concurrency
+ Réception simultanée
+ No comment provided by engineer.
+
Receiving file will be stopped.
La réception du fichier sera interrompue.
@@ -4484,6 +4574,11 @@ Erreur : %@
Historique récent et amélioration du [bot annuaire](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ Le(s) destinataire(s) ne peut(vent) pas voir de qui provient ce message.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Les destinataires voient les mises à jour au fur et à mesure que vous leur écrivez.
@@ -4784,11 +4879,21 @@ Erreur : %@
Enregistrer le message d'accueil ?
No comment provided by engineer.
+
+ Saved
+ Enregistré
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Les serveurs WebRTC ICE sauvegardés seront supprimés
No comment provided by engineer.
+
+ Saved from
+ Enregistré depuis
+ No comment provided by engineer.
+
Saved message
Message enregistré
@@ -5094,6 +5199,11 @@ Erreur : %@
Paramètres
No comment provided by engineer.
+
+ Shape profile images
+ Images de profil modelable
+ No comment provided by engineer.
+
Share
Partager
@@ -5212,6 +5322,16 @@ Erreur : %@
SimpleX links
Liens SimpleX
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ Les liens SimpleX sont interdits dans ce groupe.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ Les liens SimpleX ne sont pas autorisés
No comment provided by engineer.
@@ -5249,6 +5369,11 @@ Erreur : %@
Quelqu'un
notification title
+
+ Square, circle, or anything in between.
+ Carré, circulaire, ou toute autre forme intermédiaire.
+ No comment provided by engineer.
+
Start chat
Démarrer le chat
@@ -6050,6 +6175,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
Les messages vocaux sont interdits dans ce groupe.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Les messages vocaux ne sont pas autorisés
+ No comment provided by engineer.
+
Voice messages prohibited!
Messages vocaux interdits !
@@ -6120,6 +6250,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
Quand disponible
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ Lors des appels audio et vidéo.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Vous pouvez accepter ou refuser les demandes de contacts.
@@ -6130,6 +6265,21 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
Lorsque vous partagez un profil incognito avec quelqu'un, ce profil sera utilisé pour les groupes auxquels il vous invite.
No comment provided by engineer.
+
+ WiFi
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ Activé dans les discussions directes !
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Ethernet câblé
+ No comment provided by engineer.
+
With encrypted files and media.
Avec les fichiers et les médias chiffrés.
@@ -6613,6 +6763,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
admin
member role
+
+ admins
+ admins
+ feature role
+
agreeing encryption for %@…
négociation du chiffrement avec %@…
@@ -6623,6 +6778,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
négociation du chiffrement…
chat item text
+
+ all members
+ tous les membres
+ feature role
+
always
toujours
@@ -6953,6 +7113,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
event happened
No comment provided by engineer.
+
+ forwarded
+ transféré
+ No comment provided by engineer.
+
group deleted
groupe supprimé
@@ -7160,6 +7325,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
propriétaire
member role
+
+ owners
+ propriétaires
+ feature role
+
peer-to-peer
pair-à-pair
@@ -7210,6 +7380,16 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
vous a retiré
rcv group event chat item
+
+ saved
+ enregistré
+ No comment provided by engineer.
+
+
+ saved from %@
+ enregistré à partir de %@
+ No comment provided by engineer.
+
sec
sec
@@ -7350,6 +7530,11 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.
oui
pref value
+
+ you
+ vous
+ No comment provided by engineer.
+
you are invited to group
vous êtes invité·e au groupe
diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
index 546bdf23d3..ad3148d891 100644
--- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
+++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff
@@ -54,7 +54,7 @@
## In reply to
- ## Válaszul erre
+ ## Válaszul erre:
copied message info
@@ -94,26 +94,27 @@
%@ and %@ connected
- %@ és %@ csatlakozott
+ %@ és %@ kapcsolódott
No comment provided by engineer.
%1$@ at %2$@:
- %1$@ %2$@-kor:
+ %1$@ ekkor: %2$@
copied message info, <sender> at <time>
%@ connected
- %@ csatlakozott
+ %@ kapcsolódott
No comment provided by engineer.
%@ downloaded
+ %@ letöltve
No comment provided by engineer.
%@ is connected!
- %@ csatlakozott!
+ %@ kapcsolódott!
notification title
@@ -133,11 +134,12 @@
%@ uploaded
+ %@ feltöltve
No comment provided by engineer.
%@ wants to connect!
- %@ csatlakozni szeretne!
+ %@ kapcsolódni szeretne!
notification title
@@ -147,7 +149,7 @@
%@, %@ and %lld other members connected
- %@, %@ és további %lld tag csatlakozott
+ %@, %@ és további %lld tag kapcsolódott
No comment provided by engineer.
@@ -182,7 +184,7 @@
%d skipped message(s)
- %d kihagyott üzenet
+ %d üzenet kihagyva
integrity error chat item
@@ -237,7 +239,7 @@
%lld messages moderated by %@
- %@ %lld üzenetet moderált
+ %lld üzenet moderálva lett %@ által
No comment provided by engineer.
@@ -302,7 +304,7 @@
%u messages skipped.
- %u kihagyott üzenet.
+ %u üzenet kihagyva.
No comment provided by engineer.
@@ -317,7 +319,7 @@
(this device v%@)
- (ez az eszköz v%@)
+ (ez az eszköz: v%@)
No comment provided by engineer.
@@ -327,7 +329,7 @@
**Add contact**: to create a new invitation link, or connect via a link you received.
- **Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő csatlakozáshoz.
+ **Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.
No comment provided by engineer.
@@ -352,6 +354,7 @@
**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.
+ **Megjegyzés**: ha két eszközön is ugyanazt az adatbázist használja, akkor biztonsági védelemként megszakítja a kapcsolataiból érkező üzenetek visszafejtését.
No comment provided by engineer.
@@ -371,6 +374,7 @@
**Warning**: the archive will be removed.
+ **Figyelem**: az archívum törlésre kerül.
No comment provided by engineer.
@@ -397,7 +401,7 @@
- connect to [directory service](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) (BETA)!
- delivery receipts (up to 20 members).
- faster and more stable.
- - kapcsolódás a [könyvtár szolgáltatáshoz] (simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2Ld3%3DWpxkKFeXSPv3pwp %2F%3Fv%3D1-2%26dh %3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6glco6bqjETA)4Beklco6bqj)
+ - kapcsolódás a [könyvtár szolgáltatáshoz](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) (BETA)!
- kézbesítési jelentések (legfeljebb 20 tag).
- gyorsabb és stabilabb.
No comment provided by engineer.
@@ -581,7 +585,7 @@
Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts.
- Azonosító hozzáadása a profilhoz, hogy az ismerősök megoszthassák másokkal. A profilfrissítés elküldésre kerül ismerősők számára.
+ Azonosító hozzáadása a profilhoz, hogy az ismerősei megoszthassák másokkal. A profilfrissítés elküldésre kerül az ismerősei számára.
No comment provided by engineer.
@@ -631,11 +635,12 @@
Admins can block a member for all.
+ Az adminok egy tagot mindenki számára letilthatnak.
No comment provided by engineer.
Admins can create the links to join groups.
- Az adminok hivatkozásokat hozhatnak létre a csoportokhoz való csatlakozáshoz.
+ Az adminok hivatkozásokat hozhatnak létre a csoportokhoz való kapcsolódáshoz.
No comment provided by engineer.
@@ -650,7 +655,7 @@
All chats and messages will be deleted - this cannot be undone!
- Minden csevegés és üzenet törlésre kerül - ez nem vonható vissza!
+ Minden csevegés és üzenet törlésre kerül - ez a művelet nem vonható vissza!
No comment provided by engineer.
@@ -660,17 +665,17 @@
All group members will remain connected.
- Minden csoporttag csatlakoztatva marad.
+ Minden csoporttag kapcsolódva marad.
No comment provided by engineer.
All messages will be deleted - this cannot be undone!
- Minden üzenet törlésre kerül – ez nem vonható vissza!
+ Minden üzenet törlésre kerül – ez a művelet nem vonható vissza!
No comment provided by engineer.
All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.
- Minden üzenet törlésre kerül - ezt nem vonható vissza! Az üzenetek CSAK az ön számára törlődnek.
+ Minden üzenet törlésre kerül - ez a művelet nem vonható vissza! Az üzenetek CSAK az ön számára törlődnek.
No comment provided by engineer.
@@ -680,7 +685,7 @@
All your contacts will remain connected.
- Minden ismerős csatlakoztatva marad.
+ Minden ismerős kapcsolódva marad.
No comment provided by engineer.
@@ -690,6 +695,7 @@
All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.
+ Minden ismerőse, a beszélgetései és a fájljai biztonságosan titkosításra kerülnek, melyek részletekben feltöltődnek a beállított XFTP átjátszókra.
No comment provided by engineer.
@@ -724,7 +730,7 @@
Allow sending direct messages to members.
- Közvetlen üzenetek küldésének engedélyezése tagok részére.
+ Közvetlen üzenetek küldésének engedélyezése a tagok számára.
No comment provided by engineer.
@@ -734,7 +740,12 @@
Allow to irreversibly delete sent messages. (24 hours)
- Elküldött üzenetek visszafordíthatatlan törlésének engedélyezése. (24 óra)
+ Elküldött üzenetek végleges törlésének engedélyezése. (24 óra)
+ No comment provided by engineer.
+
+
+ Allow to send SimpleX links.
+ A SimpleX hivatkozások küldése engedélyezve van.
No comment provided by engineer.
@@ -769,7 +780,7 @@
Allow your contacts to irreversibly delete sent messages. (24 hours)
- Elküldött üzenetek visszafordíthatatlan törlésének engedélyezése ismerősök számára. (24 óra)
+ Elküldött üzenetek végleges törlésének engedélyezése az ismerősök számára. (24 óra)
No comment provided by engineer.
@@ -784,7 +795,7 @@
Already connected?
- Csatlakoztatva?
+ Már kapcsolódott?
No comment provided by engineer.
@@ -794,7 +805,7 @@
Already joining the group!
- Csatlakozás folyamatban!
+ A csatlakozás folyamatban van a csoporthoz!
No comment provided by engineer.
@@ -819,6 +830,7 @@
App data migration
+ Alkalmazásadatok átköltöztetése
No comment provided by engineer.
@@ -858,14 +870,17 @@
Apply
+ Alkalmaz
No comment provided by engineer.
Archive and upload
+ Archiválás és feltöltés
No comment provided by engineer.
Archiving database
+ Adatbázis archiválása
No comment provided by engineer.
@@ -900,12 +915,12 @@
Authentication failed
- Hitelesítés sikertelen
+ Sikertelen hitelesítés
No comment provided by engineer.
Authentication is required before the call is connected, but you may miss calls.
- A hívás csatlakoztatása előtt hitelesítésre van szükség, de előfordulhat, hogy nem tud hívásokat fogadni.
+ A hívás összekapcsolása előtt hitelesítésre van szükség, de előfordulhat, hogy lemarad a hívásokról.
No comment provided by engineer.
@@ -1000,7 +1015,7 @@
Both you and your contact can irreversibly delete sent messages. (24 hours)
- Mindkét fél visszafordíthatatlanul törölheti az elküldött üzeneteket. (24 óra)
+ Mindkét fél törölheti véglegesen az elküldött üzeneteket. (24 óra)
No comment provided by engineer.
@@ -1055,11 +1070,12 @@
Cancel
- Megszakítás
+ Mégse
No comment provided by engineer.
Cancel migration
+ Átköltöztetés visszavonása
No comment provided by engineer.
@@ -1072,6 +1088,11 @@
Nem lehet fogadni a fájlt
No comment provided by engineer.
+
+ Cellular
+ Mobilhálózat
+ No comment provided by engineer.
+
Change
Változtatás
@@ -1165,6 +1186,7 @@
Chat migrated!
+ A csevegés átköltöztetve!
No comment provided by engineer.
@@ -1189,6 +1211,7 @@
Choose _Migrate from another device_ on the new device and scan QR code.
+ Válassza az _Átköltöztetés egy másik eszközről_ opciót az új eszközön és szkennelje be a QR-kódot.
No comment provided by engineer.
@@ -1263,6 +1286,7 @@
Confirm network settings
+ Hálózati beállítások megerősítése
No comment provided by engineer.
@@ -1277,10 +1301,12 @@
Confirm that you remember database passphrase to migrate it.
+ Erősítse meg, hogy emlékszik az adatbázis jelmondatára az átköltöztetéshez.
No comment provided by engineer.
Confirm upload
+ Feltöltés megerősítése
No comment provided by engineer.
@@ -1295,7 +1321,7 @@
Connect incognito
- Inkognítóban csatlakozva
+ Kapcsolódás inkognitóban
No comment provided by engineer.
@@ -1324,7 +1350,7 @@ Ez az egyszer használatos hivatkozása!
Connect via contact address
- Kapcsolódás ismerős azonosítója által
+ Kapcsolódás a kapcsolattartási azonosítón keresztül
No comment provided by engineer.
@@ -1349,7 +1375,7 @@ Ez az egyszer használatos hivatkozása!
Connected to desktop
- Csatlakozva a számítógéphez
+ Kapcsolódva a számítógéphez
No comment provided by engineer.
@@ -1414,12 +1440,12 @@ Ez az egyszer használatos hivatkozása!
Contact is connected
- Ismerős csatlakozott
+ Ismerőse kapcsolódott
notification
Contact is not connected yet!
- Az ismerős még nem csatlakozott!
+ Az ismerőse még nem kapcsolódott!
No comment provided by engineer.
@@ -1529,7 +1555,7 @@ Ez az egyszer használatos hivatkozása!
Created at
- Létrehozva ekkor
+ Létrehozva ekkor:
No comment provided by engineer.
@@ -1544,6 +1570,7 @@ Ez az egyszer használatos hivatkozása!
Creating archive link
+ Archív hivatkozás létrehozása
No comment provided by engineer.
@@ -1758,7 +1785,7 @@ Ez az egyszer használatos hivatkozása!
Delete contact?
This cannot be undone!
Ismerős törlése?
-Ezt nem vonható vissza!
+Ez a művelet nem vonható vissza!
No comment provided by engineer.
@@ -1768,6 +1795,7 @@ Ezt nem vonható vissza!
Delete database from this device
+ Adatbázis törlése erről az eszközről
No comment provided by engineer.
@@ -1877,7 +1905,7 @@ Ezt nem vonható vissza!
Deleted at
- Törölve ekkor
+ Törölve ekkor:
No comment provided by engineer.
@@ -1997,7 +2025,7 @@ Ezt nem vonható vissza!
Disappears at
- Eltűnik ekkor
+ Eltűnik ekkor:
No comment provided by engineer.
@@ -2037,7 +2065,7 @@ Ezt nem vonható vissza!
Do not send history to new members.
- Ne küldjön előzményeket új tagok részére.
+ Az előzmények ne kerüljenek elküldésre az új tagok számára.
No comment provided by engineer.
@@ -2060,8 +2088,14 @@ Ezt nem vonható vissza!
Visszatérés a korábbi verzióra és a csevegés megnyitása
No comment provided by engineer.
+
+ Download
+ Letöltés
+ chat item action
+
Download failed
+ Sikertelen letöltés
No comment provided by engineer.
@@ -2071,10 +2105,12 @@ Ezt nem vonható vissza!
Downloading archive
+ Archívum letöltése
No comment provided by engineer.
Downloading link details
+ Letöltési hivatkozás részletei
No comment provided by engineer.
@@ -2129,11 +2165,12 @@ Ezt nem vonható vissza!
Enable for all
- Engedélyezés mindenki részére
+ Engedélyezés mindenki számára
No comment provided by engineer.
Enable in direct chats (BETA)!
+ Engedélyezés a közvetlen csevegésekben (BÉTA)!
No comment provided by engineer.
@@ -2166,6 +2203,11 @@ Ezt nem vonható vissza!
Önmegsemmisítő jelkód engedélyezése
set passcode view
+
+ Enabled for
+ Engedélyezve
+ No comment provided by engineer.
+
Encrypt
Titkosít
@@ -2208,7 +2250,7 @@ Ezt nem vonható vissza!
Encrypted message: database migration error
- Titkosított üzenet: adatbázis-migrációs hiba
+ Titkosított üzenet: adatbázis-átköltöztetés hiba
notification
@@ -2233,7 +2275,7 @@ Ezt nem vonható vissza!
Encryption re-negotiation failed.
- Titkosítás újraegyeztetése sikertelen.
+ Sikertelen titkosítás-újraegyeztetés.
No comment provided by engineer.
@@ -2253,6 +2295,7 @@ Ezt nem vonható vissza!
Enter passphrase
+ Jelmondat megadása
No comment provided by engineer.
@@ -2287,7 +2330,7 @@ Ezt nem vonható vissza!
Enter your name…
- Adja meg nevét…
+ Adjon meg egy nevet…
No comment provided by engineer.
@@ -2315,10 +2358,6 @@ Ezt nem vonható vissza!
Hiba a tag(-ok) hozzáadásakor
No comment provided by engineer.
-
- Error allowing contact PQ encryption
- No comment provided by engineer.
-
Error changing address
Hiba az azonosító megváltoztatásakor
@@ -2411,6 +2450,7 @@ Ezt nem vonható vissza!
Error downloading the archive
+ Hiba az archívum letöltésekor
No comment provided by engineer.
@@ -2490,6 +2530,7 @@ Ezt nem vonható vissza!
Error saving settings
+ Hiba a beállítások mentésekor
when migrating
@@ -2564,10 +2605,12 @@ Ezt nem vonható vissza!
Error uploading the archive
+ Hiba az archívum feltöltésekor
No comment provided by engineer.
Error verifying passphrase:
+ Hiba a jelmondat ellenőrzésekor:
No comment provided by engineer.
@@ -2622,6 +2665,7 @@ Ezt nem vonható vissza!
Exported file doesn't exist
+ Az exportált fájl nem létezik
No comment provided by engineer.
@@ -2656,12 +2700,12 @@ Ezt nem vonható vissza!
File will be received when your contact completes uploading it.
- A fájl akkor érkezik meg, amikor ismerőse befejezte annak feltöltést.
+ A fájl akkor érkezik meg, amikor a küldője befejezte annak feltöltését.
No comment provided by engineer.
File will be received when your contact is online, please wait or check later!
- A fájl akkor érkezik meg, amint ismerőse online lesz, várjon, vagy ellenőrizze később!
+ A fájl akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!
No comment provided by engineer.
@@ -2684,6 +2728,11 @@ Ezt nem vonható vissza!
A fájlok- és a médiatartalom küldése le van tiltva ebben a csoportban.
No comment provided by engineer.
+
+ Files and media not allowed
+ Fájlok és média tartalom küldése le van tiltva
+ No comment provided by engineer.
+
Files and media prohibited!
A fájlok- és a médiatartalom küldése le van tiltva!
@@ -2696,10 +2745,12 @@ Ezt nem vonható vissza!
Finalize migration
+ Átköltöztetés véglegesítése
No comment provided by engineer.
Finalize migration on another device.
+ Átköltöztetés véglegesítése egy másik eszközön.
No comment provided by engineer.
@@ -2747,6 +2798,26 @@ Ezt nem vonható vissza!
Konzolhoz
No comment provided by engineer.
+
+ Forward
+ Továbbítás
+ chat item action
+
+
+ Forward and save messages
+ Üzenetek továbbítása és mentése
+ No comment provided by engineer.
+
+
+ Forwarded
+ Továbbított
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Továbbítva innen:
+ No comment provided by engineer.
+
Found desktop
Megtalált számítógép
@@ -2834,7 +2905,7 @@ Ezt nem vonható vissza!
Group invitation is no longer valid, it was removed by sender.
- A csoport meghívó már nem érvényes, el lett távolítva a küldője által.
+ A csoport meghívó már nem érvényes, a küldője törölte.
No comment provided by engineer.
@@ -2854,27 +2925,32 @@ Ezt nem vonható vissza!
Group members can irreversibly delete sent messages. (24 hours)
- Csoporttagok visszafordíthatatlanul törölhetik az elküldött üzeneteket. (24 óra)
+ A csoport tagjai véglegesen törölhetik az elküldött üzeneteiket. (24 óra)
+ No comment provided by engineer.
+
+
+ Group members can send SimpleX links.
+ A csoport tagjai küldhetnek SimpleX hivatkozásokat.
No comment provided by engineer.
Group members can send direct messages.
- Csoporttagok küldhetnek közvetlen üzeneteket.
+ A csoport tagjai küldhetnek egymásnak közvetlen üzeneteket.
No comment provided by engineer.
Group members can send disappearing messages.
- Csoporttagok küldhetnek eltűnő üzeneteket.
+ A csoport tagjai küldhetnek eltűnő üzeneteket.
No comment provided by engineer.
Group members can send files and media.
- Csoporttagok küldhetnek fájlokat és médiatartalmakat.
+ A csoport tagjai küldhetnek fájlokat és médiatartalmakat.
No comment provided by engineer.
Group members can send voice messages.
- Csoporttagok küldhetnek hangüzeneteket.
+ A csoport tagjai küldhetnek hangüzeneteket.
No comment provided by engineer.
@@ -2909,12 +2985,12 @@ Ezt nem vonható vissza!
Group will be deleted for all members - this cannot be undone!
- Csoport törlésre kerül minden tag számára - ez nem vonható vissza!
+ Csoport törlésre kerül minden tag számára - ez a művelet nem vonható vissza!
No comment provided by engineer.
Group will be deleted for you - this cannot be undone!
- A csoport törlésre kerül az ön részére - ez nem vonható vissza!
+ A csoport törlésre kerül az ön számára - ez a művelet nem vonható vissza!
No comment provided by engineer.
@@ -2964,7 +3040,7 @@ Ezt nem vonható vissza!
History is not sent to new members.
- Az előzmények nem kerülnek elküldésre új tagok részére.
+ Az előzmények nem kerülnek elküldésre az új tagok számára.
No comment provided by engineer.
@@ -2994,6 +3070,7 @@ Ezt nem vonható vissza!
Hungarian interface
+ Magyar kezelőfelület
No comment provided by engineer.
@@ -3008,7 +3085,7 @@ Ezt nem vonható vissza!
If you enter this passcode when opening the app, all app data will be irreversibly removed!
- Ha az alkalmazás megnyitásakor megadja ezt a jelkódot, az összes alkalmazásadat visszafordíthatatlanul törlődik!
+ Ha az alkalmazás megnyitásakor megadja ezt a jelkódot, az összes alkalmazásadat véglegesen törlődik!
No comment provided by engineer.
@@ -3028,12 +3105,12 @@ Ezt nem vonható vissza!
Image will be received when your contact completes uploading it.
- A kép akkor érkezik meg, amikor ismerőse befejezte annak feltöltését.
+ A kép akkor érkezik meg, amikor a küldője befejezte annak feltöltését.
No comment provided by engineer.
Image will be received when your contact is online, please wait or check later!
- A kép akkor érkezik meg, amikor ismerős elérhető lesz, várjon vagy ellenőrizze később!
+ A kép akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!
No comment provided by engineer.
@@ -3063,10 +3140,12 @@ Ezt nem vonható vissza!
Import failed
+ Sikertelen importálás
No comment provided by engineer.
Importing archive
+ Archívum importálása
No comment provided by engineer.
@@ -3086,6 +3165,7 @@ Ezt nem vonható vissza!
In order to continue, chat should be stopped.
+ A folytatáshoz a csevegést meg kell szakítani.
No comment provided by engineer.
@@ -3093,6 +3173,11 @@ Ezt nem vonható vissza!
Válasz neki
No comment provided by engineer.
+
+ In-call sounds
+ Bejövő hívás csengőhangja
+ No comment provided by engineer.
+
Incognito
Inkognitó
@@ -3202,6 +3287,7 @@ Ezt nem vonható vissza!
Invalid migration confirmation
+ Érvénytelen átköltöztetési visszaigazolás
No comment provided by engineer.
@@ -3246,17 +3332,17 @@ Ezt nem vonható vissza!
Irreversible message deletion
- Visszafordíthatatlan üzenettörlés
+ Végleges üzenettörlés
No comment provided by engineer.
Irreversible message deletion is prohibited in this chat.
- Ebben a csevegésben az üzenetek visszafordíthatatlan törlése le van tiltva.
+ Ebben a csevegésben az üzenetek végleges törlése le van tiltva.
No comment provided by engineer.
Irreversible message deletion is prohibited in this group.
- Ebben a csoportban az üzenetek visszafordíthatatlan törlése le van tiltva.
+ Ebben a csoportban az üzenetek végleges törlése le van tiltva.
No comment provided by engineer.
@@ -3282,7 +3368,7 @@ Ezt nem vonható vissza!
It seems like you are already connected via this link. If it is not the case, there was an error (%@).
- Úgy tűnik, már csatlakozott ezen a hivatkozáson keresztül. Ha ez nem így van, akkor hiba történt (%@).
+ Úgy tűnik, már kapcsolódott ezen a hivatkozáson keresztül. Ha ez nem így van, akkor hiba történt (%@).
No comment provided by engineer.
@@ -3474,7 +3560,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Make profile private!
- Tegye priváttá profilját!
+ Tegye priváttá a profilját!
No comment provided by engineer.
@@ -3534,7 +3620,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Member will be removed from group - this cannot be undone!
- A tag eltávolítása a csoportból - ez nem vonható vissza!
+ A tag eltávolítása a csoportból - ez a művelet nem vonható vissza!
No comment provided by engineer.
@@ -3567,6 +3653,11 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Ebben a csoportban az üzenetreakciók le vannak tiltva.
No comment provided by engineer.
+
+ Message source remains private.
+ Az üzenet forrása titokban marad.
+ No comment provided by engineer.
+
Message text
Üzenet szövege
@@ -3574,6 +3665,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Message too large
+ Az üzenet túl nagy
No comment provided by engineer.
@@ -3593,34 +3685,42 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.
+ Az üzeneteket, fájlokat és hívásokat **végpontok közötti titkosítással** és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.
No comment provided by engineer.
Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.
+ Az üzeneteket, fájlokat és hívásokat **végpontok közötti kvantumrezisztens titkosítással** és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.
No comment provided by engineer.
Migrate device
+ Eszköz átköltöztetése
No comment provided by engineer.
Migrate from another device
+ Átköltöztetés egy másik eszközről
No comment provided by engineer.
Migrate here
+ Átköltöztetés ide
No comment provided by engineer.
Migrate to another device
+ Átköltöztetés egy másik eszközre
No comment provided by engineer.
Migrate to another device via QR code.
+ Átköltöztetés egy másik eszközre QR-kód használatával.
No comment provided by engineer.
Migrating
+ Átköltöztetés
No comment provided by engineer.
@@ -3630,26 +3730,27 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Migration complete
+ Átköltöztetés befejezve
No comment provided by engineer.
Migration error:
- Migrációs hiba:
+ Átköltöztetés hiba:
No comment provided by engineer.
Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat).
- Sikertelen migráció. Koppintson a **Kihagyás** lehetőségre az aktuális adatbázis használatának folytatásához. Kérjük, jelentse a problémát az alkalmazás fejlesztőinek csevegésben vagy e-mailben [chat@simplex.chat](mailto:chat@simplex.chat).
+ Sikertelen átköltöztetés. Koppintson a **Kihagyás** lehetőségre az aktuális adatbázis használatának folytatásához. Jelentse a problémát az alkalmazás fejlesztőinek csevegésben vagy e-mailben [chat@simplex.chat](mailto:chat@simplex.chat).
No comment provided by engineer.
Migration is completed
- A migráció befejeződött
+ Az átköltöztetés befejeződött
No comment provided by engineer.
Migrations: %@
- Migrációk: %@
+ Átköltöztetések: %@
No comment provided by engineer.
@@ -3659,12 +3760,12 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Moderated at
- Moderálva ekkor
+ Moderálva lett ekkor:
No comment provided by engineer.
Moderated at: %@
- Moderálva ekkor: %@
+ Moderálva lett ekkor: %@
copied message info
@@ -3672,6 +3773,11 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Hamarosan további fejlesztések érkeznek!
No comment provided by engineer.
+
+ More reliable network connection.
+ Megbízhatóbb hálózati kapcsolat.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Valószínűleg ez a kapcsolat törlésre került.
@@ -3707,6 +3813,16 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Hálózat és kiszolgálók
No comment provided by engineer.
+
+ Network connection
+ Internetkapcsolat
+ No comment provided by engineer.
+
+
+ Network management
+ Hálózatkezelés
+ No comment provided by engineer.
+
Network settings
Hálózati beállítások
@@ -3817,6 +3933,11 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Nincsenek előzmények
No comment provided by engineer.
+
+ No network connection
+ Nincs hálózati kapcsolat
+ No comment provided by engineer.
+
No permission to record voice message
Nincs engedély a hangüzenet rögzítésére
@@ -3883,17 +4004,17 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Onion hosts will be required for connection. Requires enabling VPN.
- A csatlakozáshoz Onion host-okra lesz szükség. VPN engedélyezése szükséges.
+ A kapcsolódáshoz Onion kiszolgálókra lesz szükség. VPN engedélyezése szükséges.
No comment provided by engineer.
Onion hosts will be used when available. Requires enabling VPN.
- Onion host-ok használata, ha azok rendelkezésre állnak. VPN engedélyezése szükséges.
+ Onion kiszolgálók használata, ha azok rendelkezésre állnak. VPN engedélyezése szükséges.
No comment provided by engineer.
Onion hosts will not be used.
- Onion host-ok nem lesznek használva.
+ Onion kiszolgálók nem lesznek használva.
No comment provided by engineer.
@@ -3923,7 +4044,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)
- Visszafordíthatatlanul csak ön törölhet üzeneteket (ismerőse csak törlésre jelölheti őket ). (24 óra)
+ Véglegesen csak ön törölhet üzeneteket (ismerőse csak törlésre jelölheti meg őket ). (24 óra)
No comment provided by engineer.
@@ -3948,7 +4069,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)
- Csak az ismerős tud visszafordíthatatlanul törölni üzeneteket (megjelölheti őket törlésre). (24 óra)
+ Csak az ismerőse tudja az üzeneteket véglegesen törölni (ön csak törlésre jelölheti meg azokat). (24 óra)
No comment provided by engineer.
@@ -3993,6 +4114,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Open migration to another device
+ Átköltöztetés megkezdése egy másik eszközre
authentication reason
@@ -4012,6 +4134,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Or paste archive link
+ Vagy az archívum hivatkozásának beillesztése
No comment provided by engineer.
@@ -4021,6 +4144,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Or securely share this file link
+ Vagy a fájl hivítkozásának biztonságos megosztása
No comment provided by engineer.
@@ -4028,6 +4152,11 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Vagy mutassa meg ezt a kódot
No comment provided by engineer.
+
+ Other
+ További
+ No comment provided by engineer.
+
PING count
PING számláló
@@ -4065,7 +4194,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Password to show
- Jelszó mutatása
+ Jelszó megjelenítése
No comment provided by engineer.
@@ -4085,7 +4214,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Paste link to connect!
- Hivatkozás beillesztése a csatlakozáshoz!
+ Hivatkozás beillesztése a kapcsolódáshoz!
No comment provided by engineer.
@@ -4110,6 +4239,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Picture-in-picture calls
+ Kép a képben hívások
No comment provided by engineer.
@@ -4124,7 +4254,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Please check your network connection with %@ and try again.
- Kérjük, ellenőrizze hálózati kapcsolatát a(z) %@ segítségével, és próbálja újra.
+ Ellenőrizze hálózati kapcsolatát a(z) %@ segítségével, és próbálja újra.
No comment provided by engineer.
@@ -4134,6 +4264,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!
Please confirm that network settings are correct for this device.
+ Ellenőrizze, hogy a hálózati beállítások megfelelőek-e ehhez az eszközhöz.
No comment provided by engineer.
@@ -4155,7 +4286,7 @@ Hiba: %@
Please enter the previous password after restoring database backup. This action can not be undone.
- Előző jelszó megadása az adatbázis biztonsági mentésének visszaállítása után. Ez a művelet nem visszavonható.
+ Előző jelszó megadása az adatbázis biztonsági mentésének visszaállítása után. Ez a művelet nem vonható vissza.
No comment provided by engineer.
@@ -4170,7 +4301,7 @@ Hiba: %@
Please restart the app and migrate the database to enable push notifications.
- Indítsa újra az alkalmazást az adatbázis-migrációhoz szükséges push értesítések engedélyezéséhez.
+ Indítsa újra az alkalmazást az adatbázis-átköltöztetéséhez szükséges push értesítések engedélyezéséhez.
No comment provided by engineer.
@@ -4193,10 +4324,6 @@ Hiba: %@
Lehetséges, hogy a kiszolgáló címében szereplő tanúsítvány-ujjlenyomat helytelen
server test error
-
- Post-quantum E2EE
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
Az utolsó üzenet tervezetének megőrzése a mellékletekkel együtt.
@@ -4247,6 +4374,11 @@ Hiba: %@
Profilkép
No comment provided by engineer.
+
+ Profile images
+ Profilképek
+ No comment provided by engineer.
+
Profile name
Profilnév
@@ -4287,9 +4419,14 @@ Hiba: %@
Az üzenetreakciók tiltása.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ A SimpleX hivatkozások küldése le van tiltva.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
- Közvetlen üzenetek küldésének letiltása tagok részére.
+ Közvetlen üzenetek küldésének letiltása a tagok számára.
No comment provided by engineer.
@@ -4309,7 +4446,7 @@ Hiba: %@
Protect app screen
- App képernyőjének védelme
+ Alkalmazás képernyőjének védelme
No comment provided by engineer.
@@ -4334,10 +4471,12 @@ Hiba: %@
Push server
+ Push kiszolgáló
No comment provided by engineer.
Quantum resistant encryption
+ Kvantumrezisztens titkosítás
No comment provided by engineer.
@@ -4362,17 +4501,17 @@ Hiba: %@
Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).
- További információ a [Felhasználói útmutatóban](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).
+ További információ a [Használati útmutatóban](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).
- További információ a [Felhasználói útmutatóban](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).
+ További információ a [Használati útmutatóban](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).
- További információ a [Felhasználói útmutatóban](https://simplex.chat/docs/guide/readme.html#connect-to-friends).
+ További információ a [Használati útmutatóban](https://simplex.chat/docs/guide/readme.html#connect-to-friends).
No comment provided by engineer.
@@ -4392,7 +4531,7 @@ Hiba: %@
Received at
- Fogadva ekkor
+ Fogadva ekkor:
No comment provided by engineer.
@@ -4415,6 +4554,11 @@ Hiba: %@
A fogadó cím egy másik kiszolgálóra változik. A címváltoztatás a feladó online állapotba kerülése után fejeződik be.
No comment provided by engineer.
+
+ Receiving concurrency
+ Egyidejű fogadás
+ No comment provided by engineer.
+
Receiving file will be stopped.
A fájl fogadása leállt.
@@ -4427,7 +4571,12 @@ Hiba: %@
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).
- Legutóbbi előzmények és továbbfejlesztett [könyvtárbot] (simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2TxW3dfMfxy 3%23%2F%3Fv%3D1-2% 26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gloncbqjek4gloncbqjek.
+ Legutóbbi előzmények és továbbfejlesztett [könyvtárbot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).
+ No comment provided by engineer.
+
+
+ Recipient(s) can't see who this message is from.
+ A címzett(ek) nem látja(k), hogy kitől származik ez az üzenet.
No comment provided by engineer.
@@ -4437,12 +4586,12 @@ Hiba: %@
Reconnect all connected servers to force message delivery. It uses additional traffic.
- Az összes csatlakoztatott kiszolgáló újrakapcsolása az üzenetek kézbesítésének kikényszerítéséhez. Ez további forgalmat használ.
+ Újrakapcsolódás az összes kiszolgálóhoz az üzenetek kézbesítésének kikényszerítéséhez. Ez további forgalmat használ.
No comment provided by engineer.
Reconnect servers?
- Kiszolgálók újracsatlakoztatása?
+ Újrakapcsolódás a kiszolgálókhoz?
No comment provided by engineer.
@@ -4527,10 +4676,12 @@ Hiba: %@
Repeat download
+ Letöltés ismét
No comment provided by engineer.
Repeat import
+ Importálás ismét
No comment provided by engineer.
@@ -4540,6 +4691,7 @@ Hiba: %@
Repeat upload
+ Feltöltés ismét
No comment provided by engineer.
@@ -4644,6 +4796,7 @@ Hiba: %@
Safer groups
+ Biztonságosabb csoportok
No comment provided by engineer.
@@ -4726,11 +4879,21 @@ Hiba: %@
Üdvözlőszöveg mentése?
No comment provided by engineer.
+
+ Saved
+ Mentett
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
A mentett WebRTC ICE kiszolgálók eltávolításra kerülnek
No comment provided by engineer.
+
+ Saved from
+ Mentve innen:
+ No comment provided by engineer.
+
Saved message
Mentett üzenet
@@ -4768,7 +4931,7 @@ Hiba: %@
Search bar accepts invitation links.
- A keresősáv fogadja a meghívó hivatkozásokat.
+ A keresősáv elfogadja a meghívó hivatkozásokat.
No comment provided by engineer.
@@ -4838,7 +5001,7 @@ Hiba: %@
Send direct message to connect
- A kapcsolódáshoz közvetlen üzenet küldése
+ Közvetlen üzenet küldése a kapcsolódáshoz
No comment provided by engineer.
@@ -4883,7 +5046,7 @@ Hiba: %@
Send up to 100 last messages to new members.
- Utolsó 100 üzenet küldése új tagoknak.
+ Az utolsó 100 üzenet elküldése az új tagoknak.
No comment provided by engineer.
@@ -4938,7 +5101,7 @@ Hiba: %@
Sent at
- Elküldve ekkor
+ Elküldve ekkor:
No comment provided by engineer.
@@ -4973,7 +5136,7 @@ Hiba: %@
Server test failed!
- A kiszolgáló tesztje sikertelen!
+ Sikertelen kiszolgáló-teszt!
No comment provided by engineer.
@@ -5013,6 +5176,7 @@ Hiba: %@
Set passphrase
+ Jelmondat beállítása
No comment provided by engineer.
@@ -5022,7 +5186,7 @@ Hiba: %@
Set the message shown to new members!
- Megjelenő üzenetet beállítása új tagok részére!
+ Megjelenő üzenet beállítása az új tagok számára!
No comment provided by engineer.
@@ -5035,6 +5199,11 @@ Hiba: %@
Beállítások
No comment provided by engineer.
+
+ Shape profile images
+ Profilkép alakzat
+ No comment provided by engineer.
+
Share
Megosztás
@@ -5052,7 +5221,7 @@ Hiba: %@
Share address with contacts?
- Megosztja az azonosítót az ismerősökkel?
+ Megosztja az azonosítót az ismerőseivel?
No comment provided by engineer.
@@ -5072,6 +5241,7 @@ Hiba: %@
Show QR code
+ QR-kód megjelenítése
No comment provided by engineer.
@@ -5081,7 +5251,7 @@ Hiba: %@
Show developer options
- Fejlesztői beállítások mutatása
+ Fejlesztői beállítások megjelenítése
No comment provided by engineer.
@@ -5096,7 +5266,7 @@ Hiba: %@
Show:
- Mutat:
+ Megjelenítés:
No comment provided by engineer.
@@ -5136,7 +5306,7 @@ Hiba: %@
SimpleX contact address
- SimpleX ismerős azonosítója
+ SimpleX kapcsolattartási azonosító
simplex link type
@@ -5152,6 +5322,16 @@ Hiba: %@
SimpleX links
SimpleX hivatkozások
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ A SimpleX hivatkozások küldése ebben a csoportban le van tiltva.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ A SimpleX hivatkozások küldése le van tiltva
No comment provided by engineer.
@@ -5189,6 +5369,11 @@ Hiba: %@
Valaki
notification title
+
+ Square, circle, or anything in between.
+ Négyzet, kör vagy bármi a kettő között.
+ No comment provided by engineer.
+
Start chat
Csevegés indítása
@@ -5201,7 +5386,7 @@ Hiba: %@
Start migration
- Migráció indítása
+ Átköltöztetés indítása
No comment provided by engineer.
@@ -5211,21 +5396,22 @@ Hiba: %@
Stop SimpleX
- A SimpleX megállítása
+ SimpleX megállítása
authentication reason
Stop chat
+ Csevegési szolgáltatás megállítása
No comment provided by engineer.
Stop chat to enable database actions
- Csevegés leállítása az adatbázis-műveletek engedélyezéséhez
+ Csevegés megállítása az adatbázis-műveletek engedélyezéséhez
No comment provided by engineer.
Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped.
- A csevegés leállítása a csevegőadatbázis exportálásához, importálásához vagy törléséhez. A csevegés leállítása alatt nem tud üzeneteket fogadni és küldeni.
+ A csevegés megállítása a csevegő adatbázis exportálásához, importálásához vagy törléséhez. A csevegés megállítása alatt nem tud üzeneteket fogadni és küldeni.
No comment provided by engineer.
@@ -5240,17 +5426,17 @@ Hiba: %@
Stop receiving file?
- Fájl fogadás megszakítása?
+ Fájl fogadás megállítása?
No comment provided by engineer.
Stop sending file?
- Fájl küldés megszakítása?
+ Fájl küldés megállítása?
No comment provided by engineer.
Stop sharing
- Megosztás leállítása
+ Megosztás megállítása
No comment provided by engineer.
@@ -5260,6 +5446,7 @@ Hiba: %@
Stopping chat
+ Csevegés megállítása folyamatban
No comment provided by engineer.
@@ -5309,12 +5496,12 @@ Hiba: %@
Tap button
- Koppintson a gombra
+ Koppintson a
No comment provided by engineer.
Tap to Connect
- Koppintson a csatlakozáshoz
+ Koppintson a kapcsolódáshoz
No comment provided by engineer.
@@ -5329,7 +5516,7 @@ Hiba: %@
Tap to join incognito
- Koppintson az inkognitómódhoz való csatlakozáshoz
+ Koppintson az inkognitóban való csatlakozáshoz
No comment provided by engineer.
@@ -5416,7 +5603,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.
The contact you shared this link with will NOT be able to connect!
- Ismerőse NEM fog tudni csatlakozni, akivel megosztotta ezt a hivatkozást!
+ Ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni!
No comment provided by engineer.
@@ -5451,12 +5638,12 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.
The old database was not removed during the migration, it can be deleted.
- A régi adatbázis nem került eltávolításra a migráció során, így törölhető.
+ A régi adatbázis nem került eltávolításra az átköltöztetés során, így törölhető.
No comment provided by engineer.
The profile is only shared with your contacts.
- Profilja csak az ismerősök számára kerül megosztásra.
+ Profilja csak az ismerőseivel kerül megosztásra.
No comment provided by engineer.
@@ -5506,15 +5693,17 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.
This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.
- Ez a művelet nem vonható vissza - profilok, ismerősök, üzenetek és fájlok visszafordíthatatlanul törlésre kerülnek.
+ Ez a művelet nem vonható vissza - profiljai, ismerősei, üzenetei és fájljai visszafordíthatatlanul törlésre kerülnek.
No comment provided by engineer.
This chat is protected by end-to-end encryption.
+ Ez a csevegés végpontok közötti titkosítással védett.
E2EE info chat item
This chat is protected by quantum resistant end-to-end encryption.
+ Ez a csevegés végpontok közötti kvantumrezisztens tikosítással védett.
E2EE info chat item
@@ -5559,7 +5748,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.
To connect, your contact can scan QR code or use the link in the app.
- A csatlakozáshoz az ismerős beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást.
+ A kapcsolódáshoz az ismerőse beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást.
No comment provided by engineer.
@@ -5611,7 +5800,7 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej
Toggle incognito when connecting.
- Inkognító mód csatlakozáskor.
+ Inkognitó mód kapcsolódáskor.
No comment provided by engineer.
@@ -5621,12 +5810,12 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej
Trying to connect to the server used to receive messages from this contact (error: %@).
- Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz (hiba: %@).
+ Kapcsolódási kísérlet ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál (hiba: %@).
No comment provided by engineer.
Trying to connect to the server used to receive messages from this contact.
- Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz ettől az ismerőstől.
+ Kapcsolódási kísérlet ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál.
No comment provided by engineer.
@@ -5681,7 +5870,7 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej
Unexpected migration state
- Váratlan migrációs állapot
+ Váratlan átköltöztetési állapot
No comment provided by engineer.
@@ -5732,8 +5921,8 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej
Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.
To connect, please ask your contact to create another connection link and check that you have a stable network connection.
- Hacsak az ismerős nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt, hiba lehet – kérjük, jelentse.
-A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsolati hivatkozást, és ellenőrizze, hogy a hálózati kapcsolat stabil-e.
+ Hacsak az ismerőse nem törölte a kapcsolatot, vagy ez a hivatkozás már használatban volt, lehet hogy ez egy hiba – jelentse a problémát.
+A kapcsolódáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsolati hivatkozást, és ellenőrizze, hogy a hálózati kapcsolat stabil-e.
No comment provided by engineer.
@@ -5768,7 +5957,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Up to 100 last messages are sent to new members.
- Legfeljebb az utolsó 100 üzenet kerül elküldésre az új tagoknak.
+ Legfeljebb az utolsó 100 üzenet kerül elküldésre az új tagok számára.
No comment provided by engineer.
@@ -5778,7 +5967,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Update .onion hosts setting?
- Tor .onion host beállítások frissítése?
+ Tor .onion kiszolgálók beállításainak frissítése?
No comment provided by engineer.
@@ -5803,7 +5992,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Updating this setting will re-connect the client to all servers.
- A beállítás frissítésével a kliens újracsatlakozik az összes kiszolgálóhoz.
+ A beállítás frissítésével a kliens újrakapcsolódik az összes kiszolgálóhoz.
No comment provided by engineer.
@@ -5813,6 +6002,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Upload failed
+ Sikertelen feltöltés
No comment provided by engineer.
@@ -5822,11 +6012,12 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Uploading archive
+ Archívum feltöltése
No comment provided by engineer.
Use .onion hosts
- Tor .onion hostok használata
+ Tor .onion kiszolgálók használata
No comment provided by engineer.
@@ -5876,6 +6067,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Use the app while in the call.
+ Használja az alkalmazást hívás közben.
No comment provided by engineer.
@@ -5885,7 +6077,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Using .onion hosts requires compatible VPN provider.
- A .onion hosztok használatához kompatibilis VPN szolgáltatóra van szükség.
+ A .onion kiszolgálók használatához kompatibilis VPN szolgáltatóra van szükség.
No comment provided by engineer.
@@ -5915,10 +6107,12 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Verify database passphrase
+ Adatbázis jelmondatának ellenőrzése
No comment provided by engineer.
Verify passphrase
+ Jelmondat ellenőrzése
No comment provided by engineer.
@@ -5943,12 +6137,12 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Video will be received when your contact completes uploading it.
- A videó akkor érkezik meg, amikor az ismerőse befejezte annak feltöltését.
+ A videó akkor érkezik meg, amikor a küldője befejezte annak feltöltését.
No comment provided by engineer.
Video will be received when your contact is online, please wait or check later!
- A videó akkor érkezik meg, amikor az ismerős elérhető, várjon, vagy ellenőrizze később!
+ A videó akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!
No comment provided by engineer.
@@ -5981,6 +6175,11 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
A hangüzenetek küldése le van tiltva ebben a csoportban.
No comment provided by engineer.
+
+ Voice messages not allowed
+ A hangüzenetek küldése le van tiltva
+ No comment provided by engineer.
+
Voice messages prohibited!
A hangüzenetek le vannak tilva!
@@ -6013,6 +6212,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Warning: starting chat on multiple devices is not supported and will cause message delivery failures
+ Figyelmeztetés: a csevegés elindítása egyszerre több eszközön nem támogatott, továbbá üzenetkézbesítési hibákat okozhat
No comment provided by engineer.
@@ -6037,6 +6237,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Welcome message is too long
+ Az üdvözlő üzenet túl hosszú
No comment provided by engineer.
@@ -6049,9 +6250,14 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Amikor elérhető
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ Amikor egy bejövő hang- vagy videóhívás érkezik.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
- Csatlakozási kérelmek esetében, elfogadhatja vagy elutasíthatja azokat.
+ Amikor az emberek kapcsolódást kérelmeznek, ön elfogadhatja vagy elutasíthatja azokat.
No comment provided by engineer.
@@ -6059,6 +6265,21 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
Inkognitóprofil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.
No comment provided by engineer.
+
+ WiFi
+ Wi-Fi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ A közvetlen csevegésekben engedélyezve lesz!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Vezetékes Ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
Titkosított fájlokkal és médiatartalommal.
@@ -6096,6 +6317,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
You **must not** use the same database on two devices.
+ **Nem szabad** ugyanazt az adatbázist használni egyszerre két eszközön.
No comment provided by engineer.
@@ -6115,37 +6337,37 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
You are already connected to %@.
- Már csatlakozva van ehhez: %@.
+ Már kapcsolódva van hozzá: %@.
No comment provided by engineer.
You are already connecting to %@.
- Már folyamatban van a csatlakozás ehhez: %@.
+ Már folyamatban van a kapcsolódás ehhez: %@.
No comment provided by engineer.
You are already connecting via this one-time link!
- Már csatlakozik ezen az egyszer használatos hivatkozáson keresztül!
+ A kapcsolódás már folyamatban van ezen az egyszer használatos hivatkozáson keresztül!
No comment provided by engineer.
You are already in group %@.
- Már a %@ csoportban van.
+ Már a(z) %@ csoport tagja.
No comment provided by engineer.
You are already joining the group %@.
- Már folyamatban van a csatlakozás a csoporthoz %@.
+ A csatlakozás már folyamatban van a(z) %@ csoporthoz.
No comment provided by engineer.
You are already joining the group via this link!
- Már csatlakozott a csoporthoz ezen a hivatkozáson keresztül!
+ A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül!
No comment provided by engineer.
You are already joining the group via this link.
- Ezen a hivatkozáson keresztül már csatlakozik a csoporthoz.
+ A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül.
No comment provided by engineer.
@@ -6157,7 +6379,7 @@ Csatlakozási kérés megismétlése?
You are connected to the server used to receive messages from this contact.
- Kiszolgálóhoz történő csatlakozás, mely az adott ismerőstől érkező üzenetek fogadására szolgál.
+ Már kapcsolódott ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál.
No comment provided by engineer.
@@ -6187,6 +6409,7 @@ Csatlakozási kérés megismétlése?
You can give another try.
+ Megpróbálhatja még egyszer.
No comment provided by engineer.
@@ -6216,12 +6439,12 @@ Csatlakozási kérés megismétlése?
You can share this address with your contacts to let them connect with **%@**.
- Megoszthatja ezt a hivatkozást ismerőseivel, hogy kapcsolatba léphessenek önnel a **%@** nevű profilján keresztül.
+ Megoszthatja ezt az azonosítót az ismerőseivel, hogy kapcsolatba léphessenek önnel a **%@** nevű profilján keresztül.
No comment provided by engineer.
You can share your address as a link or QR code - anybody can connect to you.
- Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki csatlakozhat önhöz.
+ Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki kapcsolódhat önhöz.
No comment provided by engineer.
@@ -6261,13 +6484,13 @@ Csatlakozási kérés megismétlése?
You have already requested connection via this address!
- Már kért egy csatlakozást ezen az azonosítón keresztül!
+ Már kért egy kapcsolódási kérelmet ezen az azonosítón keresztül!
No comment provided by engineer.
You have already requested connection!
Repeat connection request?
- Már kérelmezte a csatlakozást!
+ Már kért egy kapcsolódási kérelmet!
Kapcsolódási kérés megismétlése?
No comment provided by engineer.
@@ -6283,7 +6506,7 @@ Kapcsolódási kérés megismétlése?
You invited a contact
- Meghívott egy ismerőst
+ Meghívta egy ismerősét
No comment provided by engineer.
@@ -6318,22 +6541,22 @@ Kapcsolódási kérés megismétlése?
You will be connected to group when the group host's device is online, please wait or check later!
- Akkor tud csatlakozni a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!
+ Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!
No comment provided by engineer.
You will be connected when group link host's device is online, please wait or check later!
- Akkor lesz csatlakoztatva, amikor a csoportos hivatkozás tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!
+ Akkor lesz kapcsolódva, amikor a csoportos hivatkozás tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!
No comment provided by engineer.
You will be connected when your connection request is accepted, please wait or check later!
- Akkor lesz csatlakoztatva, ha a csatlakozási kérelme elfogadásra került, várjon, vagy ellenőrizze később!
+ Akkor lesz kapcsolódva, ha a kapcsolódási kérelme elfogadásra kerül, várjon, vagy ellenőrizze később!
No comment provided by engineer.
You will be connected when your contact's device is online, please wait or check later!
- Akkor csatlakozik, amikor az ismerős eszköze online lesz, várjon, vagy ellenőrizze később!
+ Akkor le kapcsolódva, amikor az ismerőse eszköze online lesz, várjon, vagy ellenőrizze később!
No comment provided by engineer.
@@ -6343,7 +6566,7 @@ Kapcsolódási kérés megismétlése?
You will connect to all group members.
- Csatlakozni fog a csoport összes tagjához.
+ Kapcsolódni fog a csoport összes tagjához.
No comment provided by engineer.
@@ -6358,7 +6581,7 @@ Kapcsolódási kérés megismétlése?
You won't lose your contacts if you later delete your address.
- Nem veszíti el ismerőseit, ha később törli az azonosítóját.
+ Nem veszíti el az ismerőseit, ha később törli az azonosítóját.
No comment provided by engineer.
@@ -6403,12 +6626,12 @@ Kapcsolódási kérés megismétlése?
Your chat database
- Csevegési adatbázisa
+ Csevegési adatbázis
No comment provided by engineer.
Your chat database is not encrypted - set passphrase to encrypt it.
- Csevegési adatbázisa nincs titkosítva – adjon meg egy jelmondatot a titkosításhoz.
+ A csevegési adatbázis nincs titkosítva – adjon meg egy jelmondatot a titkosításhoz.
No comment provided by engineer.
@@ -6435,7 +6658,7 @@ Megszakíthatja ezt a kapcsolatfelvételt és törölheti az ismerőst (ezt kés
Your contacts will remain connected.
- Az ismerősök továbbra is csatlakoztatva maradnak.
+ Az ismerősei továbbra is kapcsolódva maradnak.
No comment provided by engineer.
@@ -6465,7 +6688,7 @@ Megszakíthatja ezt a kapcsolatfelvételt és törölheti az ismerőst (ezt kés
Your profile **%@** will be shared.
- **%@** nevű profilja megosztásra kerül.
+ A(z) **%@** nevű profilja megosztásra fog kerülni.
No comment provided by engineer.
@@ -6477,7 +6700,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
Your profile, contacts and delivered messages are stored on your device.
- Profilja, ismerősök és az elküldött üzenetek az eszközön kerülnek tárolásra.
+ Profilja, ismerősei és az elküldött üzenetei az eszközön kerülnek tárolásra.
No comment provided by engineer.
@@ -6527,7 +6750,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
above, then choose:
- fent, majd válassza ki:
+ gombra fent, majd válassza ki:
No comment provided by engineer.
@@ -6540,6 +6763,11 @@ A SimpleX kiszolgálók nem látjhatják profilját.
admin
member role
+
+ admins
+ adminok
+ feature role
+
agreeing encryption for %@…
titkosítás jóváhagyása %@ számára…
@@ -6550,6 +6778,11 @@ A SimpleX kiszolgálók nem látjhatják profilját.
titkosítás elfogadása…
chat item text
+
+ all members
+ minden tag
+ feature role
+
always
mindig
@@ -6557,7 +6790,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
and %lld other events
- és %lld egyéb esemény
+ és %lld további esemény
No comment provided by engineer.
@@ -6622,12 +6855,12 @@ A SimpleX kiszolgálók nem látjhatják profilját.
changed address for you
- Cím megváltoztatva
+ cím megváltoztatva
chat item text
changed role of %1$@ to %2$@
- %1$@ szerepköre megváltozott erre: %2$@
+ %1$@ szerepkörét megváltoztatta erre: %2$@
rcv group event chat item
@@ -6657,7 +6890,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
connect to SimpleX Chat developers.
- Csatlakozás a SimpleX Chat fejlesztőkhöz.
+ Kapcsolódás a SimpleX Chat fejlesztőkhöz.
No comment provided by engineer.
@@ -6692,7 +6925,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
connecting (introduction invitation)
- csatlakozás (bemutatkozás meghívás)
+ kapcsolódás (bemutatkozó meghívó)
No comment provided by engineer.
@@ -6707,7 +6940,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
connection established
- Kapcsolat létrehozva
+ kapcsolat létrehozva
chat list item title (it should not be shown
@@ -6717,7 +6950,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
contact %1$@ changed to %2$@
- %1$@ ismerősének neve megváltozott erre: %2$@
+ %1$@ megváltoztatta a nevét erre: %2$@
profile update event chat item
@@ -6742,7 +6975,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
database version is newer than the app, but no down migration for: %@
- az adatbázis verziója újabb, mint az alkalmazásé, de nincs visszafelé migráció: %@
+ az adatbázis verziója újabb, mint az alkalmazásé, de nincs visszafelé átköltöztetés ehhez: %@
No comment provided by engineer.
@@ -6782,7 +7015,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
different migration in the app/database: %@ / %@
- különböző migrációk az alkalmazásban/adatbázisban: %@ / %@
+ különböző átköltöztetések az alkalmazásban/adatbázisban: %@ / %@
No comment provided by engineer.
@@ -6812,7 +7045,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
enabled for contact
- engedélyezve ismerős részére
+ engedélyezve az ismerős számára
enabled status
@@ -6880,6 +7113,11 @@ A SimpleX kiszolgálók nem látjhatják profilját.
esemény történt
No comment provided by engineer.
+
+ forwarded
+ továbbított
+ No comment provided by engineer.
+
group deleted
a csoport törölve
@@ -6917,7 +7155,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
incognito via one-time link
- inkognitó egyszer használatos hivatkozáson keresztül
+ inkognitó az egyszer használatos hivatkozáson keresztül
chat list item description
@@ -6947,22 +7185,22 @@ A SimpleX kiszolgálók nem látjhatják profilját.
invited
- meghívott
+ meghívta
No comment provided by engineer.
invited %@
- %@ meghívott
+ meghívta %@-t
rcv group event chat item
invited to connect
- meghívott, hogy csatlakozzon
+ meghívta, hogy csatlakozzon
chat list item title
invited via your group link
- meghívott a csoport hivatkozásán keresztül
+ meghívta a csoport hivatkozásán keresztül
rcv group event chat item
@@ -6972,12 +7210,12 @@ A SimpleX kiszolgálók nem látjhatják profilját.
join as %@
- csatlakozás mint %@
+ csatlakozás mint: %@
No comment provided by engineer.
left
- elhagyta
+ elhagyta a csoportot
rcv group event chat item
@@ -6992,12 +7230,12 @@ A SimpleX kiszolgálók nem látjhatják profilját.
member %1$@ changed to %2$@
- %1$@ tag megváltoztatta a nevét erre: %2$@
+ %1$@ megváltoztatta a nevét erre: %2$@
profile update event chat item
connected
- kapcsolódva
+ kapcsolódott
rcv group event chat item
@@ -7022,7 +7260,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
moderated by %@
- %@ által moderálva
+ moderálva lett %@ által
marked deleted chat item preview text
@@ -7087,6 +7325,11 @@ A SimpleX kiszolgálók nem látjhatják profilját.
tulajdonos
member role
+
+ owners
+ tulajdonosok
+ feature role
+
peer-to-peer
ponttól-pontig
@@ -7094,6 +7337,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
quantum resistant e2e encryption
+ végpontok közötti kvantumrezisztens titkosítás
chat item text
@@ -7123,7 +7367,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
removed contact address
- törölt csatlakozási cím
+ törölt kapcsolattartási azonosító
profile update event chat item
@@ -7136,6 +7380,16 @@ A SimpleX kiszolgálók nem látjhatják profilját.
eltávolítottak
rcv group event chat item
+
+ saved
+ mentett
+ No comment provided by engineer.
+
+
+ saved from %@
+ mentve innen: %@
+ No comment provided by engineer.
+
sec
mp
@@ -7153,7 +7407,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
security code changed
- biztonsági kód megváltozott
+ a biztonsági kód megváltozott
chat item text
@@ -7163,7 +7417,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
set new contact address
- új kapcsolattartási cím beállítása
+ új kapcsolattartási azonosító beállítása
profile update event chat item
@@ -7173,6 +7427,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
standard end-to-end encryption
+ szabványos végpontok közötti titkosítás
chat item text
@@ -7227,7 +7482,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
via contact address link
- ismerős azonosítójának hivatkozásán keresztül
+ kapcsolattartási azonosító-hivatkozáson keresztül
chat list item description
@@ -7275,6 +7530,11 @@ A SimpleX kiszolgálók nem látjhatják profilját.
igen
pref value
+
+ you
+ ön
+ No comment provided by engineer.
+
you are invited to group
meghívást kapott a csoportba
@@ -7307,12 +7567,12 @@ A SimpleX kiszolgálók nem látjhatják profilját.
you changed role of %1$@ to %2$@
- megváltoztatta %1$@ szerepkörét erre: %@
+ %1$@ szerepkörét megváltoztatta erre: %@
snd group event chat item
you left
- elhagyta
+ elhagyta a csoportot
snd group event chat item
@@ -7359,7 +7619,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.
SimpleX needs camera access to scan QR codes to connect to other users and for video calls.
- A SimpleX-nek kamera-hozzáférésre van szüksége a QR-kódok beolvasásához, hogy csatlakozhasson más felhasználókhoz és videohívásokhoz.
+ A SimpleX-nek kamera-hozzáférésre van szüksége a QR-kódok beolvasásához, hogy kapcsolódhasson más felhasználókhoz és videohívásokhoz.
Privacy - Camera Usage Description
diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
index 34d39c405d..a5fe0ec830 100644
--- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
+++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff
@@ -104,7 +104,7 @@
%@ connected
- %@ si è connesso/a
+ %@ connesso/a
No comment provided by engineer.
@@ -743,6 +743,11 @@
Permetti di eliminare irreversibilmente i messaggi inviati. (24 ore)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Consenti di inviare link di SimpleX.
+ No comment provided by engineer.
+
Allow to send files and media.
Consenti l'invio di file e contenuti multimediali.
@@ -1083,6 +1088,11 @@
Impossibile ricevere il file
No comment provided by engineer.
+
+ Cellular
+ Mobile
+ No comment provided by engineer.
+
Change
Cambia
@@ -2078,6 +2088,11 @@ Non è reversibile!
Esegui downgrade e apri chat
No comment provided by engineer.
+
+ Download
+ Scarica
+ chat item action
+
Download failed
Scaricamento fallito
@@ -2188,6 +2203,11 @@ Non è reversibile!
Attiva il codice di autodistruzione
set passcode view
+
+ Enabled for
+ Attivo per
+ No comment provided by engineer.
+
Encrypt
Crittografare
@@ -2338,11 +2358,6 @@ Non è reversibile!
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
@@ -2713,6 +2728,11 @@ Non è reversibile!
File e contenuti multimediali sono vietati in questo gruppo.
No comment provided by engineer.
+
+ Files and media not allowed
+ File e multimediali non consentiti
+ No comment provided by engineer.
+
Files and media prohibited!
File e contenuti multimediali vietati!
@@ -2778,6 +2798,26 @@ Non è reversibile!
Per console
No comment provided by engineer.
+
+ Forward
+ Inoltra
+ chat item action
+
+
+ Forward and save messages
+ Inoltra e salva i messaggi
+ No comment provided by engineer.
+
+
+ Forwarded
+ Inoltrato
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Inoltrato da
+ No comment provided by engineer.
+
Found desktop
Desktop trovato
@@ -2888,6 +2928,11 @@ Non è reversibile!
I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ I membri del gruppo possono inviare link di Simplex.
+ No comment provided by engineer.
+
Group members can send direct messages.
I membri del gruppo possono inviare messaggi diretti.
@@ -3128,6 +3173,11 @@ Non è reversibile!
In risposta a
No comment provided by engineer.
+
+ In-call sounds
+ Suoni nelle chiamate
+ No comment provided by engineer.
+
Incognito
Incognito
@@ -3603,6 +3653,11 @@ Questo è il tuo link per il gruppo %@!
Le reazioni ai messaggi sono vietate in questo gruppo.
No comment provided by engineer.
+
+ Message source remains private.
+ La fonte del messaggio resta privata.
+ No comment provided by engineer.
+
Message text
Testo del messaggio
@@ -3718,6 +3773,11 @@ Questo è il tuo link per il gruppo %@!
Altri miglioramenti sono in arrivo!
No comment provided by engineer.
+
+ More reliable network connection.
+ Connessione di rete più affidabile.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Probabilmente questa connessione è stata eliminata.
@@ -3753,6 +3813,16 @@ Questo è il tuo link per il gruppo %@!
Rete e server
No comment provided by engineer.
+
+ Network connection
+ Connessione di rete
+ No comment provided by engineer.
+
+
+ Network management
+ Gestione della rete
+ No comment provided by engineer.
+
Network settings
Impostazioni di rete
@@ -3863,6 +3933,11 @@ Questo è il tuo link per il gruppo %@!
Nessuna cronologia
No comment provided by engineer.
+
+ No network connection
+ Nessuna connessione di rete
+ No comment provided by engineer.
+
No permission to record voice message
Nessuna autorizzazione per registrare messaggi vocali
@@ -4077,6 +4152,11 @@ Questo è il tuo link per il gruppo %@!
O mostra questo codice
No comment provided by engineer.
+
+ Other
+ Altro
+ No comment provided by engineer.
+
PING count
Conteggio PING
@@ -4244,11 +4324,6 @@ Errore: %@
Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata
server test error
-
- 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.
@@ -4299,6 +4374,11 @@ Errore: %@
Immagine del profilo
No comment provided by engineer.
+
+ Profile images
+ Immagini del profilo
+ No comment provided by engineer.
+
Profile name
Nome del profilo
@@ -4339,6 +4419,11 @@ Errore: %@
Proibisci le reazioni ai messaggi.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ Vieta l'invio di link di SimpleX.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Proibisci l'invio di messaggi diretti ai membri.
@@ -4469,6 +4554,11 @@ Errore: %@
L'indirizzo di ricezione verrà cambiato in un server diverso. La modifica dell'indirizzo verrà completata dopo che il mittente sarà in linea.
No comment provided by engineer.
+
+ Receiving concurrency
+ Ricezione concomitanza
+ No comment provided by engineer.
+
Receiving file will be stopped.
La ricezione del file verrà interrotta.
@@ -4484,6 +4574,11 @@ Errore: %@
Cronologia recente e [bot della directory](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) migliorato.
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ I destinatari non possono vedere da chi proviene questo messaggio.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
I destinatari vedono gli aggiornamenti mentre li digiti.
@@ -4784,11 +4879,21 @@ Errore: %@
Salvare il messaggio di benvenuto?
No comment provided by engineer.
+
+ Saved
+ Salvato
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
I server WebRTC ICE salvati verranno rimossi
No comment provided by engineer.
+
+ Saved from
+ Salvato da
+ No comment provided by engineer.
+
Saved message
Messaggio salvato
@@ -5094,6 +5199,11 @@ Errore: %@
Impostazioni
No comment provided by engineer.
+
+ Shape profile images
+ Forma delle immagini del profilo
+ No comment provided by engineer.
+
Share
Condividi
@@ -5212,6 +5322,16 @@ Errore: %@
SimpleX links
Link di SimpleX
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ I link di SimpleX sono vietati in questo gruppo.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ Link di SimpleX non consentiti
No comment provided by engineer.
@@ -5249,6 +5369,11 @@ Errore: %@
Qualcuno
notification title
+
+ Square, circle, or anything in between.
+ Quadrata, circolare o qualsiasi forma tra le due.
+ No comment provided by engineer.
+
Start chat
Avvia chat
@@ -6050,6 +6175,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
I messaggi vocali sono vietati in questo gruppo.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Messaggi vocali non consentiti
+ No comment provided by engineer.
+
Voice messages prohibited!
Messaggi vocali vietati!
@@ -6120,6 +6250,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
Quando disponibili
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ Quando si connettono le chiamate audio e video.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Quando le persone chiedono di connettersi, puoi accettare o rifiutare.
@@ -6130,6 +6265,21 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
Quando condividi un profilo in incognito con qualcuno, questo profilo verrà utilizzato per i gruppi a cui ti invitano.
No comment provided by engineer.
+
+ WiFi
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ Viene attivata nelle chat dirette!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Cavo ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
Con file e multimediali criptati.
@@ -6613,6 +6763,11 @@ I server di SimpleX non possono vedere il tuo profilo.
amministratore
member role
+
+ admins
+ amministratori
+ feature role
+
agreeing encryption for %@…
concordando la crittografia per %@…
@@ -6623,6 +6778,11 @@ I server di SimpleX non possono vedere il tuo profilo.
concordando la crittografia…
chat item text
+
+ all members
+ tutti i membri
+ feature role
+
always
sempre
@@ -6953,6 +7113,11 @@ I server di SimpleX non possono vedere il tuo profilo.
evento accaduto
No comment provided by engineer.
+
+ forwarded
+ inoltrato
+ No comment provided by engineer.
+
group deleted
gruppo eliminato
@@ -7160,6 +7325,11 @@ I server di SimpleX non possono vedere il tuo profilo.
proprietario
member role
+
+ owners
+ proprietari
+ feature role
+
peer-to-peer
peer-to-peer
@@ -7210,6 +7380,16 @@ I server di SimpleX non possono vedere il tuo profilo.
ti ha rimosso/a
rcv group event chat item
+
+ saved
+ salvato
+ No comment provided by engineer.
+
+
+ saved from %@
+ salvato da %@
+ No comment provided by engineer.
+
sec
sec
@@ -7350,6 +7530,11 @@ I server di SimpleX non possono vedere il tuo profilo.
sì
pref value
+
+ you
+ tu
+ No comment provided by engineer.
+
you are invited to group
sei stato/a invitato/a al gruppo
diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
index e10c39bbc3..3f32998707 100644
--- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
+++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff
@@ -109,6 +109,7 @@
%@ downloaded
+ %@ ダウンロード済
No comment provided by engineer.
@@ -133,6 +134,7 @@
%@ uploaded
+ %@ アップロード済
No comment provided by engineer.
@@ -142,6 +144,7 @@
%@, %@ and %lld members
+ %@や%@など%lld人のメンバー
No comment provided by engineer.
@@ -211,6 +214,7 @@
%lld group events
+ %lld件のグループイベント
No comment provided by engineer.
@@ -220,10 +224,12 @@
%lld messages blocked
+ %lld件のメッセージをブロック
No comment provided by engineer.
%lld messages blocked by admin
+ %lldのメッセージが管理者によりブロック済
No comment provided by engineer.
@@ -308,10 +314,12 @@
(new)
+ (新規)
No comment provided by engineer.
(this device v%@)
+ (このデバイス v%@)
No comment provided by engineer.
@@ -321,6 +329,7 @@
**Add contact**: to create a new invitation link, or connect via a link you received.
+ **コンタクトの追加**: 新しい招待リンクを作成するか、受け取ったリンクから接続します。
No comment provided by engineer.
@@ -330,6 +339,7 @@
**Create group**: to create a new group.
+ **グループ作成**: 新しいグループを作成する。
No comment provided by engineer.
@@ -344,6 +354,7 @@
**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection.
+ **注意**: 2つの端末で同じデータベースを使用すると、セキュリティ保護として、あなたが接続しているメッセージの復号化が解除されます。
No comment provided by engineer.
@@ -363,16 +374,17 @@
**Warning**: the archive will be removed.
+ **警告**: アーカイブデータは削除されます。
No comment provided by engineer.
**e2e encrypted** audio call
- **e2e 暗号化**音声通話
+ **エンドツーエンド暗号化済み**の音声通話
No comment provided by engineer.
**e2e encrypted** video call
- **e2e暗号化**ビデオ通話
+ **エンドツーエンド暗号化済み**の テレビ電話 通話
No comment provided by engineer.
@@ -422,6 +434,7 @@
0 sec
+ 0 秒
time to disappear
@@ -672,6 +685,7 @@
All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.
+ すべての連絡先、会話、ファイルは安全に暗号化され、設定されたXFTPリレーに分割でアップロードされます。
No comment provided by engineer.
@@ -716,7 +730,12 @@
Allow to irreversibly delete sent messages. (24 hours)
- 送信済みメッセージの永久削除を許可する。
+ 送信済みメッセージの永久削除を許可する。(24時間)
+ No comment provided by engineer.
+
+
+ Allow to send SimpleX links.
+ SimpleXリンクの送信を許可。
No comment provided by engineer.
@@ -751,7 +770,7 @@
Allow your contacts to irreversibly delete sent messages. (24 hours)
- 送信相手が永久メッセージ削除するのを許可する。
+ 送信相手が永久メッセージ削除するのを許可する。(24時間)
No comment provided by engineer.
@@ -771,10 +790,12 @@
Already connecting!
+ 既に接続中です!
No comment provided by engineer.
Already joining the group!
+ すでにグループに参加しています!
No comment provided by engineer.
@@ -799,6 +820,7 @@
App data migration
+ アプリデータの移行
No comment provided by engineer.
@@ -971,7 +993,7 @@
Both you and your contact can irreversibly delete sent messages. (24 hours)
- あなたと連絡相手が送信済みメッセージを永久削除できます。
+ あなたと連絡相手が送信済みメッセージを永久削除できます。(24時間)
No comment provided by engineer.
@@ -1042,6 +1064,10 @@
ファイル受信ができません
No comment provided by engineer.
+
+ Cellular
+ No comment provided by engineer.
+
Change
変更
@@ -1998,6 +2024,10 @@ This cannot be undone!
ダウングレードしてチャットを開く
No comment provided by engineer.
+
+ Download
+ chat item action
+
Download failed
No comment provided by engineer.
@@ -2103,6 +2133,10 @@ This cannot be undone!
自己破壊パスコードを有効にする
set passcode view
+
+ Enabled for
+ No comment provided by engineer.
+
Encrypt
暗号化する
@@ -2246,10 +2280,6 @@ This cannot be undone!
メンバー追加にエラー発生
No comment provided by engineer.
-
- Error allowing contact PQ encryption
- No comment provided by engineer.
-
Error changing address
アドレス変更にエラー発生
@@ -2608,6 +2638,10 @@ This cannot be undone!
このグループでは、ファイルとメディアは禁止されています。
No comment provided by engineer.
+
+ Files and media not allowed
+ No comment provided by engineer.
+
Files and media prohibited!
ファイルとメディアは禁止されています!
@@ -2671,6 +2705,22 @@ This cannot be undone!
コンソール
No comment provided by engineer.
+
+ Forward
+ chat item action
+
+
+ Forward and save messages
+ No comment provided by engineer.
+
+
+ Forwarded
+ No comment provided by engineer.
+
+
+ Forwarded from
+ No comment provided by engineer.
+
Found desktop
No comment provided by engineer.
@@ -2774,7 +2824,11 @@ This cannot be undone!
Group members can irreversibly delete sent messages. (24 hours)
- グループのメンバーがメッセージを完全削除することができます。
+ グループのメンバーがメッセージを完全削除することができます。(24時間)
+ No comment provided by engineer.
+
+
+ Group members can send SimpleX links.
No comment provided by engineer.
@@ -3011,6 +3065,10 @@ This cannot be undone!
返信先
No comment provided by engineer.
+
+ In-call sounds
+ No comment provided by engineer.
+
Incognito
シークレットモード
@@ -3466,6 +3524,10 @@ This is your link for group %@!
このグループではメッセージへのリアクションは禁止されています。
No comment provided by engineer.
+
+ Message source remains private.
+ No comment provided by engineer.
+
Message text
メッセージ内容
@@ -3570,6 +3632,10 @@ This is your link for group %@!
まだまだ改善してまいります!
No comment provided by engineer.
+
+ More reliable network connection.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
おそらく、この接続は削除されています。
@@ -3605,6 +3671,14 @@ This is your link for group %@!
ネットワークとサーバ
No comment provided by engineer.
+
+ Network connection
+ No comment provided by engineer.
+
+
+ Network management
+ No comment provided by engineer.
+
Network settings
ネットワーク設定
@@ -3714,6 +3788,10 @@ This is your link for group %@!
履歴はありません
No comment provided by engineer.
+
+ No network connection
+ No comment provided by engineer.
+
No permission to record voice message
音声メッセージを録音する権限がありません
@@ -3818,7 +3896,7 @@ This is your link for group %@!
Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)
- メッセージの完全削除はあなたにしかできません (あなたの連絡先は削除対象とすることができます)。
+ メッセージの完全削除はあなたにしかできません (あなたの連絡先は削除対象とすることができます)。(24時間)
No comment provided by engineer.
@@ -3843,7 +3921,7 @@ This is your link for group %@!
Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)
- メッセージを完全削除できるのはあなたの連絡相手だけです (あなたは削除対象とすることができます)。
+ メッセージを完全削除できるのはあなたの連絡相手だけです (あなたは削除対象とすることができます)。(24時間)
No comment provided by engineer.
@@ -3919,6 +3997,10 @@ This is your link for group %@!
Or show this code
No comment provided by engineer.
+
+ Other
+ No comment provided by engineer.
+
PING count
PING回数
@@ -4078,10 +4160,6 @@ Error: %@
サーバアドレスの証明証IDが正しくないかもしれません
server test error
-
- Post-quantum E2EE
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
添付を含めて、下書きを保存する。
@@ -4131,6 +4209,10 @@ Error: %@
プロフィール画像
No comment provided by engineer.
+
+ Profile images
+ No comment provided by engineer.
+
Profile name
No comment provided by engineer.
@@ -4169,6 +4251,10 @@ Error: %@
メッセージへのリアクションは禁止されています。
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
メンバー間のダイレクトメッセージを使用禁止にする。
@@ -4295,6 +4381,10 @@ Error: %@
開発中の機能です!相手のクライアントが4.2でなければ機能しません。アドレス変更が完了すると、会話にメッセージが出ます。連絡相手 (またはグループのメンバー) からメッセージを受信できないかをご確認ください。
No comment provided by engineer.
+
+ Receiving concurrency
+ No comment provided by engineer.
+
Receiving file will be stopped.
ファイルの受信を停止します。
@@ -4309,6 +4399,10 @@ Error: %@
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).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
受信者には、入力時に更新内容が表示されます。
@@ -4602,11 +4696,19 @@ Error: %@
ウェルカムメッセージを保存しますか?
No comment provided by engineer.
+
+ Saved
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
保存されたWebRTC ICEサーバは削除されます
No comment provided by engineer.
+
+ Saved from
+ No comment provided by engineer.
+
Saved message
message info title
@@ -4897,6 +4999,10 @@ Error: %@
設定
No comment provided by engineer.
+
+ Shape profile images
+ No comment provided by engineer.
+
Share
共有する
@@ -5013,6 +5119,14 @@ Error: %@
SimpleX links
SimpleXリンク
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
No comment provided by engineer.
@@ -5050,6 +5164,10 @@ Error: %@
誰か
notification title
+
+ Square, circle, or anything in between.
+ No comment provided by engineer.
+
Start chat
チャットを開始する
@@ -5813,6 +5931,10 @@ To connect, please ask your contact to create another connection link and check
このグループでは音声メッセージが使用禁止です。
No comment provided by engineer.
+
+ Voice messages not allowed
+ No comment provided by engineer.
+
Voice messages prohibited!
音声メッセージは使用禁止です!
@@ -5880,6 +6002,10 @@ To connect, please ask your contact to create another connection link and check
利用可能時に
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
接続が要求されたら、それを受け入れるか拒否するかを選択できます。
@@ -5890,6 +6016,18 @@ To connect, please ask your contact to create another connection link and check
連絡相手にシークレットモードのプロフィールを共有すると、その連絡相手に招待されたグループでも同じプロフィールが使われます。
No comment provided by engineer.
+
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
No comment provided by engineer.
@@ -6353,6 +6491,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
管理者
member role
+
+ admins
+ feature role
+
agreeing encryption for %@…
%@の暗号化に同意しています…
@@ -6363,6 +6505,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
暗号化に同意しています…
chat item text
+
+ all members
+ feature role
+
always
常に
@@ -6685,6 +6831,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
イベント発生
No comment provided by engineer.
+
+ forwarded
+ No comment provided by engineer.
+
group deleted
グループ削除済み
@@ -6891,6 +7041,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
オーナー
member role
+
+ owners
+ feature role
+
peer-to-peer
P2P
@@ -6938,6 +7092,14 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
あなたを除名しました
rcv group event chat item
+
+ saved
+ No comment provided by engineer.
+
+
+ saved from %@
+ No comment provided by engineer.
+
sec
秒
@@ -7070,6 +7232,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
はい
pref value
+
+ you
+ No comment provided by engineer.
+
you are invited to group
グループ招待が届きました
diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
index d450d228d8..c5a9ba4ea8 100644
--- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
+++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff
@@ -743,6 +743,11 @@
Sta toe om verzonden berichten onomkeerbaar te verwijderen. (24 uur)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Sta toe dat SimpleX-links worden verzonden.
+ No comment provided by engineer.
+
Allow to send files and media.
Sta toe om bestanden en media te verzenden.
@@ -1083,6 +1088,11 @@
Kan bestand niet ontvangen
No comment provided by engineer.
+
+ Cellular
+ Mobiel
+ No comment provided by engineer.
+
Change
Veranderen
@@ -2078,6 +2088,11 @@ Dit kan niet ongedaan gemaakt worden!
Downgraden en chat openen
No comment provided by engineer.
+
+ Download
+ Downloaden
+ chat item action
+
Download failed
Download mislukt
@@ -2188,6 +2203,11 @@ Dit kan niet ongedaan gemaakt worden!
Zelfvernietigings wachtwoord inschakelen
set passcode view
+
+ Enabled for
+ Ingeschakeld voor
+ No comment provided by engineer.
+
Encrypt
Versleutelen
@@ -2338,11 +2358,6 @@ Dit kan niet ongedaan gemaakt worden!
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
@@ -2713,6 +2728,11 @@ Dit kan niet ongedaan gemaakt worden!
Bestanden en media zijn verboden in deze groep.
No comment provided by engineer.
+
+ Files and media not allowed
+ Bestanden en media niet toegestaan
+ No comment provided by engineer.
+
Files and media prohibited!
Bestanden en media verboden!
@@ -2778,6 +2798,26 @@ Dit kan niet ongedaan gemaakt worden!
Voor console
No comment provided by engineer.
+
+ Forward
+ Doorsturen
+ chat item action
+
+
+ Forward and save messages
+ Berichten doorsturen en opslaan
+ No comment provided by engineer.
+
+
+ Forwarded
+ Doorgestuurd
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Doorgestuurd vanuit
+ No comment provided by engineer.
+
Found desktop
Desktop gevonden
@@ -2888,6 +2928,11 @@ Dit kan niet ongedaan gemaakt worden!
Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ Groepsleden kunnen SimpleX-links verzenden.
+ No comment provided by engineer.
+
Group members can send direct messages.
Groepsleden kunnen directe berichten sturen.
@@ -3128,6 +3173,11 @@ Dit kan niet ongedaan gemaakt worden!
In antwoord op
No comment provided by engineer.
+
+ In-call sounds
+ Geluiden tijdens het bellen
+ No comment provided by engineer.
+
Incognito
Incognito
@@ -3603,6 +3653,11 @@ Dit is jouw link voor groep %@!
Reacties op berichten zijn verboden in deze groep.
No comment provided by engineer.
+
+ Message source remains private.
+ Berichtbron blijft privé.
+ No comment provided by engineer.
+
Message text
Bericht tekst
@@ -3718,6 +3773,11 @@ Dit is jouw link voor groep %@!
Meer verbeteringen volgen snel!
No comment provided by engineer.
+
+ More reliable network connection.
+ Betrouwbaardere netwerkverbinding.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Hoogstwaarschijnlijk is deze verbinding verwijderd.
@@ -3753,6 +3813,16 @@ Dit is jouw link voor groep %@!
Netwerk & servers
No comment provided by engineer.
+
+ Network connection
+ Netwerkverbinding
+ No comment provided by engineer.
+
+
+ Network management
+ Netwerkbeheer
+ No comment provided by engineer.
+
Network settings
Netwerk instellingen
@@ -3863,6 +3933,11 @@ Dit is jouw link voor groep %@!
Geen geschiedenis
No comment provided by engineer.
+
+ No network connection
+ Geen netwerkverbinding
+ No comment provided by engineer.
+
No permission to record voice message
Geen toestemming om spraakbericht op te nemen
@@ -4077,6 +4152,11 @@ Dit is jouw link voor groep %@!
Of laat deze code zien
No comment provided by engineer.
+
+ Other
+ Ander
+ No comment provided by engineer.
+
PING count
PING count
@@ -4244,11 +4324,6 @@ Fout: %@
Mogelijk is de certificaat vingerafdruk in het server adres onjuist
server test error
-
- Post-quantum E2EE
- Post-quantum E2EE
- No comment provided by engineer.
-
Preserve the last message draft, with attachments.
Bewaar het laatste berichtconcept, met bijlagen.
@@ -4299,6 +4374,11 @@ Fout: %@
profielfoto
No comment provided by engineer.
+
+ Profile images
+ Profiel afbeeldingen
+ No comment provided by engineer.
+
Profile name
Profielnaam
@@ -4339,6 +4419,11 @@ Fout: %@
Berichten reacties verbieden.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ Verbied het verzenden van SimpleX-links
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Verbied het sturen van directe berichten naar leden.
@@ -4469,6 +4554,11 @@ Fout: %@
Het ontvangstadres wordt gewijzigd naar een andere server. Adres wijziging wordt voltooid nadat de afzender online is.
No comment provided by engineer.
+
+ Receiving concurrency
+ Gelijktijdig ontvangen
+ No comment provided by engineer.
+
Receiving file will be stopped.
Het ontvangen van het bestand wordt gestopt.
@@ -4484,6 +4574,11 @@ Fout: %@
Recente geschiedenis en verbeterde [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ Ontvanger(s) kunnen niet zien van wie dit bericht afkomstig is.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Ontvangers zien updates terwijl u ze typt.
@@ -4784,11 +4879,21 @@ Fout: %@
Welkomst bericht opslaan?
No comment provided by engineer.
+
+ Saved
+ Opgeslagen
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Opgeslagen WebRTC ICE servers worden verwijderd
No comment provided by engineer.
+
+ Saved from
+ Opgeslagen van
+ No comment provided by engineer.
+
Saved message
Opgeslagen bericht
@@ -5094,6 +5199,11 @@ Fout: %@
Instellingen
No comment provided by engineer.
+
+ Shape profile images
+ Vorm profiel afbeeldingen
+ No comment provided by engineer.
+
Share
Deel
@@ -5212,6 +5322,16 @@ Fout: %@
SimpleX links
SimpleX links
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ SimpleX-links zijn in deze groep verboden.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ SimpleX-links zijn niet toegestaan
No comment provided by engineer.
@@ -5249,6 +5369,11 @@ Fout: %@
Iemand
notification title
+
+ Square, circle, or anything in between.
+ Vierkant, cirkel of iets daartussenin.
+ No comment provided by engineer.
+
Start chat
Begin gesprek
@@ -6050,6 +6175,11 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
Spraak berichten zijn verboden in deze groep.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Spraakberichten niet toegestaan
+ No comment provided by engineer.
+
Voice messages prohibited!
Spraak berichten verboden!
@@ -6120,6 +6250,11 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
Wanneer beschikbaar
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ Bij het verbinden van audio- en video-oproepen.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Wanneer mensen vragen om verbinding te maken, kunt u dit accepteren of weigeren.
@@ -6130,6 +6265,21 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
Wanneer je een incognito profiel met iemand deelt, wordt dit profiel gebruikt voor de groepen waarvoor ze je uitnodigen.
No comment provided by engineer.
+
+ WiFi
+ Wifi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ Wordt ingeschakeld in directe chats!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Bekabeld Ethernet
+ No comment provided by engineer.
+
With encrypted files and media.
‐Met versleutelde bestanden en media.
@@ -6613,6 +6763,11 @@ SimpleX servers kunnen uw profiel niet zien.
Beheerder
member role
+
+ admins
+ beheerders
+ feature role
+
agreeing encryption for %@…
versleuteling overeenkomen voor %@…
@@ -6623,6 +6778,11 @@ SimpleX servers kunnen uw profiel niet zien.
versleuteling overeenkomen…
chat item text
+
+ all members
+ alle leden
+ feature role
+
always
altijd
@@ -6953,6 +7113,11 @@ SimpleX servers kunnen uw profiel niet zien.
gebeurtenis gebeurd
No comment provided by engineer.
+
+ forwarded
+ doorgestuurd
+ No comment provided by engineer.
+
group deleted
groep verwijderd
@@ -7160,6 +7325,11 @@ SimpleX servers kunnen uw profiel niet zien.
Eigenaar
member role
+
+ owners
+ eigenaren
+ feature role
+
peer-to-peer
peer-to-peer
@@ -7210,6 +7380,16 @@ SimpleX servers kunnen uw profiel niet zien.
heeft je verwijderd
rcv group event chat item
+
+ saved
+ opgeslagen
+ No comment provided by engineer.
+
+
+ saved from %@
+ opgeslagen van %@
+ No comment provided by engineer.
+
sec
sec
@@ -7350,6 +7530,11 @@ SimpleX servers kunnen uw profiel niet zien.
Ja
pref value
+
+ you
+ jij
+ No comment provided by engineer.
+
you are invited to group
je bent uitgenodigd voor de groep
diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
index f4d10b0dc0..d71bd5843a 100644
--- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
+++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff
@@ -39,7 +39,7 @@
!1 colored!
- !1 kolorowy!
+ !1 pokolorowany!
No comment provided by engineer.
@@ -344,32 +344,32 @@
**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.
- **Bardziej prywatny**: sprawdzanie nowych wiadomości co 20 minut. Token urządzenia jest współdzielony z serwerem SimpleX Chat, ale nie informacje o liczbie kontaktów lub wiadomości.
+ **Bardziej prywatny**: sprawdzanie nowych wiadomości odbywa się co 20 minut. Współdzielony z serwerem SimpleX Chat jest token urządzenia, lecz nie informacje o liczbie kontaktów lub wiadomości.
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).
+ **Najbardziej prywatny**: nie korzystaj z serwera powiadomień SimpleX Chat, wiadomości sprawdzane są co jakiś czas w tle (zależne od tego 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.
+ *Uwaga*: w celach bezpieczeństwa użycie tej samej bazy danych na dwóch różnych urządzeniach spowoduje brak możliwości odszyfrowywania wiadomości z Twoich połączeń.
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.
+ **Uwaga**: NIE będziesz w stanie odzyskać lub zmienić kodu dostępu, jeśli go stracisz.
No comment provided by engineer.
**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from.
- **Zalecane**: token urządzenia i powiadomienia są wysyłane do serwera powiadomień SimpleX Chat, ale nie treść wiadomości, rozmiar lub od kogo jest.
+ **Zalecane**: do serwera powiadomień SimpleX Chat wysyłany jest token urządzenia i powiadomienia, lecz nie treść wiadomości, jej rozmiar lub od kogo ona jest.
No comment provided by engineer.
**Warning**: Instant push notifications require passphrase saved in Keychain.
- **Uwaga**: Natychmiastowe powiadomienia push wymagają hasła zapisanego w Keychain.
+ **Uwaga**: Natychmiastowe powiadomienia push wymagają zapisania kodu dostępu w Keychain.
No comment provided by engineer.
@@ -743,6 +743,11 @@
Zezwól na nieodwracalne usunięcie wysłanych wiadomości. (24 godziny)
No comment provided by engineer.
+
+ Allow to send SimpleX links.
+ Zezwól na wysyłanie linków SimpleX.
+ No comment provided by engineer.
+
Allow to send files and media.
Pozwól na wysyłanie plików i mediów.
@@ -1083,6 +1088,11 @@
Nie można odebrać pliku
No comment provided by engineer.
+
+ Cellular
+ Sieć komórkowa
+ No comment provided by engineer.
+
Change
Zmień
@@ -2078,6 +2088,11 @@ To nie może być cofnięte!
Obniż wersję i otwórz czat
No comment provided by engineer.
+
+ Download
+ Pobierz
+ chat item action
+
Download failed
Pobieranie nie udane
@@ -2188,6 +2203,11 @@ To nie może być cofnięte!
Włącz pin samodestrukcji
set passcode view
+
+ Enabled for
+ Włączony dla
+ No comment provided by engineer.
+
Encrypt
Szyfruj
@@ -2338,11 +2358,6 @@ To nie może być cofnięte!
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
@@ -2713,6 +2728,11 @@ To nie może być cofnięte!
Pliki i media są zabronione w tej grupie.
No comment provided by engineer.
+
+ Files and media not allowed
+ Pliki i multimedia nie są dozwolone
+ No comment provided by engineer.
+
Files and media prohibited!
Pliki i media zabronione!
@@ -2778,6 +2798,26 @@ To nie może być cofnięte!
Dla konsoli
No comment provided by engineer.
+
+ Forward
+ Przekaż dalej
+ chat item action
+
+
+ Forward and save messages
+ Przesyłaj dalej i zapisuj wiadomości
+ No comment provided by engineer.
+
+
+ Forwarded
+ Przekazane dalej
+ No comment provided by engineer.
+
+
+ Forwarded from
+ Przekazane dalej od
+ No comment provided by engineer.
+
Found desktop
Znaleziono komputer
@@ -2888,6 +2928,11 @@ To nie może być cofnięte!
Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)
No comment provided by engineer.
+
+ Group members can send SimpleX links.
+ Członkowie grupy mogą wysyłać linki SimpleX.
+ No comment provided by engineer.
+
Group members can send direct messages.
Członkowie grupy mogą wysyłać bezpośrednie wiadomości.
@@ -3128,6 +3173,11 @@ To nie może być cofnięte!
W odpowiedzi na
No comment provided by engineer.
+
+ In-call sounds
+ Dźwięki w rozmowie
+ No comment provided by engineer.
+
Incognito
Incognito
@@ -3603,6 +3653,11 @@ To jest twój link do grupy %@!
Reakcje wiadomości są zabronione w tej grupie.
No comment provided by engineer.
+
+ Message source remains private.
+ Źródło wiadomości pozostaje prywatne.
+ No comment provided by engineer.
+
Message text
Tekst wiadomości
@@ -3718,6 +3773,11 @@ To jest twój link do grupy %@!
Więcej ulepszeń już wkrótce!
No comment provided by engineer.
+
+ More reliable network connection.
+ Bardziej niezawodne połączenia sieciowe.
+ No comment provided by engineer.
+
Most likely this connection is deleted.
Najprawdopodobniej to połączenie jest usunięte.
@@ -3753,6 +3813,16 @@ To jest twój link do grupy %@!
Sieć i serwery
No comment provided by engineer.
+
+ Network connection
+ Połączenie z siecią
+ No comment provided by engineer.
+
+
+ Network management
+ Zarządzenie sieciowe
+ No comment provided by engineer.
+
Network settings
Ustawienia sieci
@@ -3863,6 +3933,11 @@ To jest twój link do grupy %@!
Brak historii
No comment provided by engineer.
+
+ No network connection
+ Brak połączenia z siecią
+ No comment provided by engineer.
+
No permission to record voice message
Brak uprawnień do nagrywania wiadomości głosowej
@@ -4077,6 +4152,11 @@ To jest twój link do grupy %@!
Lub pokaż ten kod
No comment provided by engineer.
+
+ Other
+ Inne
+ No comment provided by engineer.
+
PING count
Liczba PINGÓW
@@ -4201,12 +4281,12 @@ Błąd: %@
Please enter correct current passphrase.
- Wprowadź poprawne aktualne hasło.
+ Wprowadź poprawny obecny kod dostępu.
No comment provided by engineer.
Please enter the previous password after restoring database backup. This action can not be undone.
- Proszę podać poprzednie hasło po przywróceniu kopii zapasowej bazy danych. Tej czynności nie można cofnąć.
+ Proszę podać poprzedni kod dostępu po przywróceniu kopii zapasowej bazy danych. Tej czynności nie można cofnąć.
No comment provided by engineer.
@@ -4226,12 +4306,12 @@ Błąd: %@
Please store passphrase securely, you will NOT be able to access chat if you lose it.
- Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można uzyskać dostępu do czatu.
+ Przechowuj kod dostępu w bezpieczny sposób, w przypadku jego utraty NIE będzie można uzyskać dostępu do czatu.
No comment provided by engineer.
Please store passphrase securely, you will NOT be able to change it if you lose it.
- Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można go zmienić.
+ Przechowuj kod dostępu w bezpieczny sposób, w przypadku jego utraty NIE będzie można go zmienić.
No comment provided by engineer.
@@ -4244,11 +4324,6 @@ Błąd: %@
Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy
server test error
-
- 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.
@@ -4299,6 +4374,11 @@ Błąd: %@
Zdjęcie profilowe
No comment provided by engineer.
+
+ Profile images
+ Zdjęcia profilowe
+ No comment provided by engineer.
+
Profile name
Nazwa profilu
@@ -4339,6 +4419,11 @@ Błąd: %@
Zabroń reakcje wiadomości.
No comment provided by engineer.
+
+ Prohibit sending SimpleX links.
+ Zabroń wysyłania linków SimpleX.
+ No comment provided by engineer.
+
Prohibit sending direct messages to members.
Zabroń wysyłania bezpośrednich wiadomości do członków.
@@ -4469,6 +4554,11 @@ Błąd: %@
Adres odbiorczy zostanie zmieniony na inny serwer. Zmiana adresu zostanie zakończona gdy nadawca będzie online.
No comment provided by engineer.
+
+ Receiving concurrency
+ Konkurencyjne odbieranie
+ No comment provided by engineer.
+
Receiving file will be stopped.
Odbieranie pliku zostanie przerwane.
@@ -4484,6 +4574,11 @@ Błąd: %@
Ostania historia i ulepszony [bot adresowy](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).
No comment provided by engineer.
+
+ Recipient(s) can't see who this message is from.
+ Odbiorca/y nie mogą zobaczyć od kogo jest ta wiadomość.
+ No comment provided by engineer.
+
Recipients see updates as you type them.
Odbiorcy widzą aktualizacje podczas ich wpisywania.
@@ -4784,11 +4879,21 @@ Błąd: %@
Zapisać wiadomość powitalną?
No comment provided by engineer.
+
+ Saved
+ Zapisane
+ No comment provided by engineer.
+
Saved WebRTC ICE servers will be removed
Zapisane serwery WebRTC ICE zostaną usunięte
No comment provided by engineer.
+
+ Saved from
+ Zapisane od
+ No comment provided by engineer.
+
Saved message
Zachowano wiadomość
@@ -5094,6 +5199,11 @@ Błąd: %@
Ustawienia
No comment provided by engineer.
+
+ Shape profile images
+ Kształtuj obrazy profilowe
+ No comment provided by engineer.
+
Share
Udostępnij
@@ -5212,6 +5322,16 @@ Błąd: %@
SimpleX links
Linki SimpleX
+ chat feature
+
+
+ SimpleX links are prohibited in this group.
+ Linki SimpleX są zablokowane na tej grupie.
+ No comment provided by engineer.
+
+
+ SimpleX links not allowed
+ Linki SimpleX są niedozwolone
No comment provided by engineer.
@@ -5249,6 +5369,11 @@ Błąd: %@
Ktoś
notification title
+
+ Square, circle, or anything in between.
+ Kwadrat, okrąg lub cokolwiek pomiędzy.
+ No comment provided by engineer.
+
Start chat
Rozpocznij czat
@@ -6050,6 +6175,11 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
Wiadomości głosowe są zabronione w tej grupie.
No comment provided by engineer.
+
+ Voice messages not allowed
+ Wiadomości głosowe są niedozwolone
+ No comment provided by engineer.
+
Voice messages prohibited!
Wiadomości głosowe zabronione!
@@ -6120,6 +6250,11 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
Gdy dostępny
No comment provided by engineer.
+
+ When connecting audio and video calls.
+ Podczas łączenia połączeń audio i wideo.
+ No comment provided by engineer.
+
When people request to connect, you can accept or reject it.
Kiedy ludzie proszą o połączenie, możesz je zaakceptować lub odrzucić.
@@ -6130,6 +6265,21 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
Gdy udostępnisz komuś profil incognito, będzie on używany w grupach, do których Cię zaprosi.
No comment provided by engineer.
+
+ WiFi
+ WiFi
+ No comment provided by engineer.
+
+
+ Will be enabled in direct chats!
+ Zostanie włączone w czatach bezpośrednich!
+ No comment provided by engineer.
+
+
+ Wired ethernet
+ Połączenie ethernet (po kablu)
+ No comment provided by engineer.
+
With encrypted files and media.
Z zaszyfrowanymi plikami i multimediami.
@@ -6613,6 +6763,11 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.
administrator
member role
+
+ admins
+ administratorzy
+ feature role
+
agreeing encryption for %@…
uzgadnianie szyfrowania dla %@…
@@ -6623,6 +6778,11 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.
uzgadnianie szyfrowania…
chat item text
+
+ all members
+ wszyscy członkowie
+ feature role
+
always
zawsze
@@ -6953,6 +7113,11 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.
nowe wydarzenie
No comment provided by engineer.
+
+ forwarded
+ przekazane dalej
+ No comment provided by engineer.
+
group deleted
grupa usunięta
@@ -7160,6 +7325,11 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.
właściciel
member role
+
+ owners
+ właściciele
+ feature role
+
peer-to-peer
peer-to-peer
@@ -7210,6 +7380,16 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.
usunął cię
rcv group event chat item
+
+ saved
+ zapisane
+ No comment provided by engineer.
+
+
+ saved from %@
+ zapisane od %@
+ No comment provided by engineer.
+
sec
sek
@@ -7350,6 +7530,11 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.
tak
pref value
+
+ you
+ Ty
+ No comment provided by engineer.
+
you are invited to group
jesteś zaproszony do grupy
diff --git a/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff b/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff
index a31d4e314d..c9c9707c39 100644
--- a/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff
+++ b/apps/ios/SimpleX Localizations/pt.xcloc/Localized Contents/pt.xliff
@@ -610,160 +610,197 @@ Available in v5.1
Can't delete user profile!
No comment provided by engineer.
-
+
Can't invite contact!
+ Não é possível convidar contato!
No comment provided by engineer.
-
+
Can't invite contacts!
+ Não é possível convidar contatos!
No comment provided by engineer.
-
+
Cancel
+ Cancelar
No comment provided by engineer.
-
+
Cannot access keychain to save database password
+ Não é possível acessar as chaves para salvar a senha do banco de dados
No comment provided by engineer.
-
+
Cannot receive file
+ Não é possível receber o arquivo
No comment provided by engineer.
-
+
Change
+ Mudar
No comment provided by engineer.
Change passcode
No comment provided by engineer.
-
+
Change database passphrase?
+ Alterar a senha do banco de dados?
No comment provided by engineer.
-
+
Change lock mode
+ Alterar modo de bloqueio
authentication reason
-
+
Change member role?
+ Alterar a função do membro?
No comment provided by engineer.
-
+
Change passcode
+ Alterar senha
authentication reason
-
+
Change receiving address
+ Alterar endereço de recebimento
No comment provided by engineer.
-
+
Change receiving address?
+ Alterar endereço de recebimento?
No comment provided by engineer.
-
+
Change role
+ Mudar função
No comment provided by engineer.
-
+
Chat archive
+ Arquivar conversa
No comment provided by engineer.
-
+
Chat console
+ Console da conversa
No comment provided by engineer.
-
+
Chat database
+ Banco de Dados da conversa
No comment provided by engineer.
-
+
Chat database deleted
+ Banco de Dados da conversa apagado
No comment provided by engineer.
-
+
Chat database imported
+ Banco de Dados da conversa importado
No comment provided by engineer.
-
+
Chat is running
+ A conversa está em execução
No comment provided by engineer.
Chat is stopped
No comment provided by engineer.
-
+
Chat preferences
+ Preferências da conversa
No comment provided by engineer.
-
+
Chats
+ Conversas
No comment provided by engineer.
-
+
Check server address and try again.
+ Verifique o endereço do servidor e tente novamente.
No comment provided by engineer.
-
+
Chinese and Spanish interface
+ Interface em Chinês e Espanhol
No comment provided by engineer.
-
+
Choose file
+ Escolher arquivo
No comment provided by engineer.
-
+
Choose from library
+ Escolha da biblioteca
No comment provided by engineer.
-
+
Clear
+ Limpar
No comment provided by engineer.
-
+
Clear conversation
+ Limpar conversa
No comment provided by engineer.
-
+
Clear conversation?
+ Limpar conversa?
No comment provided by engineer.
-
+
Clear verification
+ Limpar verificação
No comment provided by engineer.
-
+
Colors
+ Cores
No comment provided by engineer.
-
+
Compare file
+ Comparar arquivo
server test step
-
+
Compare security codes with your contacts.
+ Compare os códigos de segurança com seus contatos.
No comment provided by engineer.
-
+
Configure ICE servers
+ Configurar servidores ICE
No comment provided by engineer.
-
+
Confirm
+ Confirme
No comment provided by engineer.
-
+
Confirm Passcode
+ Confirmar senha
No comment provided by engineer.
-
+
Confirm database upgrades
+ Confirmar atualizações do banco de dados
No comment provided by engineer.
-
+
Confirm new passphrase…
+ Confirme a nova senha…
No comment provided by engineer.
@@ -4447,6 +4484,62 @@ SimpleX servers cannot see your profile.
Permitir apagar irreversivelmente as mensagens enviadas. (24 horas)
No comment provided by engineer.
+
+ Choose _Migrate from another device_ on the new device and scan QR code.
+ Escolha _Migrar de outro dispositivo_ no novo dispositivo e leia o código QR.
+ No comment provided by engineer.
+
+
+ Cancel migration
+ Cancelar migração
+ No comment provided by engineer.
+
+
+ Camera not available
+ Câmera não disponível
+ No comment provided by engineer.
+
+
+ Change self-destruct passcode
+ Alterar a senha de autodestruição
+ authentication reason
+ set passcode view
+
+
+ Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.
+ A conversa foi interrompida. Se você já usou esse banco de dados em outro dispositivo, deverá transferi-lo de volta antes de iniciar a conversa.
+ No comment provided by engineer.
+
+
+ Chat migrated!
+ Conversa migrada!
+ No comment provided by engineer.
+
+
+ Clear private notes?
+ Limpar notas privadas?
+ No comment provided by engineer.
+
+
+ Confirm network settings
+ Confirme as configurações de rede
+ No comment provided by engineer.
+
+
+ Confirm that you remember database passphrase to migrate it.
+ Confirme se você se lembra da senha do banco de dados para migrá-lo.
+ No comment provided by engineer.
+
+
+ Change self-destruct mode
+ Alterar modo de autodestruição
+ authentication reason
+
+
+ Confirm upload
+ Confirmar envio
+ No comment provided by engineer.
+