mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Compare commits
65 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2e03678a93 | |||
| b4caefb17c | |||
| fd791f3fb8 | |||
| 0720292ebf | |||
| a0d6ae15ab | |||
| 3e76a2d49c | |||
| ed3365bb6d | |||
| b2a8797ed4 | |||
| d3e522e169 | |||
| 49e09ca449 | |||
| d1dde3d0c8 | |||
| ef75eceb40 | |||
| 96ce59f330 | |||
| 98a67fa2e4 | |||
| 4b13512950 | |||
| 4c0d47bbd4 | |||
| 3129602a78 | |||
| a0c257962e | |||
| 93ae1145bc | |||
| d02668386f | |||
| bd8c8b5a8c | |||
| e359ec02f5 | |||
| a1948d549b | |||
| 396b73b480 | |||
| 331b4633fc | |||
| 29db2b4e9b | |||
| f091384aa7 | |||
| f40ba6f04d | |||
| 06d61ea73e | |||
| 84d7a77a9f | |||
| 878eea774d | |||
| 4575dc6e30 | |||
| 554ef4eefc | |||
| 567e9981be | |||
| 1183fe427f | |||
| c49a1f42e7 | |||
| 4f173215c6 | |||
| 41597e563e | |||
| aa127f0cea | |||
| f9c64ba39c | |||
| 1025fa94a1 | |||
| a59769b91d | |||
| 76248b4878 | |||
| 93a7ddb128 | |||
| bc5af35a3e | |||
| e38d5bd885 | |||
| 10f41aa1c9 | |||
| 1b081197d4 | |||
| 9615e525c0 | |||
| db136116d3 | |||
| 98f5e5d22b | |||
| 9f33e5d35e | |||
| b8e8124faf | |||
| 156e41950a | |||
| 26c5ed4caf | |||
| d832afa7e8 | |||
| 2e18b97077 | |||
| b6e57c0fa2 | |||
| 15a226cfd1 | |||
| c4cbf751b9 | |||
| 535ff1d836 | |||
| fb0718adac | |||
| 5f501f1cb9 | |||
| 7cc86574fe | |||
| 19fc44efae |
@@ -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 }}
|
||||
|
||||
+4
-3
@@ -1,5 +1,6 @@
|
||||
---
|
||||
layout: layouts/privacy.html
|
||||
permalink: /privacy/index.html
|
||||
---
|
||||
|
||||
# SimpleX Chat Privacy Policy and Conditions of Use
|
||||
@@ -10,7 +11,7 @@ SimpleX Chat communication protocol is the first protocol that has no user profi
|
||||
|
||||
Double ratchet algorithm has such important properties as [forward secrecy](/docs/GLOSSARY.md#forward-secrecy), sender [repudiation](/docs/GLOSSARY.md#) and break-in recovery (also known as [post-compromise security](/docs/GLOSSARY.md#post-compromise-security)).
|
||||
|
||||
If you believe that any part of this document is not aligned with our mission or values, please raise it with us via [email](chat@simplex.chat) or [chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion).
|
||||
If you believe that any part of this document is not aligned with our mission or values, please raise it with us via [email](mailto: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
|
||||
|
||||
@@ -78,7 +79,7 @@ When you choose to use instant push notifications in SimpleX iOS app, because th
|
||||
|
||||
Preset notification server cannot observe the actual addresses of these queues, as a separate address is used to subscribe to the notifications. It also cannot observe who sends messages to you. Apple push notifications servers can only observe how many notifications are sent to you, but not from how many contacts, or from which messaging relays, as notifications are delivered to your device end-to-end encrypted by one of the preset notification servers - these notifications only contain end-to-end encrypted metadata, not even encrypted message content, and they look completely random to Apple push notification servers.
|
||||
|
||||
You can read more about the design of iOS push notifications [here](https://simplex.chat/blog/20220404-simplex-chat-instant-notifications.html#our-ios-approach-has-one-trade-off).
|
||||
You can read more about the design of iOS push notifications [here](./blog/20220404-simplex-chat-instant-notifications.md#our-ios-approach-has-one-trade-off).
|
||||
|
||||
#### Another information stored on the servers
|
||||
|
||||
@@ -115,7 +116,7 @@ We will update this Privacy Policy as needed so that it is current, accurate, an
|
||||
|
||||
Please also read our Conditions of Use of Software and Infrastructure below.
|
||||
|
||||
If you have questions about our Privacy Policy please contact us via [email](chat@simplex.chat) or [chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion).
|
||||
If you have questions about our Privacy Policy please contact us via [email](mailto:chat@simplex.chat) or [chat](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion).
|
||||
|
||||
## Conditions of Use of Software and Infrastructure
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -341,8 +341,8 @@ 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)
|
||||
func apiForwardChatItem(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemId: Int64, ttl: Int?) async -> ChatItem? {
|
||||
let cmd: ChatCommand = .apiForwardChatItem(toChatType: toChatType, toChatId: toChatId, fromChatType: fromChatType, fromChatId: fromChatId, itemId: itemId, ttl: ttl)
|
||||
return await processSendMessageCmd(toChatType: toChatType, cmd: cmd)
|
||||
}
|
||||
|
||||
@@ -1849,21 +1849,35 @@ func processReceivedMsg(_ res: ChatResponse) async {
|
||||
}
|
||||
case .chatSuspended:
|
||||
chatSuspended()
|
||||
case let .contactSwitch(_, contact, switchProgress):
|
||||
await MainActor.run {
|
||||
m.updateContactConnectionStats(contact, switchProgress.connectionStats)
|
||||
case let .contactSwitch(user, contact, switchProgress):
|
||||
if active(user) {
|
||||
await MainActor.run {
|
||||
m.updateContactConnectionStats(contact, switchProgress.connectionStats)
|
||||
}
|
||||
}
|
||||
case let .groupMemberSwitch(_, groupInfo, member, switchProgress):
|
||||
await MainActor.run {
|
||||
m.updateGroupMemberConnectionStats(groupInfo, member, switchProgress.connectionStats)
|
||||
case let .groupMemberSwitch(user, groupInfo, member, switchProgress):
|
||||
if active(user) {
|
||||
await MainActor.run {
|
||||
m.updateGroupMemberConnectionStats(groupInfo, member, switchProgress.connectionStats)
|
||||
}
|
||||
}
|
||||
case let .contactRatchetSync(_, contact, ratchetSyncProgress):
|
||||
await MainActor.run {
|
||||
m.updateContactConnectionStats(contact, ratchetSyncProgress.connectionStats)
|
||||
case let .contactRatchetSync(user, contact, ratchetSyncProgress):
|
||||
if active(user) {
|
||||
await MainActor.run {
|
||||
m.updateContactConnectionStats(contact, ratchetSyncProgress.connectionStats)
|
||||
}
|
||||
}
|
||||
case let .groupMemberRatchetSync(_, groupInfo, member, ratchetSyncProgress):
|
||||
await MainActor.run {
|
||||
m.updateGroupMemberConnectionStats(groupInfo, member, ratchetSyncProgress.connectionStats)
|
||||
case let .groupMemberRatchetSync(user, groupInfo, member, ratchetSyncProgress):
|
||||
if active(user) {
|
||||
await MainActor.run {
|
||||
m.updateGroupMemberConnectionStats(groupInfo, member, ratchetSyncProgress.connectionStats)
|
||||
}
|
||||
}
|
||||
case let .contactDisabled(user, contact):
|
||||
if active(user) {
|
||||
await MainActor.run {
|
||||
m.updateContact(contact)
|
||||
}
|
||||
}
|
||||
case let .remoteCtrlFound(remoteCtrl, ctrlAppInfo_, appVersion, compatible):
|
||||
await MainActor.run {
|
||||
|
||||
@@ -21,6 +21,8 @@ struct CIGroupInvitationView: View {
|
||||
@State private var inProgress = false
|
||||
@State private var progressByTimeout = false
|
||||
|
||||
@AppStorage(DEFAULT_SHOW_SENT_VIA_RPOXY) private var showSentViaProxy = false
|
||||
|
||||
var body: some View {
|
||||
let action = !chatItem.chatDir.sent && groupInvitation.status == .pending
|
||||
let v = ZStack(alignment: .bottomTrailing) {
|
||||
@@ -43,7 +45,7 @@ struct CIGroupInvitationView: View {
|
||||
.foregroundColor(inProgress ? .secondary : chatIncognito ? .indigo : .accentColor)
|
||||
.font(.callout)
|
||||
+ Text(" ")
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showStatus: false, showEdited: false)
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showStatus: false, showEdited: false, showViaProxy: showSentViaProxy)
|
||||
)
|
||||
.overlay(DetermineWidth())
|
||||
}
|
||||
@@ -51,7 +53,7 @@ struct CIGroupInvitationView: View {
|
||||
(
|
||||
groupInvitationText()
|
||||
+ Text(" ")
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showStatus: false, showEdited: false)
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showStatus: false, showEdited: false, showViaProxy: showSentViaProxy)
|
||||
)
|
||||
.overlay(DetermineWidth())
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ struct CIMetaView: View {
|
||||
var showStatus = true
|
||||
var showEdited = true
|
||||
|
||||
@AppStorage(DEFAULT_SHOW_SENT_VIA_RPOXY) private var showSentViaProxy = false
|
||||
|
||||
var body: some View {
|
||||
if chatItem.isDeletedContent {
|
||||
chatItem.timestampText.font(.caption).foregroundColor(metaColor)
|
||||
@@ -27,24 +29,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, showStatus: showStatus, showEdited: showEdited)
|
||||
case .partial: ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .sent, showStatus: showStatus, showEdited: showEdited)
|
||||
case .complete: ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .sent, showStatus: showStatus, showEdited: showEdited, showViaProxy: showSentViaProxy)
|
||||
case .partial: ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .sent, showStatus: showStatus, showEdited: showEdited, showViaProxy: showSentViaProxy)
|
||||
}
|
||||
case let .sndRcvd(_, sndProgress):
|
||||
switch sndProgress {
|
||||
case .complete:
|
||||
ZStack {
|
||||
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)
|
||||
ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .rcvd1, showStatus: showStatus, showEdited: showEdited, showViaProxy: showSentViaProxy)
|
||||
ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, sent: .rcvd2, showStatus: showStatus, showEdited: showEdited, showViaProxy: showSentViaProxy)
|
||||
}
|
||||
case .partial:
|
||||
ZStack {
|
||||
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)
|
||||
ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .rcvd1, showStatus: showStatus, showEdited: showEdited, showViaProxy: showSentViaProxy)
|
||||
ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: paleMetaColor, sent: .rcvd2, showStatus: showStatus, showEdited: showEdited, showViaProxy: showSentViaProxy)
|
||||
}
|
||||
}
|
||||
default:
|
||||
ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, showStatus: showStatus, showEdited: showEdited)
|
||||
ciMetaText(meta, chatTTL: ttl, encrypted: encrypted, color: metaColor, showStatus: showStatus, showEdited: showEdited, showViaProxy: showSentViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,7 +66,8 @@ func ciMetaText(
|
||||
transparent: Bool = false,
|
||||
sent: SentCheckmark? = nil,
|
||||
showStatus: Bool = true,
|
||||
showEdited: Bool = true
|
||||
showEdited: Bool = true,
|
||||
showViaProxy: Bool
|
||||
) -> Text {
|
||||
var r = Text("")
|
||||
if showEdited, meta.itemEdited {
|
||||
@@ -78,6 +81,9 @@ func ciMetaText(
|
||||
}
|
||||
r = r + Text(" ")
|
||||
}
|
||||
if showViaProxy, meta.sentViaProxy == true {
|
||||
r = r + statusIconText("arrow.forward", color.opacity(0.67)).font(.caption2)
|
||||
}
|
||||
if showStatus {
|
||||
if let (icon, statusColor) = meta.statusIcon(color) {
|
||||
let t = Text(Image(systemName: icon)).font(.caption2)
|
||||
|
||||
@@ -19,6 +19,8 @@ struct CIRcvDecryptionError: View {
|
||||
var chatItem: ChatItem
|
||||
@State private var alert: CIRcvDecryptionErrorAlert?
|
||||
|
||||
@AppStorage(DEFAULT_SHOW_SENT_VIA_RPOXY) private var showSentViaProxy = false
|
||||
|
||||
enum CIRcvDecryptionErrorAlert: Identifiable {
|
||||
case syncAllowedAlert(_ syncConnection: () -> Void)
|
||||
case syncNotSupportedContactAlert
|
||||
@@ -119,7 +121,7 @@ struct CIRcvDecryptionError: View {
|
||||
.foregroundColor(syncSupported ? .accentColor : .secondary)
|
||||
.font(.callout)
|
||||
+ Text(" ")
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true)
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showViaProxy: showSentViaProxy)
|
||||
)
|
||||
}
|
||||
.padding(.horizontal, 12)
|
||||
@@ -140,7 +142,7 @@ struct CIRcvDecryptionError: View {
|
||||
.foregroundColor(.red)
|
||||
.italic()
|
||||
+ Text(" ")
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true)
|
||||
+ ciMetaText(chatItem.meta, chatTTL: nil, encrypted: nil, transparent: true, showViaProxy: showSentViaProxy)
|
||||
}
|
||||
.padding(.horizontal, 12)
|
||||
CIMetaView(chat: chat, chatItem: chatItem)
|
||||
|
||||
@@ -87,12 +87,17 @@ struct FramedItemView: View {
|
||||
.cornerRadius(18)
|
||||
.onPreferenceChange(DetermineWidth.Key.self) { msgWidth = $0 }
|
||||
|
||||
switch chatItem.meta.itemStatus {
|
||||
case .sndErrorAuth:
|
||||
v.onTapGesture { msgDeliveryError("Most likely this contact has deleted the connection with you.") }
|
||||
case let .sndError(agentError):
|
||||
v.onTapGesture { msgDeliveryError("Unexpected error: \(agentError)") }
|
||||
default: v
|
||||
if let (title, text) = chatItem.meta.itemStatus.statusInfo {
|
||||
v.onTapGesture {
|
||||
AlertManager.shared.showAlert(
|
||||
Alert(
|
||||
title: Text(title),
|
||||
message: Text(text)
|
||||
)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
v
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,13 +162,6 @@ struct FramedItemView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func msgDeliveryError(_ err: LocalizedStringKey) {
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title: "Message delivery error",
|
||||
message: err
|
||||
)
|
||||
}
|
||||
|
||||
@ViewBuilder func framedItemHeader(icon: String? = nil, caption: Text, pad: Bool = false) -> some View {
|
||||
let v = HStack(spacing: 6) {
|
||||
@@ -248,7 +246,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 {
|
||||
|
||||
@@ -35,6 +35,8 @@ struct MsgContentView: View {
|
||||
@State private var typingIdx = 0
|
||||
@State private var timer: Timer?
|
||||
|
||||
@AppStorage(DEFAULT_SHOW_SENT_VIA_RPOXY) private var showSentViaProxy = false
|
||||
|
||||
var body: some View {
|
||||
if meta?.isLive == true {
|
||||
msgContentView()
|
||||
@@ -81,7 +83,7 @@ struct MsgContentView: View {
|
||||
}
|
||||
|
||||
private func reserveSpaceForMeta(_ mt: CIMeta) -> Text {
|
||||
(rightToLeft ? Text("\n") : Text(" ")) + ciMetaText(mt, chatTTL: chat.chatInfo.timedMessagesTTL, encrypted: nil, transparent: true)
|
||||
(rightToLeft ? Text("\n") : Text(" ")) + ciMetaText(mt, chatTTL: chat.chatInfo.timedMessagesTTL, encrypted: nil, transparent: true, showViaProxy: showSentViaProxy)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -383,7 +383,7 @@ struct ChatItemInfoView: View {
|
||||
let mss = membersStatuses(memberDeliveryStatuses)
|
||||
if !mss.isEmpty {
|
||||
ForEach(mss, id: \.0.groupMemberId) { memberStatus in
|
||||
memberDeliveryStatusView(memberStatus.0, memberStatus.1)
|
||||
memberDeliveryStatusView(memberStatus.0, memberStatus.1, memberStatus.2)
|
||||
}
|
||||
} else {
|
||||
Text("No delivery information")
|
||||
@@ -392,23 +392,27 @@ struct ChatItemInfoView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func membersStatuses(_ memberDeliveryStatuses: [MemberDeliveryStatus]) -> [(GroupMember, CIStatus)] {
|
||||
private func membersStatuses(_ memberDeliveryStatuses: [MemberDeliveryStatus]) -> [(GroupMember, CIStatus, Bool?)] {
|
||||
memberDeliveryStatuses.compactMap({ mds in
|
||||
if let mem = chatModel.getGroupMember(mds.groupMemberId) {
|
||||
return (mem.wrapped, mds.memberDeliveryStatus)
|
||||
return (mem.wrapped, mds.memberDeliveryStatus, mds.sentViaProxy)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private func memberDeliveryStatusView(_ member: GroupMember, _ status: CIStatus) -> some View {
|
||||
private func memberDeliveryStatusView(_ member: GroupMember, _ status: CIStatus, _ sentViaProxy: Bool?) -> some View {
|
||||
HStack{
|
||||
ProfileImage(imageStr: member.image, size: 30)
|
||||
.padding(.trailing, 2)
|
||||
Text(member.chatViewName)
|
||||
.lineLimit(1)
|
||||
Spacer()
|
||||
if sentViaProxy == true {
|
||||
Image(systemName: "arrow.forward")
|
||||
.foregroundColor(.secondary).opacity(0.67)
|
||||
}
|
||||
let v = Group {
|
||||
if let (icon, statusColor) = status.statusIcon(Color.secondary) {
|
||||
switch status {
|
||||
|
||||
@@ -593,6 +593,7 @@ struct ChatView: View {
|
||||
Text(memberNames(member, prevMember, memCount))
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
.lineLimit(2)
|
||||
.padding(.leading, memberImageSize + 14)
|
||||
.padding(.top, 7)
|
||||
}
|
||||
|
||||
@@ -712,9 +712,9 @@ 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)
|
||||
sent = await forwardItem(ci, fromChatInfo, ttl)
|
||||
if !composeState.message.isEmpty {
|
||||
sent = await send(checkLinkPreview(), quoted: sent?.id, live: false, ttl: nil)
|
||||
sent = await send(checkLinkPreview(), quoted: sent?.id, live: false, ttl: ttl)
|
||||
}
|
||||
} else if case let .editingItem(ci) = composeState.contextItem {
|
||||
sent = await updateMessage(ci, live: live)
|
||||
@@ -890,13 +890,14 @@ struct ComposeView: View {
|
||||
return nil
|
||||
}
|
||||
|
||||
func forwardItem(_ forwardedItem: ChatItem, _ fromChatInfo: ChatInfo) async -> ChatItem? {
|
||||
func forwardItem(_ forwardedItem: ChatItem, _ fromChatInfo: ChatInfo, _ ttl: Int?) async -> ChatItem? {
|
||||
if let chatItem = await apiForwardChatItem(
|
||||
toChatType: chat.chatInfo.chatType,
|
||||
toChatId: chat.chatInfo.apiId,
|
||||
fromChatType: fromChatInfo.chatType,
|
||||
fromChatId: fromChatInfo.apiId,
|
||||
itemId: forwardedItem.id
|
||||
itemId: forwardedItem.id,
|
||||
ttl: ttl
|
||||
) {
|
||||
await MainActor.run {
|
||||
chatModel.addChatItem(chat.chatInfo, chatItem)
|
||||
|
||||
@@ -224,8 +224,7 @@ struct SendMessageView: View {
|
||||
|
||||
@ViewBuilder private func sendButtonContextMenuItems() -> some View {
|
||||
if composeState.liveMessage == nil,
|
||||
!composeState.editing,
|
||||
!composeState.forwarding {
|
||||
!composeState.editing {
|
||||
if case .noContextItem = composeState.contextItem,
|
||||
!composeState.voicePreview,
|
||||
let send = sendLiveMessage,
|
||||
|
||||
@@ -240,14 +240,14 @@ struct ChatPreviewView: View {
|
||||
|
||||
private func itemStatusMark(_ cItem: ChatItem) -> Text {
|
||||
switch cItem.meta.itemStatus {
|
||||
case .sndErrorAuth:
|
||||
case .sndErrorAuth, .sndError:
|
||||
return Text(Image(systemName: "multiply"))
|
||||
.font(.caption)
|
||||
.foregroundColor(.red) + Text(" ")
|
||||
case .sndError:
|
||||
case .sndWarning:
|
||||
return Text(Image(systemName: "exclamationmark.triangle.fill"))
|
||||
.font(.caption)
|
||||
.foregroundColor(.yellow) + Text(" ")
|
||||
.foregroundColor(.orange) + Text(" ")
|
||||
default: return Text("")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,10 +51,10 @@ struct AdvancedNetworkSettings: View {
|
||||
}
|
||||
.disabled(currentNetCfg == NetCfg.proxyDefaults)
|
||||
|
||||
timeoutSettingPicker("TCP connection timeout", selection: $netCfg.tcpConnectTimeout, values: [10_000000, 15_000000, 20_000000, 25_000000, 35_000000, 50_000000], label: secondsLabel)
|
||||
timeoutSettingPicker("TCP connection timeout", selection: $netCfg.tcpConnectTimeout, values: [10_000000, 15_000000, 20_000000, 30_000000, 45_000000, 60_000000, 90_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: [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: "")
|
||||
// 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)
|
||||
|
||||
@@ -12,12 +12,16 @@ import SimpleXChat
|
||||
private enum NetworkAlert: Identifiable {
|
||||
case updateOnionHosts(hosts: OnionHosts)
|
||||
case updateSessionMode(mode: TransportSessionMode)
|
||||
case updateSMPProxyMode(proxyMode: SMPProxyMode)
|
||||
case updateSMPProxyFallback(proxyFallback: SMPProxyFallback)
|
||||
case error(err: String)
|
||||
|
||||
var id: String {
|
||||
switch self {
|
||||
case let .updateOnionHosts(hosts): return "updateOnionHosts \(hosts)"
|
||||
case let .updateSessionMode(mode): return "updateSessionMode \(mode)"
|
||||
case let .updateSMPProxyMode(proxyMode): return "updateSMPProxyMode \(proxyMode)"
|
||||
case let .updateSMPProxyFallback(proxyFallback): return "updateSMPProxyFallback \(proxyFallback)"
|
||||
case let .error(err): return "error \(err)"
|
||||
}
|
||||
}
|
||||
@@ -26,11 +30,14 @@ private enum NetworkAlert: Identifiable {
|
||||
struct NetworkAndServers: View {
|
||||
@EnvironmentObject var m: ChatModel
|
||||
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
|
||||
@AppStorage(DEFAULT_SHOW_SENT_VIA_RPOXY) private var showSentViaProxy = true
|
||||
@State private var cfgLoaded = false
|
||||
@State private var currentNetCfg = NetCfg.defaults
|
||||
@State private var netCfg = NetCfg.defaults
|
||||
@State private var onionHosts: OnionHosts = .no
|
||||
@State private var sessionMode: TransportSessionMode = .user
|
||||
@State private var proxyMode: SMPProxyMode = .never
|
||||
@State private var proxyFallback: SMPProxyFallback = .allow
|
||||
@State private var alert: NetworkAlert?
|
||||
|
||||
var body: some View {
|
||||
@@ -75,6 +82,30 @@ struct NetworkAndServers: View {
|
||||
Text("Using .onion hosts requires compatible VPN provider.")
|
||||
}
|
||||
|
||||
// Section {
|
||||
// Picker("Private routing", selection: $proxyMode) {
|
||||
// ForEach(SMPProxyMode.values, id: \.self) { Text($0.text) }
|
||||
// }
|
||||
// .frame(height: 36)
|
||||
//
|
||||
// Picker("Allow downgrade", selection: $proxyFallback) {
|
||||
// ForEach(SMPProxyFallback.values, id: \.self) { Text($0.text) }
|
||||
// }
|
||||
// .disabled(proxyMode == .never)
|
||||
// .frame(height: 36)
|
||||
//
|
||||
// Toggle("Show message status", isOn: $showSentViaProxy)
|
||||
// } header: {
|
||||
// Text("Private message routing")
|
||||
// } footer: {
|
||||
// VStack(alignment: .leading) {
|
||||
// Text("To protect your IP address, private routing uses your SMP servers to deliver messages.")
|
||||
// if showSentViaProxy {
|
||||
// Text("Show → on messages sent via private routing.")
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
Section("Calls") {
|
||||
NavigationLink {
|
||||
RTCServers()
|
||||
@@ -99,14 +130,24 @@ struct NetworkAndServers: View {
|
||||
currentNetCfg = getNetCfg()
|
||||
resetNetCfgView()
|
||||
}
|
||||
.onChange(of: onionHosts) { _ in
|
||||
if onionHosts != OnionHosts(netCfg: currentNetCfg) {
|
||||
alert = .updateOnionHosts(hosts: onionHosts)
|
||||
.onChange(of: onionHosts) { hosts in
|
||||
if hosts != OnionHosts(netCfg: currentNetCfg) {
|
||||
alert = .updateOnionHosts(hosts: hosts)
|
||||
}
|
||||
}
|
||||
.onChange(of: sessionMode) { _ in
|
||||
if sessionMode != netCfg.sessionMode {
|
||||
alert = .updateSessionMode(mode: sessionMode)
|
||||
.onChange(of: sessionMode) { mode in
|
||||
if mode != netCfg.sessionMode {
|
||||
alert = .updateSessionMode(mode: mode)
|
||||
}
|
||||
}
|
||||
.onChange(of: proxyMode) { mode in
|
||||
if mode != netCfg.smpProxyMode {
|
||||
alert = .updateSMPProxyMode(proxyMode: mode)
|
||||
}
|
||||
}
|
||||
.onChange(of: proxyFallback) { fallbackMode in
|
||||
if fallbackMode != netCfg.smpProxyFallback {
|
||||
alert = .updateSMPProxyFallback(proxyFallback: fallbackMode)
|
||||
}
|
||||
}
|
||||
.alert(item: $alert) { a in
|
||||
@@ -137,6 +178,30 @@ struct NetworkAndServers: View {
|
||||
resetNetCfgView()
|
||||
}
|
||||
)
|
||||
case let .updateSMPProxyMode(proxyMode):
|
||||
return Alert(
|
||||
title: Text("Message routing mode"),
|
||||
message: Text(proxyModeInfo(proxyMode)) + Text("\n") + Text("Updating this setting will re-connect the client to all servers."),
|
||||
primaryButton: .default(Text("Ok")) {
|
||||
netCfg.smpProxyMode = proxyMode
|
||||
saveNetCfg()
|
||||
},
|
||||
secondaryButton: .cancel() {
|
||||
resetNetCfgView()
|
||||
}
|
||||
)
|
||||
case let .updateSMPProxyFallback(proxyFallback):
|
||||
return Alert(
|
||||
title: Text("Message routing fallback"),
|
||||
message: Text(proxyFallbackInfo(proxyFallback)) + Text("\n") + Text("Updating this setting will re-connect the client to all servers."),
|
||||
primaryButton: .default(Text("Ok")) {
|
||||
netCfg.smpProxyFallback = proxyFallback
|
||||
saveNetCfg()
|
||||
},
|
||||
secondaryButton: .cancel() {
|
||||
resetNetCfgView()
|
||||
}
|
||||
)
|
||||
case let .error(err):
|
||||
return Alert(
|
||||
title: Text("Error updating settings"),
|
||||
@@ -166,6 +231,8 @@ struct NetworkAndServers: View {
|
||||
netCfg = currentNetCfg
|
||||
onionHosts = OnionHosts(netCfg: netCfg)
|
||||
sessionMode = netCfg.sessionMode
|
||||
proxyMode = netCfg.smpProxyMode
|
||||
proxyFallback = netCfg.smpProxyFallback
|
||||
}
|
||||
|
||||
private func onionHostsInfo(_ hosts: OnionHosts) -> LocalizedStringKey {
|
||||
@@ -182,6 +249,23 @@ struct NetworkAndServers: View {
|
||||
case .entity: return "A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail."
|
||||
}
|
||||
}
|
||||
|
||||
private func proxyModeInfo(_ mode: SMPProxyMode) -> LocalizedStringKey {
|
||||
switch mode {
|
||||
case .always: return "Always use private routing."
|
||||
case .unknown: return "Use private routing with unknown servers."
|
||||
case .unprotected: return "Use private routing with unknown servers when IP address is not protected."
|
||||
case .never: return "Do NOT use private routing."
|
||||
}
|
||||
}
|
||||
|
||||
private func proxyFallbackInfo(_ proxyFallback: SMPProxyFallback) -> LocalizedStringKey {
|
||||
switch proxyFallback {
|
||||
case .allow: return "Send messages directly when your or destination server does not support private routing."
|
||||
case .allowProtected: return "Send messages directly when IP address is protected and your or destination server does not support private routing."
|
||||
case .prohibit: return "Do NOT send messages directly, even if your or destination server does not support private routing."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct NetworkServersView_Previews: PreviewProvider {
|
||||
|
||||
@@ -60,6 +60,7 @@ let DEFAULT_DEVICE_NAME_FOR_REMOTE_ACCESS = "deviceNameForRemoteAccess"
|
||||
let DEFAULT_CONFIRM_REMOTE_SESSIONS = "confirmRemoteSessions"
|
||||
let DEFAULT_CONNECT_REMOTE_VIA_MULTICAST = "connectRemoteViaMulticast"
|
||||
let DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO = "connectRemoteViaMulticastAuto"
|
||||
let DEFAULT_SHOW_SENT_VIA_RPOXY = "showSentViaProxy"
|
||||
|
||||
let ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN = "androidCallOnLockScreen"
|
||||
|
||||
@@ -99,6 +100,7 @@ let appDefaults: [String: Any] = [
|
||||
DEFAULT_CONFIRM_REMOTE_SESSIONS: false,
|
||||
DEFAULT_CONNECT_REMOTE_VIA_MULTICAST: true,
|
||||
DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO: true,
|
||||
DEFAULT_SHOW_SENT_VIA_RPOXY: false,
|
||||
ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN: AppSettingsLockScreenCalls.show.rawValue
|
||||
]
|
||||
|
||||
|
||||
@@ -2805,6 +2805,7 @@ This cannot be undone!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Препращане и запазване на съобщения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
@@ -3174,6 +3175,7 @@ This cannot be undone!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="In-call sounds" xml:space="preserve">
|
||||
<source>In-call sounds</source>
|
||||
<target>Звуци по време на разговор</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito" xml:space="preserve">
|
||||
@@ -3653,6 +3655,7 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
<source>Message source remains private.</source>
|
||||
<target>Източникът на съобщението остава скрит.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message text" xml:space="preserve">
|
||||
@@ -3772,6 +3775,7 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="More reliable network connection." xml:space="preserve">
|
||||
<source>More reliable network connection.</source>
|
||||
<target>По-надеждна мрежова връзка.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Most likely this connection is deleted." xml:space="preserve">
|
||||
@@ -3816,6 +3820,7 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network management" xml:space="preserve">
|
||||
<source>Network management</source>
|
||||
<target>Управление на мрежата</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network settings" xml:space="preserve">
|
||||
@@ -4371,6 +4376,7 @@ Error: %@</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Профилни изображения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -5195,6 +5201,7 @@ Error: %@</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Променете формата на профилните изображения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5364,6 +5371,7 @@ Error: %@</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Квадрат, кръг или нещо между тях.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
@@ -6244,6 +6252,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="When connecting audio and video calls." xml:space="preserve">
|
||||
<source>When connecting audio and video calls.</source>
|
||||
<target>При свързване на аудио и видео разговори.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
@@ -6263,6 +6272,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Will be enabled in direct chats!" xml:space="preserve">
|
||||
<source>Will be enabled in direct chats!</source>
|
||||
<target>Ще бъде активирано в личните чатове!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wired ethernet" xml:space="preserve">
|
||||
|
||||
@@ -4376,6 +4376,7 @@ Fehler: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Profil-Bilder</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -5200,6 +5201,7 @@ Fehler: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Form der Profil-Bilder</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5369,6 +5371,7 @@ Fehler: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Quadratisch, kreisförmig oder irgendetwas dazwischen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
@@ -6029,7 +6032,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
</trans-unit>
|
||||
<trans-unit id="Use current profile" xml:space="preserve">
|
||||
<source>Use current profile</source>
|
||||
<target>Nutzen Sie das aktuelle Profil</target>
|
||||
<target>Das aktuelle Profil nutzen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use for new connections" xml:space="preserve">
|
||||
|
||||
@@ -4376,6 +4376,7 @@ Error: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Imágenes del perfil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -5200,6 +5201,7 @@ Error: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Dar forma a las imágenes de perfil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5369,6 +5371,7 @@ Error: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Cuadrada, circular o cualquier forma intermedia.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
|
||||
@@ -745,6 +745,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow to send SimpleX links." xml:space="preserve">
|
||||
<source>Allow to send SimpleX links.</source>
|
||||
<target>Autorise l'envoi de liens SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow to send files and media." xml:space="preserve">
|
||||
@@ -1089,6 +1090,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Cellular" xml:space="preserve">
|
||||
<source>Cellular</source>
|
||||
<target>Cellulaire</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change" xml:space="preserve">
|
||||
@@ -2088,6 +2090,7 @@ Cette opération ne peut être annulée !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Télécharger</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download failed" xml:space="preserve">
|
||||
@@ -2202,6 +2205,7 @@ Cette opération ne peut être annulée !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enabled for" xml:space="preserve">
|
||||
<source>Enabled for</source>
|
||||
<target>Activé pour</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt" xml:space="preserve">
|
||||
@@ -2726,6 +2730,7 @@ Cette opération ne peut être annulée !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Files and media not allowed" xml:space="preserve">
|
||||
<source>Files and media not allowed</source>
|
||||
<target>Fichiers et médias non autorisés</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Files and media prohibited!" xml:space="preserve">
|
||||
@@ -2795,18 +2800,22 @@ Cette opération ne peut être annulée !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward" xml:space="preserve">
|
||||
<source>Forward</source>
|
||||
<target>Transférer</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Transférer et sauvegarder des messages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Transféré</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded from" xml:space="preserve">
|
||||
<source>Forwarded from</source>
|
||||
<target>Transféré depuis</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Found desktop" xml:space="preserve">
|
||||
@@ -2921,6 +2930,7 @@ Cette opération ne peut être annulée !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group members can send SimpleX links." xml:space="preserve">
|
||||
<source>Group members can send SimpleX links.</source>
|
||||
<target>Les membres du groupe peuvent envoyer des liens SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group members can send direct messages." xml:space="preserve">
|
||||
@@ -3165,6 +3175,7 @@ Cette opération ne peut être annulée !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="In-call sounds" xml:space="preserve">
|
||||
<source>In-call sounds</source>
|
||||
<target>Sons d'appel</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito" xml:space="preserve">
|
||||
@@ -3644,6 +3655,7 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
<source>Message source remains private.</source>
|
||||
<target>La source du message reste privée.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message text" xml:space="preserve">
|
||||
@@ -3763,6 +3775,7 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="More reliable network connection." xml:space="preserve">
|
||||
<source>More reliable network connection.</source>
|
||||
<target>Connexion réseau plus fiable.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Most likely this connection is deleted." xml:space="preserve">
|
||||
@@ -3802,10 +3815,12 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network connection" xml:space="preserve">
|
||||
<source>Network connection</source>
|
||||
<target>Connexion au réseau</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network management" xml:space="preserve">
|
||||
<source>Network management</source>
|
||||
<target>Gestion du réseau</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network settings" xml:space="preserve">
|
||||
@@ -3920,6 +3935,7 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="No network connection" xml:space="preserve">
|
||||
<source>No network connection</source>
|
||||
<target>Pas de connexion au réseau</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
@@ -4138,6 +4154,7 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other" xml:space="preserve">
|
||||
<source>Other</source>
|
||||
<target>Autres</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
@@ -4359,6 +4376,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Images de profil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -4403,6 +4421,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit sending SimpleX links." xml:space="preserve">
|
||||
<source>Prohibit sending SimpleX links.</source>
|
||||
<target>Interdire l'envoi de liens SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit sending direct messages to members." xml:space="preserve">
|
||||
@@ -4537,6 +4556,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving concurrency" xml:space="preserve">
|
||||
<source>Receiving concurrency</source>
|
||||
<target>Réception simultanée</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
@@ -4556,6 +4576,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Recipient(s) can't see who this message is from." xml:space="preserve">
|
||||
<source>Recipient(s) can't see who this message is from.</source>
|
||||
<target>Le(s) destinataire(s) ne peut(vent) pas voir de qui provient ce message.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Recipients see updates as you type them." xml:space="preserve">
|
||||
@@ -4860,6 +4881,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Enregistré</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
|
||||
@@ -4869,6 +4891,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved from" xml:space="preserve">
|
||||
<source>Saved from</source>
|
||||
<target>Enregistré depuis</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved message" xml:space="preserve">
|
||||
@@ -5178,6 +5201,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Images de profil modelable</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5302,10 +5326,12 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX links are prohibited in this group." xml:space="preserve">
|
||||
<source>SimpleX links are prohibited in this group.</source>
|
||||
<target>Les liens SimpleX sont interdits dans ce groupe.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX links not allowed" xml:space="preserve">
|
||||
<source>SimpleX links not allowed</source>
|
||||
<target>Les liens SimpleX ne sont pas autorisés</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
@@ -5345,6 +5371,7 @@ Erreur : %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Carré, circulaire, ou toute autre forme intermédiaire.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
@@ -6150,6 +6177,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
</trans-unit>
|
||||
<trans-unit id="Voice messages not allowed" xml:space="preserve">
|
||||
<source>Voice messages not allowed</source>
|
||||
<target>Les messages vocaux ne sont pas autorisés</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Voice messages prohibited!" xml:space="preserve">
|
||||
@@ -6224,6 +6252,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
</trans-unit>
|
||||
<trans-unit id="When connecting audio and video calls." xml:space="preserve">
|
||||
<source>When connecting audio and video calls.</source>
|
||||
<target>Lors des appels audio et vidéo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
@@ -6238,14 +6267,17 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
</trans-unit>
|
||||
<trans-unit id="WiFi" xml:space="preserve">
|
||||
<source>WiFi</source>
|
||||
<target>WiFi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Will be enabled in direct chats!" xml:space="preserve">
|
||||
<source>Will be enabled in direct chats!</source>
|
||||
<target>Activé dans les discussions directes !</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wired ethernet" xml:space="preserve">
|
||||
<source>Wired ethernet</source>
|
||||
<target>Ethernet câblé</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="With encrypted files and media." xml:space="preserve">
|
||||
@@ -6733,6 +6765,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="admins" xml:space="preserve">
|
||||
<source>admins</source>
|
||||
<target>admins</target>
|
||||
<note>feature role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="agreeing encryption for %@…" xml:space="preserve">
|
||||
@@ -6747,6 +6780,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="all members" xml:space="preserve">
|
||||
<source>all members</source>
|
||||
<target>tous les membres</target>
|
||||
<note>feature role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="always" xml:space="preserve">
|
||||
@@ -7081,6 +7115,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded" xml:space="preserve">
|
||||
<source>forwarded</source>
|
||||
<target>transféré</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group deleted" xml:space="preserve">
|
||||
@@ -7292,6 +7327,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="owners" xml:space="preserve">
|
||||
<source>owners</source>
|
||||
<target>propriétaires</target>
|
||||
<note>feature role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="peer-to-peer" xml:space="preserve">
|
||||
@@ -7346,10 +7382,12 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>enregistré</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>enregistré à partir de %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="sec" xml:space="preserve">
|
||||
@@ -7494,6 +7532,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you" xml:space="preserve">
|
||||
<source>you</source>
|
||||
<target>vous</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you are invited to group" xml:space="preserve">
|
||||
|
||||
@@ -94,17 +94,17 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ and %@ connected" xml:space="preserve">
|
||||
<source>%@ and %@ connected</source>
|
||||
<target>%@ és %@ csatlakozott</target>
|
||||
<target>%@ és %@ kapcsolódott</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ at %@:" xml:space="preserve">
|
||||
<source>%1$@ at %2$@:</source>
|
||||
<target>%1$@ %2$@-kor:</target>
|
||||
<target>%1$@ ekkor: %2$@</target>
|
||||
<note>copied message info, <sender> at <time></note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ connected" xml:space="preserve">
|
||||
<source>%@ connected</source>
|
||||
<target>%@ csatlakozott</target>
|
||||
<target>%@ kapcsolódott</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ downloaded" xml:space="preserve">
|
||||
@@ -114,7 +114,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is connected!" xml:space="preserve">
|
||||
<source>%@ is connected!</source>
|
||||
<target>%@ csatlakozott!</target>
|
||||
<target>%@ kapcsolódott!</target>
|
||||
<note>notification title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is not verified" xml:space="preserve">
|
||||
@@ -139,7 +139,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ wants to connect!" xml:space="preserve">
|
||||
<source>%@ wants to connect!</source>
|
||||
<target>%@ csatlakozni szeretne!</target>
|
||||
<target>%@ kapcsolódni szeretne!</target>
|
||||
<note>notification title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@, %@ and %lld members" xml:space="preserve">
|
||||
@@ -149,7 +149,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve">
|
||||
<source>%@, %@ and %lld other members connected</source>
|
||||
<target>%@, %@ és további %lld tag csatlakozott</target>
|
||||
<target>%@, %@ és további %lld tag kapcsolódott</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@:" xml:space="preserve">
|
||||
@@ -319,7 +319,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="(this device v%@)" xml:space="preserve">
|
||||
<source>(this device v%@)</source>
|
||||
<target>(ez az eszköz v%@)</target>
|
||||
<target>(ez az eszköz: v%@)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=")" xml:space="preserve">
|
||||
@@ -329,7 +329,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
|
||||
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
|
||||
<target>**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.</target>
|
||||
<target>**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.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
|
||||
@@ -585,7 +585,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." xml:space="preserve">
|
||||
<source>Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts.</source>
|
||||
<target>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.</target>
|
||||
<target>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.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Add contact" xml:space="preserve">
|
||||
@@ -640,7 +640,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Az adminok hivatkozásokat hozhatnak létre a csoportokhoz való csatlakozáshoz.</target>
|
||||
<target>Az adminok hivatkozásokat hozhatnak létre a csoportokhoz való kapcsolódáshoz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Advanced network settings" xml:space="preserve">
|
||||
@@ -665,7 +665,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
<source>All group members will remain connected.</source>
|
||||
<target>Minden csoporttag csatlakoztatva marad.</target>
|
||||
<target>Minden csoporttag kapcsolódva marad.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve">
|
||||
@@ -685,7 +685,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
<target>Minden ismerős csatlakoztatva marad.</target>
|
||||
<target>Minden ismerős kapcsolódva marad.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected. Profile update will be sent to your contacts." xml:space="preserve">
|
||||
@@ -795,7 +795,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Already connected?" xml:space="preserve">
|
||||
<source>Already connected?</source>
|
||||
<target>Csatlakoztatva?</target>
|
||||
<target>Már kapcsolódott?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Already connecting!" xml:space="preserve">
|
||||
@@ -805,7 +805,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Already joining the group!" xml:space="preserve">
|
||||
<source>Already joining the group!</source>
|
||||
<target>Csatlakozás folyamatban!</target>
|
||||
<target>A csatlakozás folyamatban van a csoporthoz!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Always use relay" xml:space="preserve">
|
||||
@@ -920,7 +920,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve">
|
||||
<source>Authentication is required before the call is connected, but you may miss calls.</source>
|
||||
<target>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.</target>
|
||||
<target>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.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Authentication unavailable" xml:space="preserve">
|
||||
@@ -1070,12 +1070,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Megszakítás</target>
|
||||
<target>Mégse</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
<target>Átköltöztetés megszakítása</target>
|
||||
<target>Átköltöztetés visszavonása</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
|
||||
@@ -1350,17 +1350,17 @@ Ez az egyszer használatos hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via contact address" xml:space="preserve">
|
||||
<source>Connect via contact address</source>
|
||||
<target>Csatlakozás ismerős azonosítója által</target>
|
||||
<target>Kapcsolódás a kapcsolattartási azonosítón keresztül</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via link" xml:space="preserve">
|
||||
<source>Connect via link</source>
|
||||
<target>Csatlakozás egy hivatkozáson keresztül</target>
|
||||
<target>Kapcsolódás egy hivatkozáson keresztül</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via one-time link" xml:space="preserve">
|
||||
<source>Connect via one-time link</source>
|
||||
<target>Csatlakozás egyszer használatos hivatkozáson keresztül</target>
|
||||
<target>Kapcsolódás egyszer használatos hivatkozáson keresztül</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect with %@" xml:space="preserve">
|
||||
@@ -1440,12 +1440,12 @@ Ez az egyszer használatos hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact is connected" xml:space="preserve">
|
||||
<source>Contact is connected</source>
|
||||
<target>Ismerős csatlakozott</target>
|
||||
<target>Ismerőse kapcsolódott</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact is not connected yet!" xml:space="preserve">
|
||||
<source>Contact is not connected yet!</source>
|
||||
<target>Az ismerős még nem csatlakozott!</target>
|
||||
<target>Az ismerőse még nem kapcsolódott!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact name" xml:space="preserve">
|
||||
@@ -2570,7 +2570,7 @@ Ez a művelet nem vonható vissza!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error stopping chat" xml:space="preserve">
|
||||
<source>Error stopping chat</source>
|
||||
<target>Hiba a csevegés megszakításakor</target>
|
||||
<target>Hiba a csevegés megállításakor</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
@@ -2700,12 +2700,12 @@ Ez a művelet nem vonható vissza!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be received when your contact completes uploading it." xml:space="preserve">
|
||||
<source>File will be received when your contact completes uploading it.</source>
|
||||
<target>A fájl akkor érkezik meg, amikor ismerőse befejezte annak feltöltést.</target>
|
||||
<target>A fájl akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be received when your contact is online, please wait or check later!" xml:space="preserve">
|
||||
<source>File will be received when your contact is online, please wait or check later!</source>
|
||||
<target>A fájl akkor érkezik meg, amint ismerőse online lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<target>A fájl akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File: %@" xml:space="preserve">
|
||||
@@ -3105,12 +3105,12 @@ Ez a művelet nem vonható vissza!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Image will be received when your contact completes uploading it." xml:space="preserve">
|
||||
<source>Image will be received when your contact completes uploading it.</source>
|
||||
<target>A kép akkor érkezik meg, amikor ismerőse befejezte annak feltöltését.</target>
|
||||
<target>A kép akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Image will be received when your contact is online, please wait or check later!" xml:space="preserve">
|
||||
<source>Image will be received when your contact is online, please wait or check later!</source>
|
||||
<target>A kép akkor érkezik meg, amikor ismerős elérhető lesz, várjon vagy ellenőrizze később!</target>
|
||||
<target>A kép akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Immediately" xml:space="preserve">
|
||||
@@ -3368,7 +3368,7 @@ Ez a művelet nem vonható vissza!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="It seems like you are already connected via this link. If it is not the case, there was an error (%@)." xml:space="preserve">
|
||||
<source>It seems like you are already connected via this link. If it is not the case, there was an error (%@).</source>
|
||||
<target>Úgy tűnik, már csatlakozott ezen a hivatkozáson keresztül. Ha ez nem így van, akkor hiba történt (%@).</target>
|
||||
<target>Úgy tűnik, már kapcsolódott ezen a hivatkozáson keresztül. Ha ez nem így van, akkor hiba történt (%@).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Italian interface" xml:space="preserve">
|
||||
@@ -4004,17 +4004,17 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Onion hosts will be required for connection. Requires enabling VPN." xml:space="preserve">
|
||||
<source>Onion hosts will be required for connection. Requires enabling VPN.</source>
|
||||
<target>A csatlakozáshoz Onion host-okra lesz szükség. VPN engedélyezése szükséges.</target>
|
||||
<target>A kapcsolódáshoz Onion kiszolgálókra lesz szükség. VPN engedélyezése szükséges.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Onion hosts will be used when available. Requires enabling VPN." xml:space="preserve">
|
||||
<source>Onion hosts will be used when available. Requires enabling VPN.</source>
|
||||
<target>Onion host-ok használata, ha azok rendelkezésre állnak. VPN engedélyezése szükséges.</target>
|
||||
<target>Onion kiszolgálók használata, ha azok rendelkezésre állnak. VPN engedélyezése szükséges.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Onion hosts will not be used." xml:space="preserve">
|
||||
<source>Onion hosts will not be used.</source>
|
||||
<target>Onion host-ok nem lesznek használva.</target>
|
||||
<target>Onion kiszolgálók nem lesznek használva.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." xml:space="preserve">
|
||||
@@ -4214,7 +4214,7 @@ Ez az ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paste link to connect!" xml:space="preserve">
|
||||
<source>Paste link to connect!</source>
|
||||
<target>Hivatkozás beillesztése a csatlakozáshoz!</target>
|
||||
<target>Hivatkozás beillesztése a kapcsolódáshoz!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paste the link you received" xml:space="preserve">
|
||||
@@ -4376,6 +4376,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Profilképek</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -4585,12 +4586,12 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reconnect all connected servers to force message delivery. It uses additional traffic." xml:space="preserve">
|
||||
<source>Reconnect all connected servers to force message delivery. It uses additional traffic.</source>
|
||||
<target>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.</target>
|
||||
<target>Ú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.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reconnect servers?" xml:space="preserve">
|
||||
<source>Reconnect servers?</source>
|
||||
<target>Kiszolgálók újracsatlakoztatása?</target>
|
||||
<target>Újrakapcsolódás a kiszolgálókhoz?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at" xml:space="preserve">
|
||||
@@ -5000,7 +5001,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send direct message to connect" xml:space="preserve">
|
||||
<source>Send direct message to connect</source>
|
||||
<target>Közvetlen üzenet küldése a csatlakozáshoz</target>
|
||||
<target>Közvetlen üzenet küldése a kapcsolódáshoz</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send disappearing message" xml:space="preserve">
|
||||
@@ -5200,6 +5201,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Profilkép alakzat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5219,7 +5221,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share address with contacts?" xml:space="preserve">
|
||||
<source>Share address with contacts?</source>
|
||||
<target>Megosztja az azonosítót az ismerősökkel?</target>
|
||||
<target>Megosztja az azonosítót az ismerőseivel?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share link" xml:space="preserve">
|
||||
@@ -5304,7 +5306,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX contact address" xml:space="preserve">
|
||||
<source>SimpleX contact address</source>
|
||||
<target>SimpleX ismerős azonosítója</target>
|
||||
<target>SimpleX kapcsolattartási azonosító</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX encrypted message or connection event" xml:space="preserve">
|
||||
@@ -5369,6 +5371,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Négyzet, kör vagy bármi a kettő között.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
@@ -5388,62 +5391,62 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop" xml:space="preserve">
|
||||
<source>Stop</source>
|
||||
<target>Megszakítás</target>
|
||||
<target>Megállítás</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop SimpleX" xml:space="preserve">
|
||||
<source>Stop SimpleX</source>
|
||||
<target>A SimpleX megszakítása</target>
|
||||
<target>SimpleX megállítása</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop chat" xml:space="preserve">
|
||||
<source>Stop chat</source>
|
||||
<target>Csevegési szolgáltatás megszakítása</target>
|
||||
<target>Csevegési szolgáltatás megállítása</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop chat to enable database actions" xml:space="preserve">
|
||||
<source>Stop chat to enable database actions</source>
|
||||
<target>Csevegés megszakítása az adatbázis-műveletek engedélyezéséhez</target>
|
||||
<target>Csevegés megállítása az adatbázis-műveletek engedélyezéséhez</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped." xml:space="preserve">
|
||||
<source>Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped.</source>
|
||||
<target>A csevegés megszakítása a csevegőadatbázis exportálásához, importálásához vagy törléséhez. A csevegés megszakítása alatt nem tud üzeneteket fogadni és küldeni.</target>
|
||||
<target>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.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop chat?" xml:space="preserve">
|
||||
<source>Stop chat?</source>
|
||||
<target>Csevegési szolgáltatás megszakítása?</target>
|
||||
<target>Csevegési szolgáltatás megállítása?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop file" xml:space="preserve">
|
||||
<source>Stop file</source>
|
||||
<target>Fájl megszakítása</target>
|
||||
<target>Fájl megállítása</target>
|
||||
<note>cancel file action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop receiving file?" xml:space="preserve">
|
||||
<source>Stop receiving file?</source>
|
||||
<target>Fájl fogadás megszakítása?</target>
|
||||
<target>Fájl fogadás megállítása?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop sending file?" xml:space="preserve">
|
||||
<source>Stop sending file?</source>
|
||||
<target>Fájl küldés megszakítása?</target>
|
||||
<target>Fájl küldés megállítása?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop sharing" xml:space="preserve">
|
||||
<source>Stop sharing</source>
|
||||
<target>Megosztás megszakítása</target>
|
||||
<target>Megosztás megállítása</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop sharing address?" xml:space="preserve">
|
||||
<source>Stop sharing address?</source>
|
||||
<target>Címmegosztás megszakítása?</target>
|
||||
<target>Címmegosztás megállítása?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stopping chat" xml:space="preserve">
|
||||
<source>Stopping chat</source>
|
||||
<target>Csevegés megszakítása</target>
|
||||
<target>Csevegés megállítása folyamatban</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Submit" xml:space="preserve">
|
||||
@@ -5498,7 +5501,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tap to Connect" xml:space="preserve">
|
||||
<source>Tap to Connect</source>
|
||||
<target>Koppintson a csatlakozáshoz</target>
|
||||
<target>Koppintson a kapcsolódáshoz</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tap to activate profile." xml:space="preserve">
|
||||
@@ -5600,7 +5603,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="The contact you shared this link with will NOT be able to connect!" xml:space="preserve">
|
||||
<source>The contact you shared this link with will NOT be able to connect!</source>
|
||||
<target>Ismerőse NEM fog tudni csatlakozni, akivel megosztotta ezt a hivatkozást!</target>
|
||||
<target>Ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="The created archive is available via app Settings / Database / Old database archive." xml:space="preserve">
|
||||
@@ -5640,7 +5643,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="The profile is only shared with your contacts." xml:space="preserve">
|
||||
<source>The profile is only shared with your contacts.</source>
|
||||
<target>Profilja csak az ismerősök számára kerül megosztásra.</target>
|
||||
<target>Profilja csak az ismerőseivel kerül megosztásra.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="The second tick we missed! ✅" xml:space="preserve">
|
||||
@@ -5745,7 +5748,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="To connect, your contact can scan QR code or use the link in the app." xml:space="preserve">
|
||||
<source>To connect, your contact can scan QR code or use the link in the app.</source>
|
||||
<target>A csatlakozáshoz az ismerős beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást.</target>
|
||||
<target>A kapcsolódáshoz az ismerőse beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To hide unwanted messages." xml:space="preserve">
|
||||
@@ -5797,7 +5800,7 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<target>Inkognító mód csatlakozáskor.</target>
|
||||
<target>Inkognitó mód kapcsolódáskor.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Transport isolation" xml:space="preserve">
|
||||
@@ -5807,12 +5810,12 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej
|
||||
</trans-unit>
|
||||
<trans-unit id="Trying to connect to the server used to receive messages from this contact (error: %@)." xml:space="preserve">
|
||||
<source>Trying to connect to the server used to receive messages from this contact (error: %@).</source>
|
||||
<target>Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz (hiba: %@).</target>
|
||||
<target>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: %@).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Trying to connect to the server used to receive messages from this contact." xml:space="preserve">
|
||||
<source>Trying to connect to the server used to receive messages from this contact.</source>
|
||||
<target>Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz ettől az ismerőstől.</target>
|
||||
<target>Kapcsolódási kísérlet ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Turkish interface" xml:space="preserve">
|
||||
@@ -5918,8 +5921,8 @@ A funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befej
|
||||
<trans-unit id="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." xml:space="preserve">
|
||||
<source>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.</source>
|
||||
<target>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.</target>
|
||||
<target>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.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unlink" xml:space="preserve">
|
||||
@@ -5964,7 +5967,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="Update .onion hosts setting?" xml:space="preserve">
|
||||
<source>Update .onion hosts setting?</source>
|
||||
<target>Tor .onion host beállítások frissítése?</target>
|
||||
<target>Tor .onion kiszolgálók beállításainak frissítése?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Update database passphrase" xml:space="preserve">
|
||||
@@ -5989,7 +5992,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="Updating this setting will re-connect the client to all servers." xml:space="preserve">
|
||||
<source>Updating this setting will re-connect the client to all servers.</source>
|
||||
<target>A beállítás frissítésével a kliens újracsatlakozik az összes kiszolgálóhoz.</target>
|
||||
<target>A beállítás frissítésével a kliens újrakapcsolódik az összes kiszolgálóhoz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Upgrade and open chat" xml:space="preserve">
|
||||
@@ -6014,7 +6017,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="Use .onion hosts" xml:space="preserve">
|
||||
<source>Use .onion hosts</source>
|
||||
<target>Tor .onion hostok használata</target>
|
||||
<target>Tor .onion kiszolgálók használata</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
@@ -6074,7 +6077,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="Using .onion hosts requires compatible VPN provider." xml:space="preserve">
|
||||
<source>Using .onion hosts requires compatible VPN provider.</source>
|
||||
<target>A .onion hosztok használatához kompatibilis VPN szolgáltatóra van szükség.</target>
|
||||
<target>A .onion kiszolgálók használatához kompatibilis VPN szolgáltatóra van szükség.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
@@ -6134,12 +6137,12 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve">
|
||||
<source>Video will be received when your contact completes uploading it.</source>
|
||||
<target>A videó akkor érkezik meg, amikor az ismerőse befejezte annak feltöltését.</target>
|
||||
<target>A videó akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Video will be received when your contact is online, please wait or check later!" xml:space="preserve">
|
||||
<source>Video will be received when your contact is online, please wait or check later!</source>
|
||||
<target>A videó akkor érkezik meg, amikor az ismerős elérhető, várjon, vagy ellenőrizze később!</target>
|
||||
<target>A videó akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Videos and files up to 1gb" xml:space="preserve">
|
||||
@@ -6254,7 +6257,7 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
<source>When people request to connect, you can accept or reject it.</source>
|
||||
<target>Csatlakozási kérelmek esetében, elfogadhatja vagy elutasíthatja azokat.</target>
|
||||
<target>Amikor az emberek kapcsolódást kérelmeznek, ön elfogadhatja vagy elutasíthatja azokat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." xml:space="preserve">
|
||||
@@ -6339,12 +6342,12 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connecting to %@." xml:space="preserve">
|
||||
<source>You are already connecting to %@.</source>
|
||||
<target>Már folyamatban van a csatlakozás ehhez: %@.</target>
|
||||
<target>Már folyamatban van a kapcsolódás ehhez: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already connecting via this one-time link!" xml:space="preserve">
|
||||
<source>You are already connecting via this one-time link!</source>
|
||||
<target>Már csatlakozik ezen az egyszer használatos hivatkozáson keresztül!</target>
|
||||
<target>A kapcsolódás már folyamatban van ezen az egyszer használatos hivatkozáson keresztül!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already in group %@." xml:space="preserve">
|
||||
@@ -6354,17 +6357,17 @@ A csatlakozáshoz kérje meg ismerősét, hogy hozzon létre egy másik kapcsola
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already joining the group %@." xml:space="preserve">
|
||||
<source>You are already joining the group %@.</source>
|
||||
<target>Már folyamatban van a csatlakozás a csoporthoz %@.</target>
|
||||
<target>A csatlakozás már folyamatban van a(z) %@ csoporthoz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already joining the group via this link!" xml:space="preserve">
|
||||
<source>You are already joining the group via this link!</source>
|
||||
<target>Már csatlakozott a csoporthoz ezen a hivatkozáson keresztül!</target>
|
||||
<target>A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already joining the group via this link." xml:space="preserve">
|
||||
<source>You are already joining the group via this link.</source>
|
||||
<target>Ezen a hivatkozáson keresztül már csatlakozik a csoporthoz.</target>
|
||||
<target>A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are already joining the group! Repeat join request?" xml:space="preserve">
|
||||
@@ -6376,7 +6379,7 @@ Csatlakozási kérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this contact.</source>
|
||||
<target>Kiszolgálóhoz történő csatlakozás, mely az adott ismerőstől érkező üzenetek fogadására szolgál.</target>
|
||||
<target>Már kapcsolódott ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are invited to group" xml:space="preserve">
|
||||
@@ -6436,12 +6439,12 @@ Csatlakozási kérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can share this address with your contacts to let them connect with **%@**." xml:space="preserve">
|
||||
<source>You can share this address with your contacts to let them connect with **%@**.</source>
|
||||
<target>Megoszthatja ezt a hivatkozást ismerőseivel, hogy kapcsolatba léphessenek önnel a **%@** nevű profilján keresztül.</target>
|
||||
<target>Megoszthatja ezt az azonosítót az ismerőseivel, hogy kapcsolatba léphessenek önnel a **%@** nevű profilján keresztül.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can share your address as a link or QR code - anybody can connect to you." xml:space="preserve">
|
||||
<source>You can share your address as a link or QR code - anybody can connect to you.</source>
|
||||
<target>Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki csatlakozhat önhöz.</target>
|
||||
<target>Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki kapcsolódhat önhöz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can start chat via app Settings / Database or by restarting the app" xml:space="preserve">
|
||||
@@ -6481,13 +6484,13 @@ Csatlakozási kérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You have already requested connection via this address!" xml:space="preserve">
|
||||
<source>You have already requested connection via this address!</source>
|
||||
<target>Már kért egy csatlakozást ezen az azonosítón keresztül!</target>
|
||||
<target>Már kért egy kapcsolódási kérelmet ezen az azonosítón keresztül!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You have already requested connection! Repeat connection request?" xml:space="preserve">
|
||||
<source>You have already requested connection!
|
||||
Repeat connection request?</source>
|
||||
<target>Már kérelmezte a csatlakozást!
|
||||
<target>Már kért egy kapcsolódási kérelmet!
|
||||
Kapcsolódási kérés megismétlése?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -6538,22 +6541,22 @@ Kapcsolódási kérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will be connected to group when the group host's device is online, please wait or check later!" xml:space="preserve">
|
||||
<source>You will be connected to group when the group host's device is online, please wait or check later!</source>
|
||||
<target>Akkor tud csatlakozni a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<target>Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will be connected when group link host's device is online, please wait or check later!" xml:space="preserve">
|
||||
<source>You will be connected when group link host's device is online, please wait or check later!</source>
|
||||
<target>Akkor lesz csatlakoztatva, amikor a csoportos hivatkozás tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<target>Akkor lesz kapcsolódva, amikor a csoportos hivatkozás tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve">
|
||||
<source>You will be connected when your connection request is accepted, please wait or check later!</source>
|
||||
<target>Akkor lesz csatlakoztatva, ha a csatlakozási kérelme elfogadásra került, várjon, vagy ellenőrizze később!</target>
|
||||
<target>Akkor lesz kapcsolódva, ha a kapcsolódási kérelme elfogadásra kerül, várjon, vagy ellenőrizze később!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will be connected when your contact's device is online, please wait or check later!" xml:space="preserve">
|
||||
<source>You will be connected when your contact's device is online, please wait or check later!</source>
|
||||
<target>Akkor csatlakozik, amikor az ismerős eszköze online lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<target>Akkor le kapcsolódva, amikor az ismerőse eszköze online lesz, várjon, vagy ellenőrizze később!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will be required to authenticate when you start or resume the app after 30 seconds in background." xml:space="preserve">
|
||||
@@ -6563,7 +6566,7 @@ Kapcsolódási kérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will connect to all group members." xml:space="preserve">
|
||||
<source>You will connect to all group members.</source>
|
||||
<target>Csatlakozni fog a csoport összes tagjához.</target>
|
||||
<target>Kapcsolódni fog a csoport összes tagjához.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
|
||||
@@ -6578,7 +6581,7 @@ Kapcsolódási kérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You won't lose your contacts if you later delete your address." xml:space="preserve">
|
||||
<source>You won't lose your contacts if you later delete your address.</source>
|
||||
<target>Nem veszíti el ismerőseit, ha később törli az azonosítóját.</target>
|
||||
<target>Nem veszíti el az ismerőseit, ha később törli az azonosítóját.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" xml:space="preserve">
|
||||
@@ -6655,7 +6658,7 @@ Megszakíthatja ezt a kapcsolatfelvételt és törölheti az ismerőst (ezt kés
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contacts will remain connected." xml:space="preserve">
|
||||
<source>Your contacts will remain connected.</source>
|
||||
<target>Az ismerősök továbbra is csatlakoztatva maradnak.</target>
|
||||
<target>Az ismerősei továbbra is kapcsolódva maradnak.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your current chat database will be DELETED and REPLACED with the imported one." xml:space="preserve">
|
||||
@@ -6857,7 +6860,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="changed role of %@ to %@" xml:space="preserve">
|
||||
<source>changed role of %1$@ to %2$@</source>
|
||||
<target>%1$@ szerepköre megváltozott erre: %2$@</target>
|
||||
<target>%1$@ szerepkörét megváltoztatta erre: %2$@</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="changed your role to %@" xml:space="preserve">
|
||||
@@ -6887,7 +6890,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="connect to SimpleX Chat developers." xml:space="preserve">
|
||||
<source>connect to SimpleX Chat developers.</source>
|
||||
<target>Csatlakozás a SimpleX Chat fejlesztőkhöz.</target>
|
||||
<target>Kapcsolódás a SimpleX Chat fejlesztőkhöz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connected" xml:space="preserve">
|
||||
@@ -6922,7 +6925,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="connecting (introduction invitation)" xml:space="preserve">
|
||||
<source>connecting (introduction invitation)</source>
|
||||
<target>csatlakozás (bemutatkozás meghívás)</target>
|
||||
<target>kapcsolódás (bemutatkozó meghívó)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connecting call" xml:space="preserve">
|
||||
@@ -6947,7 +6950,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="contact %@ changed to %@" xml:space="preserve">
|
||||
<source>contact %1$@ changed to %2$@</source>
|
||||
<target>%1$@ ismerősének neve megváltozott erre: %2$@</target>
|
||||
<target>%1$@ megváltoztatta a nevét erre: %2$@</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="contact has e2e encryption" xml:space="preserve">
|
||||
@@ -7207,7 +7210,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="join as %@" xml:space="preserve">
|
||||
<source>join as %@</source>
|
||||
<target>csatlakozás mint %@</target>
|
||||
<target>csatlakozás mint: %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="left" xml:space="preserve">
|
||||
@@ -7227,12 +7230,12 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="member %@ changed to %@" xml:space="preserve">
|
||||
<source>member %1$@ changed to %2$@</source>
|
||||
<target>%1$@ tag megváltoztatta a nevét erre: %2$@</target>
|
||||
<target>%1$@ megváltoztatta a nevét erre: %2$@</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="member connected" xml:space="preserve">
|
||||
<source>connected</source>
|
||||
<target>kapcsolódva</target>
|
||||
<target>kapcsolódott</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="message received" xml:space="preserve">
|
||||
@@ -7364,7 +7367,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed contact address" xml:space="preserve">
|
||||
<source>removed contact address</source>
|
||||
<target>törölt csatlakozási cím</target>
|
||||
<target>törölt kapcsolattartási azonosító</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed profile picture" xml:space="preserve">
|
||||
@@ -7404,7 +7407,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="security code changed" xml:space="preserve">
|
||||
<source>security code changed</source>
|
||||
<target>biztonsági kód megváltozott</target>
|
||||
<target>a biztonsági kód megváltozott</target>
|
||||
<note>chat item text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="send direct message" xml:space="preserve">
|
||||
@@ -7414,7 +7417,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="set new contact address" xml:space="preserve">
|
||||
<source>set new contact address</source>
|
||||
<target>új kapcsolattartási cím beállítása</target>
|
||||
<target>új kapcsolattartási azonosító beállítása</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="set new profile picture" xml:space="preserve">
|
||||
@@ -7479,7 +7482,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="via contact address link" xml:space="preserve">
|
||||
<source>via contact address link</source>
|
||||
<target>ismerős azonosítójának hivatkozásán keresztül</target>
|
||||
<target>kapcsolattartási azonosító-hivatkozáson keresztül</target>
|
||||
<note>chat list item description</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="via group link" xml:space="preserve">
|
||||
@@ -7564,7 +7567,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you changed role of %@ to %@" xml:space="preserve">
|
||||
<source>you changed role of %1$@ to %2$@</source>
|
||||
<target>megváltoztatta %1$@ szerepkörét erre: %@</target>
|
||||
<target>%1$@ szerepkörét megváltoztatta erre: %@</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you left" xml:space="preserve">
|
||||
@@ -7616,7 +7619,7 @@ A SimpleX kiszolgálók nem látjhatják profilját.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="NSCameraUsageDescription" xml:space="preserve">
|
||||
<source>SimpleX needs camera access to scan QR codes to connect to other users and for video calls.</source>
|
||||
<target>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.</target>
|
||||
<target>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.</target>
|
||||
<note>Privacy - Camera Usage Description</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="NSFaceIDUsageDescription" xml:space="preserve">
|
||||
|
||||
@@ -2805,6 +2805,7 @@ Non è reversibile!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Inoltra e salva i messaggi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
@@ -3174,6 +3175,7 @@ Non è reversibile!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="In-call sounds" xml:space="preserve">
|
||||
<source>In-call sounds</source>
|
||||
<target>Suoni nelle chiamate</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito" xml:space="preserve">
|
||||
@@ -3653,6 +3655,7 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
<source>Message source remains private.</source>
|
||||
<target>La fonte del messaggio resta privata.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message text" xml:space="preserve">
|
||||
@@ -3772,6 +3775,7 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="More reliable network connection." xml:space="preserve">
|
||||
<source>More reliable network connection.</source>
|
||||
<target>Connessione di rete più affidabile.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Most likely this connection is deleted." xml:space="preserve">
|
||||
@@ -3816,6 +3820,7 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network management" xml:space="preserve">
|
||||
<source>Network management</source>
|
||||
<target>Gestione della rete</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network settings" xml:space="preserve">
|
||||
@@ -4371,6 +4376,7 @@ Errore: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Immagini del profilo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -5195,6 +5201,7 @@ Errore: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Forma delle immagini del profilo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5364,6 +5371,7 @@ Errore: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Quadrata, circolare o qualsiasi forma tra le due.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
@@ -6244,6 +6252,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
</trans-unit>
|
||||
<trans-unit id="When connecting audio and video calls." xml:space="preserve">
|
||||
<source>When connecting audio and video calls.</source>
|
||||
<target>Quando si connettono le chiamate audio e video.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
@@ -6263,6 +6272,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
</trans-unit>
|
||||
<trans-unit id="Will be enabled in direct chats!" xml:space="preserve">
|
||||
<source>Will be enabled in direct chats!</source>
|
||||
<target>Viene attivata nelle chat dirette!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wired ethernet" xml:space="preserve">
|
||||
|
||||
@@ -379,12 +379,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
|
||||
<source>**e2e encrypted** audio call</source>
|
||||
<target>**e2e 暗号化**音声通話</target>
|
||||
<target>**エンドツーエンド暗号化済み**の音声通話</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**e2e encrypted** video call" xml:space="preserve">
|
||||
<source>**e2e encrypted** video call</source>
|
||||
<target>**e2e暗号化**ビデオ通話</target>
|
||||
<target>**エンドツーエンド暗号化済み**の テレビ電話 通話</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="*bold*" xml:space="preserve">
|
||||
@@ -434,6 +434,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="0 sec" xml:space="preserve">
|
||||
<source>0 sec</source>
|
||||
<target>0 秒</target>
|
||||
<note>time to disappear</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0s" xml:space="preserve">
|
||||
@@ -684,6 +685,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." xml:space="preserve">
|
||||
<source>All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays.</source>
|
||||
<target>すべての連絡先、会話、ファイルは安全に暗号化され、設定されたXFTPリレーに分割でアップロードされます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow" xml:space="preserve">
|
||||
@@ -733,6 +735,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow to send SimpleX links." xml:space="preserve">
|
||||
<source>Allow to send SimpleX links.</source>
|
||||
<target>SimpleXリンクの送信を許可。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow to send files and media." xml:space="preserve">
|
||||
@@ -787,10 +790,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Already connecting!" xml:space="preserve">
|
||||
<source>Already connecting!</source>
|
||||
<target>既に接続中です!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Already joining the group!" xml:space="preserve">
|
||||
<source>Already joining the group!</source>
|
||||
<target>すでにグループに参加しています!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Always use relay" xml:space="preserve">
|
||||
@@ -815,6 +820,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="App data migration" xml:space="preserve">
|
||||
<source>App data migration</source>
|
||||
<target>アプリデータの移行</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App encrypts new local files (except videos)." xml:space="preserve">
|
||||
|
||||
@@ -4376,6 +4376,7 @@ Fout: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Profiel afbeeldingen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -5200,6 +5201,7 @@ Fout: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Vorm profiel afbeeldingen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5369,6 +5371,7 @@ Fout: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Vierkant, cirkel of iets daartussenin.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
|
||||
@@ -745,6 +745,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow to send SimpleX links." xml:space="preserve">
|
||||
<source>Allow to send SimpleX links.</source>
|
||||
<target>Zezwól na wysyłanie linków SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow to send files and media." xml:space="preserve">
|
||||
@@ -1089,6 +1090,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Cellular" xml:space="preserve">
|
||||
<source>Cellular</source>
|
||||
<target>Sieć komórkowa</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change" xml:space="preserve">
|
||||
@@ -2088,6 +2090,7 @@ To nie może być cofnięte!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Pobierz</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download failed" xml:space="preserve">
|
||||
@@ -2202,6 +2205,7 @@ To nie może być cofnięte!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enabled for" xml:space="preserve">
|
||||
<source>Enabled for</source>
|
||||
<target>Włączony dla</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt" xml:space="preserve">
|
||||
@@ -2726,6 +2730,7 @@ To nie może być cofnięte!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Files and media not allowed" xml:space="preserve">
|
||||
<source>Files and media not allowed</source>
|
||||
<target>Pliki i multimedia nie są dozwolone</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Files and media prohibited!" xml:space="preserve">
|
||||
@@ -2795,18 +2800,22 @@ To nie może być cofnięte!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward" xml:space="preserve">
|
||||
<source>Forward</source>
|
||||
<target>Przekaż dalej</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Przesyłaj dalej i zapisuj wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Przekazane dalej</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded from" xml:space="preserve">
|
||||
<source>Forwarded from</source>
|
||||
<target>Przekazane dalej od</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Found desktop" xml:space="preserve">
|
||||
@@ -2921,6 +2930,7 @@ To nie może być cofnięte!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group members can send SimpleX links." xml:space="preserve">
|
||||
<source>Group members can send SimpleX links.</source>
|
||||
<target>Członkowie grupy mogą wysyłać linki SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group members can send direct messages." xml:space="preserve">
|
||||
@@ -3165,6 +3175,7 @@ To nie może być cofnięte!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="In-call sounds" xml:space="preserve">
|
||||
<source>In-call sounds</source>
|
||||
<target>Dźwięki w rozmowie</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito" xml:space="preserve">
|
||||
@@ -3644,6 +3655,7 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
<source>Message source remains private.</source>
|
||||
<target>Źródło wiadomości pozostaje prywatne.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message text" xml:space="preserve">
|
||||
@@ -3763,6 +3775,7 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="More reliable network connection." xml:space="preserve">
|
||||
<source>More reliable network connection.</source>
|
||||
<target>Bardziej niezawodne połączenia sieciowe.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Most likely this connection is deleted." xml:space="preserve">
|
||||
@@ -3802,10 +3815,12 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network connection" xml:space="preserve">
|
||||
<source>Network connection</source>
|
||||
<target>Połączenie z siecią</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network management" xml:space="preserve">
|
||||
<source>Network management</source>
|
||||
<target>Zarządzenie sieciowe</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Network settings" xml:space="preserve">
|
||||
@@ -3920,6 +3935,7 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="No network connection" xml:space="preserve">
|
||||
<source>No network connection</source>
|
||||
<target>Brak połączenia z siecią</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
@@ -4138,6 +4154,7 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other" xml:space="preserve">
|
||||
<source>Other</source>
|
||||
<target>Inne</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
@@ -4359,6 +4376,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Zdjęcia profilowe</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -4403,6 +4421,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit sending SimpleX links." xml:space="preserve">
|
||||
<source>Prohibit sending SimpleX links.</source>
|
||||
<target>Zabroń wysyłania linków SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit sending direct messages to members." xml:space="preserve">
|
||||
@@ -4537,6 +4556,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving concurrency" xml:space="preserve">
|
||||
<source>Receiving concurrency</source>
|
||||
<target>Konkurencyjne odbieranie</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
@@ -4556,6 +4576,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Recipient(s) can't see who this message is from." xml:space="preserve">
|
||||
<source>Recipient(s) can't see who this message is from.</source>
|
||||
<target>Odbiorca/y nie mogą zobaczyć od kogo jest ta wiadomość.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Recipients see updates as you type them." xml:space="preserve">
|
||||
@@ -4860,6 +4881,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Zapisane</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
|
||||
@@ -4869,6 +4891,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved from" xml:space="preserve">
|
||||
<source>Saved from</source>
|
||||
<target>Zapisane od</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved message" xml:space="preserve">
|
||||
@@ -5178,6 +5201,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Kształtuj obrazy profilowe</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5302,10 +5326,12 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX links are prohibited in this group." xml:space="preserve">
|
||||
<source>SimpleX links are prohibited in this group.</source>
|
||||
<target>Linki SimpleX są zablokowane na tej grupie.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX links not allowed" xml:space="preserve">
|
||||
<source>SimpleX links not allowed</source>
|
||||
<target>Linki SimpleX są niedozwolone</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX one-time invitation" xml:space="preserve">
|
||||
@@ -5345,6 +5371,7 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Kwadrat, okrąg lub cokolwiek pomiędzy.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
@@ -6150,6 +6177,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
</trans-unit>
|
||||
<trans-unit id="Voice messages not allowed" xml:space="preserve">
|
||||
<source>Voice messages not allowed</source>
|
||||
<target>Wiadomości głosowe są niedozwolone</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Voice messages prohibited!" xml:space="preserve">
|
||||
@@ -6224,6 +6252,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
</trans-unit>
|
||||
<trans-unit id="When connecting audio and video calls." xml:space="preserve">
|
||||
<source>When connecting audio and video calls.</source>
|
||||
<target>Podczas łączenia połączeń audio i wideo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
@@ -6238,14 +6267,17 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
</trans-unit>
|
||||
<trans-unit id="WiFi" xml:space="preserve">
|
||||
<source>WiFi</source>
|
||||
<target>WiFi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Will be enabled in direct chats!" xml:space="preserve">
|
||||
<source>Will be enabled in direct chats!</source>
|
||||
<target>Zostanie włączone w czatach bezpośrednich!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wired ethernet" xml:space="preserve">
|
||||
<source>Wired ethernet</source>
|
||||
<target>Połączenie ethernet (po kablu)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="With encrypted files and media." xml:space="preserve">
|
||||
@@ -6733,6 +6765,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="admins" xml:space="preserve">
|
||||
<source>admins</source>
|
||||
<target>administratorzy</target>
|
||||
<note>feature role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="agreeing encryption for %@…" xml:space="preserve">
|
||||
@@ -6747,6 +6780,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="all members" xml:space="preserve">
|
||||
<source>all members</source>
|
||||
<target>wszyscy członkowie</target>
|
||||
<note>feature role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="always" xml:space="preserve">
|
||||
@@ -7081,6 +7115,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded" xml:space="preserve">
|
||||
<source>forwarded</source>
|
||||
<target>przekazane dalej</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="group deleted" xml:space="preserve">
|
||||
@@ -7292,6 +7327,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="owners" xml:space="preserve">
|
||||
<source>owners</source>
|
||||
<target>właściciele</target>
|
||||
<note>feature role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="peer-to-peer" xml:space="preserve">
|
||||
@@ -7346,10 +7382,12 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
<source>saved</source>
|
||||
<target>zapisane</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved from %@" xml:space="preserve">
|
||||
<source>saved from %@</source>
|
||||
<target>zapisane od %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="sec" xml:space="preserve">
|
||||
@@ -7494,6 +7532,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you" xml:space="preserve">
|
||||
<source>you</source>
|
||||
<target>Ty</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you are invited to group" xml:space="preserve">
|
||||
|
||||
@@ -4376,6 +4376,7 @@ Hata: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile images" xml:space="preserve">
|
||||
<source>Profile images</source>
|
||||
<target>Profil resimleri</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
@@ -4525,7 +4526,7 @@ Hata: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receipts are disabled" xml:space="preserve">
|
||||
<source>Receipts are disabled</source>
|
||||
<target>Makbuzlar devre dışı bırakıldı</target>
|
||||
<target>Gönderildi bilgisi devre dışı bırakıldı</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at" xml:space="preserve">
|
||||
@@ -5065,7 +5066,7 @@ Hata: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending delivery receipts will be enabled for all contacts." xml:space="preserve">
|
||||
<source>Sending delivery receipts will be enabled for all contacts.</source>
|
||||
<target>Teslimat makbuzlarının gönderilmesi tüm kişiler için etkinleştirilecektir.</target>
|
||||
<target>Gönderildi bilgisi tüm kişiler için etkinleştirilecektir.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sending file will be stopped." xml:space="preserve">
|
||||
@@ -5200,6 +5201,7 @@ Hata: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Profil resimlerini şekillendir</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share" xml:space="preserve">
|
||||
@@ -5369,6 +5371,7 @@ Hata: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Square, circle, or anything in between." xml:space="preserve">
|
||||
<source>Square, circle, or anything in between.</source>
|
||||
<target>Kare,daire, veya aralarında herhangi bir şey.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Start chat" xml:space="preserve">
|
||||
|
||||
@@ -68,11 +68,6 @@
|
||||
5C9329412929248A0090FFF9 /* ScanProtocolServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9329402929248A0090FFF9 /* ScanProtocolServer.swift */; };
|
||||
5C971E1D27AEBEF600C8A3CE /* ChatInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C971E1C27AEBEF600C8A3CE /* ChatInfoView.swift */; };
|
||||
5C971E2127AEBF8300C8A3CE /* ChatInfoImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C971E2027AEBF8300C8A3CE /* ChatInfoImage.swift */; };
|
||||
5C9731F72BDC0C4F000538F2 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F22BDC0C4F000538F2 /* libffi.a */; };
|
||||
5C9731F82BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F32BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a */; };
|
||||
5C9731F92BDC0C4F000538F2 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F42BDC0C4F000538F2 /* libgmpxx.a */; };
|
||||
5C9731FA2BDC0C4F000538F2 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F52BDC0C4F000538F2 /* libgmp.a */; };
|
||||
5C9731FB2BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9731F62BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a */; };
|
||||
5C9A5BDB2871E05400A5B906 /* SetNotificationsMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9A5BDA2871E05400A5B906 /* SetNotificationsMode.swift */; };
|
||||
5C9C2DA52894777E00CC63B1 /* GroupProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9C2DA42894777E00CC63B1 /* GroupProfileView.swift */; };
|
||||
5C9C2DA7289957AE00CC63B1 /* AdvancedNetworkSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9C2DA6289957AE00CC63B1 /* AdvancedNetworkSettings.swift */; };
|
||||
@@ -81,6 +76,11 @@
|
||||
5C9CC7AD28C55D7800BEF955 /* DatabaseEncryptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9CC7AC28C55D7800BEF955 /* DatabaseEncryptionView.swift */; };
|
||||
5C9D13A3282187BB00AB8B43 /* WebRTC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9D13A2282187BB00AB8B43 /* WebRTC.swift */; };
|
||||
5C9D811A2AA8727A001D49FD /* CryptoFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9D81182AA7A4F1001D49FD /* CryptoFile.swift */; };
|
||||
5C9F3DCC2BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9F3DC72BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g.a */; };
|
||||
5C9F3DCD2BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9F3DC82BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g-ghc9.6.3.a */; };
|
||||
5C9F3DCE2BF7A6900003B86B /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9F3DC92BF7A6900003B86B /* libgmp.a */; };
|
||||
5C9F3DCF2BF7A6900003B86B /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9F3DCA2BF7A6900003B86B /* libgmpxx.a */; };
|
||||
5C9F3DD02BF7A6900003B86B /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C9F3DCB2BF7A6900003B86B /* libffi.a */; };
|
||||
5C9FD96E27A5D6ED0075386C /* SendMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9FD96D27A5D6ED0075386C /* SendMessageView.swift */; };
|
||||
5CA059DC279559F40002BEB4 /* Tests_iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA059DB279559F40002BEB4 /* Tests_iOS.swift */; };
|
||||
5CA059DE279559F40002BEB4 /* Tests_iOSLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA059DD279559F40002BEB4 /* Tests_iOSLaunchTests.swift */; };
|
||||
@@ -346,11 +346,6 @@
|
||||
5C9329402929248A0090FFF9 /* ScanProtocolServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanProtocolServer.swift; sourceTree = "<group>"; };
|
||||
5C971E1C27AEBEF600C8A3CE /* ChatInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatInfoView.swift; sourceTree = "<group>"; };
|
||||
5C971E2027AEBF8300C8A3CE /* ChatInfoImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatInfoImage.swift; sourceTree = "<group>"; };
|
||||
5C9731F22BDC0C4F000538F2 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
5C9731F32BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a"; sourceTree = "<group>"; };
|
||||
5C9731F42BDC0C4F000538F2 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
5C9731F52BDC0C4F000538F2 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
5C9731F62BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a"; sourceTree = "<group>"; };
|
||||
5C9A5BDA2871E05400A5B906 /* SetNotificationsMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetNotificationsMode.swift; sourceTree = "<group>"; };
|
||||
5C9C2DA42894777E00CC63B1 /* GroupProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupProfileView.swift; sourceTree = "<group>"; };
|
||||
5C9C2DA6289957AE00CC63B1 /* AdvancedNetworkSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedNetworkSettings.swift; sourceTree = "<group>"; };
|
||||
@@ -359,6 +354,11 @@
|
||||
5C9CC7AC28C55D7800BEF955 /* DatabaseEncryptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseEncryptionView.swift; sourceTree = "<group>"; };
|
||||
5C9D13A2282187BB00AB8B43 /* WebRTC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebRTC.swift; sourceTree = "<group>"; };
|
||||
5C9D81182AA7A4F1001D49FD /* CryptoFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CryptoFile.swift; sourceTree = "<group>"; };
|
||||
5C9F3DC72BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g.a"; sourceTree = "<group>"; };
|
||||
5C9F3DC82BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g-ghc9.6.3.a"; sourceTree = "<group>"; };
|
||||
5C9F3DC92BF7A6900003B86B /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
5C9F3DCA2BF7A6900003B86B /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
5C9F3DCB2BF7A6900003B86B /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
5C9FD96A27A56D4D0075386C /* JSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSON.swift; sourceTree = "<group>"; };
|
||||
5C9FD96D27A5D6ED0075386C /* SendMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendMessageView.swift; sourceTree = "<group>"; };
|
||||
5CA059C3279559F40002BEB4 /* SimpleXApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleXApp.swift; sourceTree = "<group>"; };
|
||||
@@ -529,13 +529,13 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5C9F3DCF2BF7A6900003B86B /* libgmpxx.a in Frameworks */,
|
||||
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
|
||||
5C9731F92BDC0C4F000538F2 /* libgmpxx.a in Frameworks */,
|
||||
5C9731F82BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a in Frameworks */,
|
||||
5C9731F72BDC0C4F000538F2 /* libffi.a in Frameworks */,
|
||||
5C9731FA2BDC0C4F000538F2 /* libgmp.a in Frameworks */,
|
||||
5C9F3DCE2BF7A6900003B86B /* libgmp.a in Frameworks */,
|
||||
5C9F3DCC2BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g.a in Frameworks */,
|
||||
5C9F3DD02BF7A6900003B86B /* libffi.a in Frameworks */,
|
||||
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
|
||||
5C9731FB2BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a in Frameworks */,
|
||||
5C9F3DCD2BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g-ghc9.6.3.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -601,11 +601,11 @@
|
||||
5C764E5C279C70B7000C6508 /* Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5C9731F22BDC0C4F000538F2 /* libffi.a */,
|
||||
5C9731F52BDC0C4F000538F2 /* libgmp.a */,
|
||||
5C9731F42BDC0C4F000538F2 /* libgmpxx.a */,
|
||||
5C9731F62BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB-ghc9.6.3.a */,
|
||||
5C9731F32BDC0C4F000538F2 /* libHSsimplex-chat-5.7.0.5-KRbIOKUzDlJ3qPYhEOgsVB.a */,
|
||||
5C9F3DCB2BF7A6900003B86B /* libffi.a */,
|
||||
5C9F3DC92BF7A6900003B86B /* libgmp.a */,
|
||||
5C9F3DCA2BF7A6900003B86B /* libgmpxx.a */,
|
||||
5C9F3DC82BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g-ghc9.6.3.a */,
|
||||
5C9F3DC72BF7A6900003B86B /* libHSsimplex-chat-5.8.0.1-BrjXjAnJqNV7yWXU89n05g.a */,
|
||||
);
|
||||
path = Libraries;
|
||||
sourceTree = "<group>";
|
||||
@@ -1552,7 +1552,7 @@
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 212;
|
||||
CURRENT_PROJECT_VERSION = 217;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -1577,7 +1577,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES_THIN;
|
||||
MARKETING_VERSION = 5.7;
|
||||
MARKETING_VERSION = 5.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
|
||||
PRODUCT_NAME = SimpleX;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1601,7 +1601,7 @@
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 212;
|
||||
CURRENT_PROJECT_VERSION = 217;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -1626,7 +1626,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 5.7;
|
||||
MARKETING_VERSION = 5.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
|
||||
PRODUCT_NAME = SimpleX;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1687,7 +1687,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 212;
|
||||
CURRENT_PROJECT_VERSION = 217;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = s;
|
||||
@@ -1702,7 +1702,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 5.7;
|
||||
MARKETING_VERSION = 5.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@@ -1724,7 +1724,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 212;
|
||||
CURRENT_PROJECT_VERSION = 217;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
ENABLE_CODE_COVERAGE = NO;
|
||||
@@ -1739,7 +1739,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 5.7;
|
||||
MARKETING_VERSION = 5.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@@ -1761,7 +1761,7 @@
|
||||
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 212;
|
||||
CURRENT_PROJECT_VERSION = 217;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
@@ -1787,7 +1787,7 @@
|
||||
"$(PROJECT_DIR)/Libraries/sim",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 5.7;
|
||||
MARKETING_VERSION = 5.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1812,7 +1812,7 @@
|
||||
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 212;
|
||||
CURRENT_PROJECT_VERSION = 217;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
@@ -1838,7 +1838,7 @@
|
||||
"$(PROJECT_DIR)/Libraries/sim",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 5.7;
|
||||
MARKETING_VERSION = 5.8;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
|
||||
@@ -48,7 +48,7 @@ public enum ChatCommand {
|
||||
case apiDeleteChatItem(type: ChatType, id: Int64, itemId: Int64, mode: CIDeleteMode)
|
||||
case apiDeleteMemberChatItem(groupId: Int64, groupMemberId: Int64, itemId: Int64)
|
||||
case apiChatItemReaction(type: ChatType, id: Int64, itemId: Int64, add: Bool, reaction: MsgReaction)
|
||||
case apiForwardChatItem(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemId: Int64)
|
||||
case apiForwardChatItem(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemId: Int64, ttl: Int?)
|
||||
case apiGetNtfToken
|
||||
case apiRegisterToken(token: DeviceToken, notificationMode: NotificationsMode)
|
||||
case apiVerifyToken(token: DeviceToken, nonce: String, code: String)
|
||||
@@ -192,7 +192,9 @@ public enum ChatCommand {
|
||||
case let .apiDeleteChatItem(type, id, itemId, mode): return "/_delete item \(ref(type, id)) \(itemId) \(mode.rawValue)"
|
||||
case let .apiDeleteMemberChatItem(groupId, groupMemberId, itemId): return "/_delete member item #\(groupId) \(groupMemberId) \(itemId)"
|
||||
case let .apiChatItemReaction(type, id, itemId, add, reaction): return "/_reaction \(ref(type, id)) \(itemId) \(onOff(add)) \(encodeJSON(reaction))"
|
||||
case let .apiForwardChatItem(toChatType, toChatId, fromChatType, fromChatId, itemId): return "/_forward \(ref(toChatType, toChatId)) \(ref(fromChatType, fromChatId)) \(itemId)"
|
||||
case let .apiForwardChatItem(toChatType, toChatId, fromChatType, fromChatId, itemId, ttl):
|
||||
let ttlStr = ttl != nil ? "\(ttl!)" : "default"
|
||||
return "/_forward \(ref(toChatType, toChatId)) \(ref(fromChatType, fromChatId)) \(itemId) ttl=\(ttlStr)"
|
||||
case .apiGetNtfToken: return "/_ntf get "
|
||||
case let .apiRegisterToken(token, notificationMode): return "/_ntf register \(token.cmdString) \(notificationMode.rawValue)"
|
||||
case let .apiVerifyToken(token, nonce, code): return "/_ntf verify \(token.cmdString) \(nonce) \(code)"
|
||||
@@ -639,6 +641,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case ntfMessages(user_: User?, connEntity_: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo])
|
||||
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgInfo)
|
||||
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
|
||||
case contactDisabled(user: UserRef, contact: Contact)
|
||||
// remote desktop responses/events
|
||||
case remoteCtrlList(remoteCtrls: [RemoteCtrlInfo])
|
||||
case remoteCtrlFound(remoteCtrl: RemoteCtrlInfo, ctrlAppInfo_: CtrlAppInfo?, appVersion: String, compatible: Bool)
|
||||
@@ -796,6 +799,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case .ntfMessages: return "ntfMessages"
|
||||
case .ntfMessage: return "ntfMessage"
|
||||
case .contactConnectionDeleted: return "contactConnectionDeleted"
|
||||
case .contactDisabled: return "contactDisabled"
|
||||
case .remoteCtrlList: return "remoteCtrlList"
|
||||
case .remoteCtrlFound: return "remoteCtrlFound"
|
||||
case .remoteCtrlConnecting: return "remoteCtrlConnecting"
|
||||
@@ -953,6 +957,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))")
|
||||
case let .ntfMessage(u, connEntity, ntfMessage): return withUser(u, "connEntity: \(String(describing: connEntity))\nntfMessage: \(String(describing: ntfMessage))")
|
||||
case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection))
|
||||
case let .contactDisabled(u, contact): return withUser(u, String(describing: contact))
|
||||
case let .remoteCtrlList(remoteCtrls): return String(describing: remoteCtrls)
|
||||
case let .remoteCtrlFound(remoteCtrl, ctrlAppInfo_, appVersion, compatible): return "remoteCtrl:\n\(String(describing: remoteCtrl))\nctrlAppInfo_:\n\(String(describing: ctrlAppInfo_))\nappVersion: \(appVersion)\ncompatible: \(compatible)"
|
||||
case let .remoteCtrlConnecting(remoteCtrl_, ctrlAppInfo, appVersion): return "remoteCtrl_:\n\(String(describing: remoteCtrl_))\nctrlAppInfo:\n\(String(describing: ctrlAppInfo))\nappVersion: \(appVersion)"
|
||||
@@ -1242,9 +1247,12 @@ public struct ServerAddress: Decodable {
|
||||
|
||||
public struct NetCfg: Codable, Equatable {
|
||||
public var socksProxy: String? = nil
|
||||
var socksMode: SocksMode = .always
|
||||
public var hostMode: HostMode = .publicHost
|
||||
public var requiredHostMode = true
|
||||
public var sessionMode: TransportSessionMode
|
||||
public var smpProxyMode: SMPProxyMode = .never
|
||||
public var smpProxyFallback: SMPProxyFallback = .allow
|
||||
public var tcpConnectTimeout: Int // microseconds
|
||||
public var tcpTimeout: Int // microseconds
|
||||
public var tcpTimeoutPerKb: Int // microseconds
|
||||
@@ -1289,6 +1297,49 @@ public enum HostMode: String, Codable {
|
||||
case publicHost = "public"
|
||||
}
|
||||
|
||||
public enum SocksMode: String, Codable {
|
||||
case always = "always"
|
||||
case onion = "onion"
|
||||
}
|
||||
|
||||
public enum SMPProxyMode: String, Codable {
|
||||
case always = "always"
|
||||
case unknown = "unknown"
|
||||
case unprotected = "unprotected"
|
||||
case never = "never"
|
||||
|
||||
public var text: LocalizedStringKey {
|
||||
switch self {
|
||||
case .always: return "always"
|
||||
case .unknown: return "unknown relays"
|
||||
case .unprotected: return "unprotected"
|
||||
case .never: return "never"
|
||||
}
|
||||
}
|
||||
|
||||
public var id: SMPProxyMode { self }
|
||||
|
||||
public static let values: [SMPProxyMode] = [.always, .unknown, .unprotected, .never]
|
||||
}
|
||||
|
||||
public enum SMPProxyFallback: String, Codable {
|
||||
case allow = "allow"
|
||||
case allowProtected = "allowProtected"
|
||||
case prohibit = "prohibit"
|
||||
|
||||
public var text: LocalizedStringKey {
|
||||
switch self {
|
||||
case .allow: return "yes"
|
||||
case .allowProtected: return "when IP hidden"
|
||||
case .prohibit: return "no"
|
||||
}
|
||||
}
|
||||
|
||||
public var id: SMPProxyFallback { self }
|
||||
|
||||
public static let values: [SMPProxyFallback] = [.allow, .allowProtected, .prohibit]
|
||||
}
|
||||
|
||||
public enum OnionHosts: String, Identifiable {
|
||||
case no
|
||||
case prefer
|
||||
|
||||
@@ -26,6 +26,8 @@ public let GROUP_DEFAULT_PRIVACY_ENCRYPT_LOCAL_FILES = "privacyEncryptLocalFiles
|
||||
let GROUP_DEFAULT_NTF_BADGE_COUNT = "ntgBadgeCount"
|
||||
let GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS = "networkUseOnionHosts"
|
||||
let GROUP_DEFAULT_NETWORK_SESSION_MODE = "networkSessionMode"
|
||||
let GROUP_DEFAULT_NETWORK_SMP_PROXY_MODE = "networkSMPProxyMode"
|
||||
let GROUP_DEFAULT_NETWORK_SMP_PROXY_FALLBACK = "networkSMPProxyFallback"
|
||||
let GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT = "networkTCPConnectTimeout"
|
||||
let GROUP_DEFAULT_NETWORK_TCP_TIMEOUT = "networkTCPTimeout"
|
||||
let GROUP_DEFAULT_NETWORK_TCP_TIMEOUT_PER_KB = "networkTCPTimeoutPerKb"
|
||||
@@ -53,6 +55,8 @@ public func registerGroupDefaults() {
|
||||
GROUP_DEFAULT_NTF_ENABLE_PERIODIC: false,
|
||||
GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS: OnionHosts.no.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SESSION_MODE: TransportSessionMode.user.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SMP_PROXY_MODE: SMPProxyMode.never.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SMP_PROXY_FALLBACK: SMPProxyFallback.allow.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT: NetCfg.defaults.tcpConnectTimeout,
|
||||
GROUP_DEFAULT_NETWORK_TCP_TIMEOUT: NetCfg.defaults.tcpTimeout,
|
||||
GROUP_DEFAULT_NETWORK_TCP_TIMEOUT_PER_KB: NetCfg.defaults.tcpTimeoutPerKb,
|
||||
@@ -191,6 +195,18 @@ public let networkSessionModeGroupDefault = EnumDefault<TransportSessionMode>(
|
||||
withDefault: .user
|
||||
)
|
||||
|
||||
public let networkSMPProxyModeGroupDefault = EnumDefault<SMPProxyMode>(
|
||||
defaults: groupDefaults,
|
||||
forKey: GROUP_DEFAULT_NETWORK_SMP_PROXY_MODE,
|
||||
withDefault: .never
|
||||
)
|
||||
|
||||
public let networkSMPProxyFallbackGroupDefault = EnumDefault<SMPProxyFallback>(
|
||||
defaults: groupDefaults,
|
||||
forKey: GROUP_DEFAULT_NETWORK_SMP_PROXY_FALLBACK,
|
||||
withDefault: .allow
|
||||
)
|
||||
|
||||
public let storeDBPassphraseGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_STORE_DB_PASSPHRASE)
|
||||
|
||||
public let initialRandomDBPassphraseGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE)
|
||||
@@ -275,6 +291,8 @@ public func getNetCfg() -> NetCfg {
|
||||
let onionHosts = networkUseOnionHostsGroupDefault.get()
|
||||
let (hostMode, requiredHostMode) = onionHosts.hostMode
|
||||
let sessionMode = networkSessionModeGroupDefault.get()
|
||||
let smpProxyMode = networkSMPProxyModeGroupDefault.get()
|
||||
let smpProxyFallback = networkSMPProxyFallbackGroupDefault.get()
|
||||
let tcpConnectTimeout = groupDefaults.integer(forKey: GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT)
|
||||
let tcpTimeout = groupDefaults.integer(forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT)
|
||||
let tcpTimeoutPerKb = groupDefaults.integer(forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT_PER_KB)
|
||||
@@ -295,6 +313,8 @@ public func getNetCfg() -> NetCfg {
|
||||
hostMode: hostMode,
|
||||
requiredHostMode: requiredHostMode,
|
||||
sessionMode: sessionMode,
|
||||
smpProxyMode: smpProxyMode,
|
||||
smpProxyFallback: smpProxyFallback,
|
||||
tcpConnectTimeout: tcpConnectTimeout,
|
||||
tcpTimeout: tcpTimeout,
|
||||
tcpTimeoutPerKb: tcpTimeoutPerKb,
|
||||
@@ -309,6 +329,8 @@ public func getNetCfg() -> NetCfg {
|
||||
public func setNetCfg(_ cfg: NetCfg) {
|
||||
networkUseOnionHostsGroupDefault.set(OnionHosts(netCfg: cfg))
|
||||
networkSessionModeGroupDefault.set(cfg.sessionMode)
|
||||
networkSMPProxyModeGroupDefault.set(cfg.smpProxyMode)
|
||||
networkSMPProxyFallbackGroupDefault.set(cfg.smpProxyFallback)
|
||||
groupDefaults.set(cfg.tcpConnectTimeout, forKey: GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT)
|
||||
groupDefaults.set(cfg.tcpTimeout, forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT)
|
||||
groupDefaults.set(cfg.tcpTimeoutPerKb, forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT_PER_KB)
|
||||
|
||||
@@ -1510,7 +1510,12 @@ public struct Contact: Identifiable, Decodable, NamedChat {
|
||||
public var ready: Bool { get { activeConn?.connStatus == .ready } }
|
||||
public var active: Bool { get { contactStatus == .active } }
|
||||
public var sendMsgEnabled: Bool { get {
|
||||
(ready && active && !(activeConn?.connectionStats?.ratchetSyncSendProhibited ?? false))
|
||||
(
|
||||
ready
|
||||
&& active
|
||||
&& !(activeConn?.connectionStats?.ratchetSyncSendProhibited ?? false)
|
||||
&& !(activeConn?.connDisabled ?? true)
|
||||
)
|
||||
|| nextSendGrpInv
|
||||
} }
|
||||
public var nextSendGrpInv: Bool { get { contactGroupMemberId != nil && !contactGrpInvSent } }
|
||||
@@ -1601,15 +1606,20 @@ public struct Connection: Decodable {
|
||||
public var pqEncryption: Bool
|
||||
public var pqSndEnabled: Bool?
|
||||
public var pqRcvEnabled: Bool?
|
||||
public var authErrCounter: Int
|
||||
|
||||
public var connectionStats: ConnectionStats? = nil
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case connId, agentConnId, peerChatVRange, connStatus, connLevel, viaGroupLink, customUserProfileId, connectionCode, pqSupport, pqEncryption, pqSndEnabled, pqRcvEnabled
|
||||
case connId, agentConnId, peerChatVRange, connStatus, connLevel, viaGroupLink, customUserProfileId, connectionCode, pqSupport, pqEncryption, pqSndEnabled, pqRcvEnabled, authErrCounter
|
||||
}
|
||||
|
||||
public var id: ChatId { get { ":\(connId)" } }
|
||||
|
||||
public var connDisabled: Bool {
|
||||
authErrCounter >= 10 // authErrDisableCount in core
|
||||
}
|
||||
|
||||
public var connPQEnabled: Bool {
|
||||
pqSndEnabled == true && pqRcvEnabled == true
|
||||
}
|
||||
@@ -1622,7 +1632,8 @@ public struct Connection: Decodable {
|
||||
connLevel: 0,
|
||||
viaGroupLink: false,
|
||||
pqSupport: false,
|
||||
pqEncryption: false
|
||||
pqEncryption: false,
|
||||
authErrCounter: 0
|
||||
)
|
||||
}
|
||||
|
||||
@@ -2621,6 +2632,7 @@ public struct CIMeta: Decodable {
|
||||
public var itemTs: Date
|
||||
var itemText: String
|
||||
public var itemStatus: CIStatus
|
||||
public var sentViaProxy: Bool?
|
||||
public var createdAt: Date
|
||||
public var updatedAt: Date
|
||||
public var itemForwarded: CIForwardedFrom?
|
||||
@@ -2710,7 +2722,8 @@ public enum CIStatus: Decodable {
|
||||
case sndSent(sndProgress: SndCIStatusProgress)
|
||||
case sndRcvd(msgRcptStatus: MsgReceiptStatus, sndProgress: SndCIStatusProgress)
|
||||
case sndErrorAuth
|
||||
case sndError(agentError: String)
|
||||
case sndError(agentError: SndError)
|
||||
case sndWarning(agentError: SndError)
|
||||
case rcvNew
|
||||
case rcvRead
|
||||
case invalid(text: String)
|
||||
@@ -2722,6 +2735,7 @@ public enum CIStatus: Decodable {
|
||||
case .sndRcvd: return "sndRcvd"
|
||||
case .sndErrorAuth: return "sndErrorAuth"
|
||||
case .sndError: return "sndError"
|
||||
case .sndWarning: return "sndWarning"
|
||||
case .rcvNew: return "rcvNew"
|
||||
case .rcvRead: return "rcvRead"
|
||||
case .invalid: return "invalid"
|
||||
@@ -2738,7 +2752,8 @@ public enum CIStatus: Decodable {
|
||||
case .badMsgHash: return ("checkmark", .red)
|
||||
}
|
||||
case .sndErrorAuth: return ("multiply", .red)
|
||||
case .sndError: return ("exclamationmark.triangle.fill", .yellow)
|
||||
case .sndError: return ("multiply", .red)
|
||||
case .sndWarning: return ("exclamationmark.triangle.fill", .orange)
|
||||
case .rcvNew: return ("circlebadge.fill", Color.accentColor)
|
||||
case .rcvRead: return nil
|
||||
case .invalid: return ("questionmark", metaColor)
|
||||
@@ -2756,7 +2771,11 @@ public enum CIStatus: Decodable {
|
||||
)
|
||||
case let .sndError(agentError): return (
|
||||
NSLocalizedString("Message delivery error", comment: "item status text"),
|
||||
String.localizedStringWithFormat(NSLocalizedString("Unexpected error: %@", comment: "item status description"), agentError)
|
||||
agentError.errorInfo
|
||||
)
|
||||
case let .sndWarning(agentError): return (
|
||||
NSLocalizedString("Message delivery warning", comment: "item status text"),
|
||||
agentError.errorInfo
|
||||
)
|
||||
case .rcvNew: return nil
|
||||
case .rcvRead: return nil
|
||||
@@ -2768,6 +2787,42 @@ public enum CIStatus: Decodable {
|
||||
}
|
||||
}
|
||||
|
||||
public enum SndError: Decodable {
|
||||
case auth
|
||||
case quota
|
||||
case expired
|
||||
case relay(srvError: SrvError)
|
||||
case proxy(proxyServer: String, srvError: SrvError)
|
||||
case proxyRelay(proxyServer: String, srvError: SrvError)
|
||||
case other(sndError: String)
|
||||
|
||||
public var errorInfo: String {
|
||||
switch self {
|
||||
case .auth: NSLocalizedString("Wrong key or unknown connection - most likely this connection is deleted.", comment: "snd error text")
|
||||
case .quota: NSLocalizedString("Capacity exceeded - recipient did not receive previously sent messages.", comment: "snd error text")
|
||||
case .expired: NSLocalizedString("Network issues - message expired after many attempts to send it.", comment: "snd error text")
|
||||
case let .relay(srvError): String.localizedStringWithFormat(NSLocalizedString("Destination server error: %@", comment: "snd error text"), srvError.errorInfo)
|
||||
case let .proxy(proxyServer, srvError): String.localizedStringWithFormat(NSLocalizedString("Forwarding server: %@\nError: %@", comment: "snd error text"), proxyServer, srvError.errorInfo)
|
||||
case let .proxyRelay(proxyServer, srvError): String.localizedStringWithFormat(NSLocalizedString("Forwarding server: %@\nDestination server error: %@", comment: "snd error text"), proxyServer, srvError.errorInfo)
|
||||
case let .other(sndError): String.localizedStringWithFormat(NSLocalizedString("Error: %@", comment: "snd error text"), sndError)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum SrvError: Decodable {
|
||||
case host
|
||||
case version
|
||||
case other(srvError: String)
|
||||
|
||||
public var errorInfo: String {
|
||||
switch self {
|
||||
case .host: NSLocalizedString("Server address is incompatible with network settings.", comment: "srv error text.")
|
||||
case .version: NSLocalizedString("Server version is incompatible with network settings.", comment: "srv error text")
|
||||
case let .other(srvError): srvError
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum MsgReceiptStatus: String, Decodable {
|
||||
case ok
|
||||
case badMsgHash
|
||||
@@ -3886,4 +3941,5 @@ public struct ChatItemVersion: Decodable {
|
||||
public struct MemberDeliveryStatus: Decodable {
|
||||
public var groupMemberId: Int64
|
||||
public var memberDeliveryStatus: CIStatus
|
||||
public var sentViaProxy: Bool?
|
||||
}
|
||||
|
||||
@@ -1893,6 +1893,9 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Препрати";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Препращане и запазване на съобщения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "препратено";
|
||||
|
||||
@@ -2124,6 +2127,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"In reply to" = "В отговор на";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"In-call sounds" = "Звуци по време на разговор";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito" = "Инкогнито";
|
||||
|
||||
@@ -2469,6 +2475,9 @@
|
||||
/* notification */
|
||||
"message received" = "получено съобщение";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "Източникът на съобщението остава скрит.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message text" = "Текст на съобщението";
|
||||
|
||||
@@ -2553,6 +2562,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"More improvements are coming soon!" = "Очаквайте скоро още подобрения!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"More reliable network connection." = "По-надеждна мрежова връзка.";
|
||||
|
||||
/* item status description */
|
||||
"Most likely this connection is deleted." = "Най-вероятно тази връзка е изтрита.";
|
||||
|
||||
@@ -2577,6 +2589,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Network connection" = "Мрежова връзка";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Network management" = "Управление на мрежата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Network settings" = "Мрежови настройки";
|
||||
|
||||
@@ -2945,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Профилно изображение";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Профилни изображения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Име на профила";
|
||||
|
||||
@@ -3488,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Настройки";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Променете формата на профилните изображения";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Сподели";
|
||||
|
||||
@@ -3590,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Някой";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Квадрат, кръг или нещо между тях.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "стандартно криптиране от край до край";
|
||||
|
||||
@@ -4172,6 +4196,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"When available" = "Когато са налични";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When connecting audio and video calls." = "При свързване на аудио и видео разговори.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When people request to connect, you can accept or reject it." = "Когато хората искат да се свържат с вас, можете да ги приемете или отхвърлите.";
|
||||
|
||||
@@ -4181,6 +4208,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"WiFi" = "WiFi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Will be enabled in direct chats!" = "Ще бъде активирано в личните чатове!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Wired ethernet" = "Кабелен Ethernet";
|
||||
|
||||
|
||||
@@ -2960,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Profilbild";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Profil-Bilder";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Profilname";
|
||||
|
||||
@@ -3503,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Einstellungen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Form der Profil-Bilder";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Teilen";
|
||||
|
||||
@@ -3605,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Jemand";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Quadratisch, kreisförmig oder irgendetwas dazwischen.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "Standard-Ende-zu-Ende-Verschlüsselung";
|
||||
|
||||
@@ -4020,7 +4029,7 @@
|
||||
"Use chat" = "Verwenden Sie Chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use current profile" = "Nutzen Sie das aktuelle Profil";
|
||||
"Use current profile" = "Das aktuelle Profil nutzen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use for new connections" = "Für neue Verbindungen nutzen";
|
||||
|
||||
@@ -2960,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Imagen del perfil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Imágenes del perfil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nombre del perfil";
|
||||
|
||||
@@ -3503,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Configuración";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Dar forma a las imágenes de perfil";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Compartir";
|
||||
|
||||
@@ -3605,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Alguien";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Cuadrada, circular o cualquier forma intermedia.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "cifrado estándar de extremo a extremo";
|
||||
|
||||
|
||||
@@ -389,6 +389,9 @@
|
||||
/* member role */
|
||||
"admin" = "admin";
|
||||
|
||||
/* feature role */
|
||||
"admins" = "admins";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Admins can block a member for all." = "Les admins peuvent bloquer un membre pour tous.";
|
||||
|
||||
@@ -416,6 +419,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Tous les membres du groupe resteront connectés.";
|
||||
|
||||
/* feature role */
|
||||
"all members" = "tous les membres";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All messages will be deleted - this cannot be undone!" = "Tous les messages seront supprimés - il n'est pas possible de revenir en arrière !";
|
||||
|
||||
@@ -464,6 +470,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Allow to send files and media." = "Permet l'envoi de fichiers et de médias.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow to send SimpleX links." = "Autorise l'envoi de liens SimpleX.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow to send voice messages." = "Autoriser l'envoi de messages vocaux.";
|
||||
|
||||
@@ -707,6 +716,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot receive file" = "Impossible de recevoir le fichier";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cellular" = "Cellulaire";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Changer";
|
||||
|
||||
@@ -1401,6 +1413,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Rétrograder et ouvrir le chat";
|
||||
|
||||
/* chat item action */
|
||||
"Download" = "Télécharger";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Download failed" = "Échec du téléchargement";
|
||||
|
||||
@@ -1476,6 +1491,9 @@
|
||||
/* enabled status */
|
||||
"enabled" = "activé";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enabled for" = "Activé pour";
|
||||
|
||||
/* enabled status */
|
||||
"enabled for contact" = "activé pour le contact";
|
||||
|
||||
@@ -1830,6 +1848,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Files and media are prohibited in this group." = "Les fichiers et les médias sont interdits dans ce groupe.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Files and media not allowed" = "Fichiers et médias non autorisés";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Files and media prohibited!" = "Fichiers et médias interdits !";
|
||||
|
||||
@@ -1869,6 +1890,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"For console" = "Pour la console";
|
||||
|
||||
/* chat item action */
|
||||
"Forward" = "Transférer";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Transférer et sauvegarder des messages";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "transféré";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded" = "Transféré";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Transféré depuis";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Found desktop" = "Bureau trouvé";
|
||||
|
||||
@@ -1947,6 +1983,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Group members can send files and media." = "Les membres du groupe peuvent envoyer des fichiers et des médias.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group members can send SimpleX links." = "Les membres du groupe peuvent envoyer des liens SimpleX.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group members can send voice messages." = "Les membres du groupe peuvent envoyer des messages vocaux.";
|
||||
|
||||
@@ -2088,6 +2127,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"In reply to" = "En réponse à";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"In-call sounds" = "Sons d'appel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito" = "Incognito";
|
||||
|
||||
@@ -2433,6 +2475,9 @@
|
||||
/* notification */
|
||||
"message received" = "message reçu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "La source du message reste privée.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message text" = "Texte du message";
|
||||
|
||||
@@ -2517,6 +2562,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"More improvements are coming soon!" = "Plus d'améliorations à venir !";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"More reliable network connection." = "Connexion réseau plus fiable.";
|
||||
|
||||
/* item status description */
|
||||
"Most likely this connection is deleted." = "Connexion probablement supprimée.";
|
||||
|
||||
@@ -2538,6 +2586,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Network & servers" = "Réseau et serveurs";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Network connection" = "Connexion au réseau";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Network management" = "Gestion du réseau";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Network settings" = "Paramètres réseau";
|
||||
|
||||
@@ -2616,6 +2670,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No history" = "Aucun historique";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Pas de connexion au réseau";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Pas l'autorisation d'enregistrer un message vocal";
|
||||
|
||||
@@ -2762,9 +2819,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Or show this code" = "Ou présenter ce code";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Other" = "Autres";
|
||||
|
||||
/* member role */
|
||||
"owner" = "propriétaire";
|
||||
|
||||
/* feature role */
|
||||
"owners" = "propriétaires";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode" = "Code d'accès";
|
||||
|
||||
@@ -2897,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Image de profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Images de profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nom du profil";
|
||||
|
||||
@@ -2930,6 +2996,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit sending files and media." = "Interdire l'envoi de fichiers et de médias.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit sending SimpleX links." = "Interdire l'envoi de liens SimpleX.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit sending voice messages." = "Interdire l'envoi de messages vocaux.";
|
||||
|
||||
@@ -3008,6 +3077,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Receiving address will be changed to a different server. Address change will complete after sender comes online." = "L'adresse de réception sera changée pour un autre serveur. Le changement d'adresse sera terminé lorsque l'expéditeur sera en ligne.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Receiving concurrency" = "Réception simultanée";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Receiving file will be stopped." = "La réception du fichier sera interrompue.";
|
||||
|
||||
@@ -3017,6 +3089,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Recent history and improved [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." = "Historique récent et amélioration du [bot annuaire](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Recipient(s) can't see who this message is from." = "Le(s) destinataire(s) ne peut(vent) pas voir de qui provient ce message.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Recipients see updates as you type them." = "Les destinataires voient les mises à jour au fur et à mesure que vous leur écrivez.";
|
||||
|
||||
@@ -3212,6 +3287,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Enregistrer le message d'accueil ?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "enregistré";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved" = "Enregistré";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Enregistré depuis";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from %@" = "enregistré à partir de %@";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Message enregistré";
|
||||
|
||||
@@ -3419,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Paramètres";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Images de profil modelable";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Partager";
|
||||
|
||||
@@ -3479,6 +3569,12 @@
|
||||
/* chat feature */
|
||||
"SimpleX links" = "Liens SimpleX";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX links are prohibited in this group." = "Les liens SimpleX sont interdits dans ce groupe.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX links not allowed" = "Les liens SimpleX ne sont pas autorisés";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Lock" = "SimpleX Lock";
|
||||
|
||||
@@ -3515,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Quelqu'un";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Carré, circulaire, ou toute autre forme intermédiaire.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "chiffrement de bout en bout standard";
|
||||
|
||||
@@ -4043,6 +4142,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Voice messages are prohibited in this group." = "Les messages vocaux sont interdits dans ce groupe.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Voice messages not allowed" = "Les messages vocaux ne sont pas autorisés";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Voice messages prohibited!" = "Messages vocaux interdits !";
|
||||
|
||||
@@ -4094,12 +4196,24 @@
|
||||
/* No comment provided by engineer. */
|
||||
"When available" = "Quand disponible";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When connecting audio and video calls." = "Lors des appels audio et vidéo.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When people request to connect, you can accept or reject it." = "Vous pouvez accepter ou refuser les demandes de contacts.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Lorsque vous partagez un profil incognito avec quelqu'un, ce profil sera utilisé pour les groupes auxquels il vous invite.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"WiFi" = "WiFi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Will be enabled in direct chats!" = "Activé dans les discussions directes !";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Wired ethernet" = "Ethernet câblé";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"With encrypted files and media." = "Avec les fichiers et les médias chiffrés.";
|
||||
|
||||
@@ -4121,6 +4235,9 @@
|
||||
/* pref value */
|
||||
"yes" = "oui";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "vous";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Vous";
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
"(new)" = "(új)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"(this device v%@)" = "(ez az eszköz v%@)";
|
||||
"(this device v%@)" = "(ez az eszköz: v%@)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
")" = ")";
|
||||
@@ -65,7 +65,7 @@
|
||||
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Csillag a GitHubon](https://github.com/simplex-chat/simplex-chat)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő csatlakozáshoz.";
|
||||
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Ismerős hozzáadása**: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Add new contact**: to create your one-time QR Code for your contact." = "**Új ismerős hozzáadása**: egyszer használatos QR-kód vagy hivatkozás létrehozása a kapcsolattartóhoz.";
|
||||
@@ -134,19 +134,19 @@
|
||||
"%@ and %@" = "%@ és %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ and %@ connected" = "%@ és %@ csatlakozott";
|
||||
"%@ and %@ connected" = "%@ és %@ kapcsolódott";
|
||||
|
||||
/* copied message info, <sender> at <time> */
|
||||
"%@ at %@:" = "%1$@ %2$@-kor:";
|
||||
"%@ at %@:" = "%1$@ ekkor: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ connected" = "%@ csatlakozott";
|
||||
"%@ connected" = "%@ kapcsolódott";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ downloaded" = "%@ letöltve";
|
||||
|
||||
/* notification title */
|
||||
"%@ is connected!" = "%@ csatlakozott!";
|
||||
"%@ is connected!" = "%@ kapcsolódott!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ is not verified" = "%@ nem ellenőrzött";
|
||||
@@ -161,13 +161,13 @@
|
||||
"%@ uploaded" = "%@ feltöltve";
|
||||
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "%@ csatlakozni szeretne!";
|
||||
"%@ wants to connect!" = "%@ kapcsolódni szeretne!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld members" = "%@, %@ és további %lld tag";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld other members connected" = "%@, %@ és további %lld tag csatlakozott";
|
||||
"%@, %@ and %lld other members connected" = "%@, %@ és további %lld tag kapcsolódott";
|
||||
|
||||
/* copied message info */
|
||||
"%@:" = "%@:";
|
||||
@@ -357,7 +357,7 @@
|
||||
"accepted call" = "elfogadott hívás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "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.";
|
||||
"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ő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. */
|
||||
"Add contact" = "Ismerős hozzáadása";
|
||||
@@ -396,7 +396,7 @@
|
||||
"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.";
|
||||
"Admins can create the links to join groups." = "Az adminok hivatkozásokat hozhatnak létre a csoportokhoz való kapcsolódáshoz.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Advanced network settings" = "Speciális hálózati beállítások";
|
||||
@@ -417,7 +417,7 @@
|
||||
"All data is erased when it is entered." = "A jelkód megadása után minden adat törlésre kerül.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Minden csoporttag csatlakoztatva marad.";
|
||||
"All group members will remain connected." = "Minden csoporttag kapcsolódva marad.";
|
||||
|
||||
/* feature role */
|
||||
"all members" = "minden tag";
|
||||
@@ -432,7 +432,7 @@
|
||||
"All new messages from %@ will be hidden!" = "Minden új üzenet elrejtésre kerül tőle: %@!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All your contacts will remain connected." = "Minden ismerős csatlakoztatva marad.";
|
||||
"All your contacts will remain connected." = "Minden ismerős kapcsolódva marad.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All your contacts will remain connected. Profile update will be sent to your contacts." = "Ismerőseivel kapcsolatban marad. A profil változtatások frissítésre kerülnek az ismerősöknél.";
|
||||
@@ -498,13 +498,13 @@
|
||||
"Allow your contacts to send voice messages." = "Hangüzenetek küldésének engedélyezése ismerősök számára.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Already connected?" = "Csatlakoztatva?";
|
||||
"Already connected?" = "Már kapcsolódott?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Already connecting!" = "Kapcsolódás folyamatban!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Already joining the group!" = "Csatlakozás folyamatban!";
|
||||
"Already joining the group!" = "A csatlakozás folyamatban van a csoporthoz!";
|
||||
|
||||
/* pref value */
|
||||
"always" = "mindig";
|
||||
@@ -582,7 +582,7 @@
|
||||
"Authentication failed" = "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.";
|
||||
"Authentication is required before the call is connected, but you may miss calls." = "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. */
|
||||
"Authentication unavailable" = "Hitelesítés elérhetetlen";
|
||||
@@ -702,10 +702,10 @@
|
||||
"Can't invite contacts!" = "Ismerősök meghívása nem lehetséges!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cancel" = "Megszakítás";
|
||||
"Cancel" = "Mégse";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cancel migration" = "Átköltöztetés megszakítása";
|
||||
"Cancel migration" = "Átköltöztetés visszavonása";
|
||||
|
||||
/* feature offered item */
|
||||
"cancelled %@" = "%@ törölve";
|
||||
@@ -754,7 +754,7 @@
|
||||
"changed address for you" = "cím megváltoztatva";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"changed role of %@ to %@" = "%1$@ szerepköre megváltozott erre: %2$@";
|
||||
"changed role of %@ to %@" = "%1$@ szerepkörét megváltoztatta erre: %2$@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"changed your role to %@" = "megváltoztatta a szerepkörét erre: %@";
|
||||
@@ -883,7 +883,7 @@
|
||||
"Connect to desktop" = "Kapcsolódás számítógéphez";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"connect to SimpleX Chat developers." = "Csatlakozás a SimpleX Chat fejlesztőkhöz.";
|
||||
"connect to SimpleX Chat developers." = "Kapcsolódás a SimpleX Chat fejlesztőkhöz.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect to yourself?" = "Kapcsolódás saját magához?";
|
||||
@@ -895,13 +895,13 @@
|
||||
"Connect to yourself?\nThis is your own SimpleX address!" = "Kapcsolódás saját magához?\nEz a SimpleX azonosítója!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via contact address" = "Csatlakozás ismerős azonosítója által";
|
||||
"Connect via contact address" = "Kapcsolódás a kapcsolattartási azonosítón keresztül";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via link" = "Csatlakozás egy hivatkozáson keresztül";
|
||||
"Connect via link" = "Kapcsolódás egy hivatkozáson keresztül";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via one-time link" = "Csatlakozás egyszer használatos hivatkozáson keresztül";
|
||||
"Connect via one-time link" = "Kapcsolódás egyszer használatos hivatkozáson keresztül";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect with %@" = "Kapcsolódás ezzel: %@";
|
||||
@@ -931,7 +931,7 @@
|
||||
"connecting (introduced)" = "kapcsolódás (bejelentve)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"connecting (introduction invitation)" = "csatlakozás (bemutatkozás meghívás)";
|
||||
"connecting (introduction invitation)" = "kapcsolódás (bemutatkozó meghívó)";
|
||||
|
||||
/* call status */
|
||||
"connecting call" = "hívás kapcsolódik…";
|
||||
@@ -973,7 +973,7 @@
|
||||
"connection:%@" = "kapcsolat: %@";
|
||||
|
||||
/* profile update event chat item */
|
||||
"contact %@ changed to %@" = "%1$@ ismerősének neve megváltozott erre: %2$@";
|
||||
"contact %@ changed to %@" = "%1$@ megváltoztatta a nevét erre: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact allows" = "Ismerős engedélyezi";
|
||||
@@ -991,10 +991,10 @@
|
||||
"Contact hidden:" = "Ismerős elrejtve:";
|
||||
|
||||
/* notification */
|
||||
"Contact is connected" = "Ismerős csatlakozott";
|
||||
"Contact is connected" = "Ismerőse kapcsolódott";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact is not connected yet!" = "Az ismerős még nem csatlakozott!";
|
||||
"Contact is not connected yet!" = "Az ismerőse még nem kapcsolódott!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact name" = "Ismerős neve";
|
||||
@@ -1750,7 +1750,7 @@
|
||||
"Error starting chat" = "Hiba a csevegés elindításakor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Hiba a csevegés megszakításakor";
|
||||
"Error stopping chat" = "Hiba a csevegés megállításakor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile!" = "Hiba a profil váltásakor!";
|
||||
@@ -1831,10 +1831,10 @@
|
||||
"File will be deleted from servers." = "A fájl törölve lesz a kiszolgálóról.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"File will be received when your contact completes uploading it." = "A fájl akkor érkezik meg, amikor ismerőse befejezte annak feltöltést.";
|
||||
"File will be received when your contact completes uploading it." = "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!";
|
||||
"File will be received when your contact is online, please wait or check later!" = "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. */
|
||||
"File: %@" = "Fájl: %@";
|
||||
@@ -2086,10 +2086,10 @@
|
||||
"Ignore" = "Figyelmen kívül hagyás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"Image will be received when your contact completes uploading it." = "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!";
|
||||
"Image will be received when your contact is online, please wait or check later!" = "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. */
|
||||
"Immediately" = "Azonnal";
|
||||
@@ -2281,7 +2281,7 @@
|
||||
"It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Ez akkor fordulhat elő, ha:\n1. Az üzenetek 2 nap után, vagy a kiszolgálón 30 nap után lejártak.\n2. Az üzenet visszafejtése sikertelen volt, mert vagy az ismerőse régebbi adatbázis biztonsági mentést használt.\n3. A kapcsolat sérült.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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 (%@).";
|
||||
"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 kapcsolódott ezen a hivatkozáson keresztül. Ha ez nem így van, akkor hiba történt (%@).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Italian interface" = "Olasz kezelőfelület";
|
||||
@@ -2296,7 +2296,7 @@
|
||||
"Join" = "Csatlakozás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"join as %@" = "csatlakozás mint %@";
|
||||
"join as %@" = "csatlakozás mint: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Join group" = "Csatlakozás csoporthoz";
|
||||
@@ -2440,10 +2440,10 @@
|
||||
"Member" = "Tag";
|
||||
|
||||
/* profile update event chat item */
|
||||
"member %@ changed to %@" = "%1$@ tag megváltoztatta a nevét erre: %2$@";
|
||||
"member %@ changed to %@" = "%1$@ megváltoztatta a nevét erre: %2$@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"member connected" = "kapcsolódva";
|
||||
"member connected" = "kapcsolódott";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member role will be changed to \"%@\". All group members will be notified." = "A tag szerepköre meg fog változni erre: \"%@\". A csoport minden tagja értesítést kap róla.";
|
||||
@@ -2730,13 +2730,13 @@
|
||||
"One-time invitation link" = "Egyszer használatos meghívó hivatkozás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"Onion hosts will be required for connection. Requires enabling VPN." = "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 hosts will be used when available. Requires enabling VPN." = "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 hosts will not be used." = "Onion kiszolgálók nem lesznek használva.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Csak a klienseszközök tárolják a felhasználói profilokat, névjegyeket, csoportokat és a **2 rétegű végponttól-végpontig titkosítással** küldött üzeneteket.";
|
||||
@@ -2856,7 +2856,7 @@
|
||||
"Paste image" = "Kép beillesztése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Paste link to connect!" = "Hivatkozás beillesztése a csatlakozáshoz!";
|
||||
"Paste link to connect!" = "Hivatkozás beillesztése a kapcsolódáshoz!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Paste the link you received" = "Fogadott hivatkozás beillesztése";
|
||||
@@ -2960,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Profilkép";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Profilképek";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Profilnév";
|
||||
|
||||
@@ -3093,10 +3096,10 @@
|
||||
"Recipients see updates as you type them." = "A címzettek a beírás közben látják a frissítéseket.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"Reconnect all connected servers to force message delivery. It uses additional traffic." = "Ú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?";
|
||||
"Reconnect servers?" = "Újrakapcsolódás a kiszolgálókhoz?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Record updated at" = "A bejegyzés frissítve";
|
||||
@@ -3144,7 +3147,7 @@
|
||||
"removed %@" = "%@ eltávolítva";
|
||||
|
||||
/* profile update event chat item */
|
||||
"removed contact address" = "törölt csatlakozási cím";
|
||||
"removed contact address" = "törölt kapcsolattartási azonosító";
|
||||
|
||||
/* profile update event chat item */
|
||||
"removed profile picture" = "törölt profilkép";
|
||||
@@ -3345,7 +3348,7 @@
|
||||
"Security code" = "Biztonsági kód";
|
||||
|
||||
/* chat item text */
|
||||
"security code changed" = "biztonsági kód megváltozott";
|
||||
"security code changed" = "a biztonsági kód megváltozott";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select" = "Választás";
|
||||
@@ -3378,7 +3381,7 @@
|
||||
"Send direct message" = "Közvetlen üzenet küldése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send direct message to connect" = "Közvetlen üzenet küldése a csatlakozáshoz";
|
||||
"Send direct message to connect" = "Közvetlen üzenet küldése a kapcsolódáshoz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send disappearing message" = "Eltűnő üzenet küldése";
|
||||
@@ -3480,7 +3483,7 @@
|
||||
"Set it instead of system authentication." = "Rendszerhitelesítés helyetti beállítás.";
|
||||
|
||||
/* profile update event chat item */
|
||||
"set new contact address" = "új kapcsolattartási cím beállítása";
|
||||
"set new contact address" = "új kapcsolattartási azonosító beállítása";
|
||||
|
||||
/* profile update event chat item */
|
||||
"set new profile picture" = "új profilkép beállítása";
|
||||
@@ -3503,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Beállítások";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Profilkép alakzat";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Megosztás";
|
||||
|
||||
@@ -3513,7 +3519,7 @@
|
||||
"Share address" = "Azonosító megosztása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share address with contacts?" = "Megosztja az azonosítót az ismerősökkel?";
|
||||
"Share address with contacts?" = "Megosztja az azonosítót az ismerőseivel?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share link" = "Hivatkozás megosztása";
|
||||
@@ -3552,7 +3558,7 @@
|
||||
"SimpleX Chat security was audited by Trail of Bits." = "A SimpleX Chat biztonsága a Trail of Bits által lett auditálva.";
|
||||
|
||||
/* simplex link type */
|
||||
"SimpleX contact address" = "SimpleX ismerős azonosítója";
|
||||
"SimpleX contact address" = "SimpleX kapcsolattartási azonosító";
|
||||
|
||||
/* notification */
|
||||
"SimpleX encrypted message or connection event" = "SimpleX titkosított üzenet vagy kapcsolati esemény";
|
||||
@@ -3605,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Valaki";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Négyzet, kör vagy bármi a kettő között.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "szabványos végpontok közötti titkosítás";
|
||||
|
||||
@@ -3621,40 +3630,40 @@
|
||||
"starting…" = "indítás…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop" = "Megszakítás";
|
||||
"Stop" = "Megállítás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop chat" = "Csevegési szolgáltatás megszakítása";
|
||||
"Stop chat" = "Csevegési szolgáltatás megállítása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop chat to enable database actions" = "Csevegés megszakítása az adatbázis-műveletek engedélyezéséhez";
|
||||
"Stop chat to enable database actions" = "Csevegés megállítása az adatbázis-műveletek engedélyezéséhez";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped." = "A csevegés megszakítása a csevegőadatbázis exportálásához, importálásához vagy törléséhez. A csevegés megszakítása alatt nem tud üzeneteket fogadni és küldeni.";
|
||||
"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 megállítása a csevegő adatbázis exportálásához, importálásához vagy törléséhez. A csevegés megállítása alatt nem tud üzeneteket fogadni és küldeni.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop chat?" = "Csevegési szolgáltatás megszakítása?";
|
||||
"Stop chat?" = "Csevegési szolgáltatás megállítása?";
|
||||
|
||||
/* cancel file action */
|
||||
"Stop file" = "Fájl megszakítása";
|
||||
"Stop file" = "Fájl megállítása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop receiving file?" = "Fájl fogadás megszakítása?";
|
||||
"Stop receiving file?" = "Fájl fogadás megállítása?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop sending file?" = "Fájl küldés megszakítása?";
|
||||
"Stop sending file?" = "Fájl küldés megállítása?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop sharing" = "Megosztás megszakítása";
|
||||
"Stop sharing" = "Megosztás megállítása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop sharing address?" = "Címmegosztás megszakítása?";
|
||||
"Stop sharing address?" = "Címmegosztás megállítása?";
|
||||
|
||||
/* authentication reason */
|
||||
"Stop SimpleX" = "A SimpleX megszakítása";
|
||||
"Stop SimpleX" = "SimpleX megállítása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stopping chat" = "Csevegés megszakítása";
|
||||
"Stopping chat" = "Csevegés megállítása folyamatban";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"strike" = "áthúzott";
|
||||
@@ -3681,7 +3690,7 @@
|
||||
"Tap to activate profile." = "A profil aktiválásához koppintson az ikonra.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tap to Connect" = "Koppintson a csatlakozáshoz";
|
||||
"Tap to Connect" = "Koppintson a kapcsolódáshoz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tap to join" = "Koppintson a csatlakozáshoz";
|
||||
@@ -3747,7 +3756,7 @@
|
||||
"The connection you accepted will be cancelled!" = "Az ön által elfogadott kapcsolat megszakad!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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!";
|
||||
"The contact you shared this link with will NOT be able to connect!" = "Ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The created archive is available via app Settings / Database / Old database archive." = "A létrehozott archívum a Beállítások / Adatbázis / Régi adatbázis-archívum menüpontban érhető el.";
|
||||
@@ -3774,7 +3783,7 @@
|
||||
"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 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.";
|
||||
"The profile is only shared with your contacts." = "Profilja csak az ismerőseivel kerül megosztásra.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The second tick we missed! ✅" = "A második jelölés, amit kihagytunk! ✅";
|
||||
@@ -3840,7 +3849,7 @@
|
||||
"To ask any questions and to receive updates:" = "Bármilyen kérdés feltevéséhez és a frissítésekért:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"To connect, your contact can scan QR code or use the link in the app." = "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. */
|
||||
"To hide unwanted messages." = "Kéretlen üzenetek elrejtése.";
|
||||
@@ -3870,16 +3879,16 @@
|
||||
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "A végpontok közötti titkosítás ellenőrzéséhez ismerősével hasonlítsa össze (vagy szkennelje be) az eszközén lévő kódot.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Toggle incognito when connecting." = "Inkognító mód csatlakozáskor.";
|
||||
"Toggle incognito when connecting." = "Inkognitó mód kapcsolódáskor.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Transport isolation" = "Kapcsolat izolációs mód";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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: %@).";
|
||||
"Trying to connect to the server used to receive messages from this contact (error: %@)." = "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.";
|
||||
"Trying to connect to the server used to receive messages from this contact." = "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. */
|
||||
"Turkish interface" = "Török kezelőfelület";
|
||||
@@ -3951,7 +3960,7 @@
|
||||
"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Hacsak nem az iOS hívási felületét használja, engedélyezze a Ne zavarjanak módot a megszakítások elkerülése érdekében.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "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.\nA 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.";
|
||||
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "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.\nA 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. */
|
||||
"Unlink" = "Szétkapcsolás";
|
||||
@@ -3978,7 +3987,7 @@
|
||||
"Update" = "Frissítés";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Update .onion hosts setting?" = "Tor .onion host beállítások frissítése?";
|
||||
"Update .onion hosts setting?" = "Tor .onion kiszolgálók beállításainak frissítése?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Update database passphrase" = "Adatbázis jelmondat megváltoztatása";
|
||||
@@ -3999,7 +4008,7 @@
|
||||
"Updating settings will re-connect the client to all servers." = "A beállítások frissítése a szerverekhez újra kapcsolódással jár.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Updating this setting will re-connect the client to all servers." = "A beállítás frissítésével a kliens újracsatlakozik az összes kiszolgálóhoz.";
|
||||
"Updating this setting will re-connect the client to all servers." = "A beállítás frissítésével a kliens újrakapcsolódik az összes kiszolgálóhoz.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Upgrade and open chat" = "A csevegés frissítése és megnyitása";
|
||||
@@ -4014,7 +4023,7 @@
|
||||
"Uploading archive" = "Archívum feltöltése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use .onion hosts" = "Tor .onion hostok használata";
|
||||
"Use .onion hosts" = "Tor .onion kiszolgálók használata";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use chat" = "Csevegés használata";
|
||||
@@ -4050,7 +4059,7 @@
|
||||
"User profile" = "Felhasználói profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using .onion hosts requires compatible VPN provider." = "A .onion hosztok használatához kompatibilis VPN szolgáltatóra van szükség.";
|
||||
"Using .onion hosts requires compatible VPN provider." = "A .onion kiszolgálók használatához kompatibilis VPN szolgáltatóra van szükség.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "SimpleX Chat kiszolgálók használatban.";
|
||||
@@ -4086,7 +4095,7 @@
|
||||
"Via browser" = "Böngészőn keresztül";
|
||||
|
||||
/* chat list item description */
|
||||
"via contact address link" = "ismerős azonosítójának hivatkozásán keresztül";
|
||||
"via contact address link" = "kapcsolattartási azonosító-hivatkozáson keresztül";
|
||||
|
||||
/* chat list item description */
|
||||
"via group link" = "csoport hivatkozáson keresztül";
|
||||
@@ -4107,10 +4116,10 @@
|
||||
"video call (not e2e encrypted)" = "videóhívás (nem e2e titkosított)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"Video will be received when your contact completes uploading it." = "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!";
|
||||
"Video will be received when your contact is online, please wait or check later!" = "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. */
|
||||
"Videos and files up to 1gb" = "Videók és fájlok 1Gb méretig";
|
||||
@@ -4191,7 +4200,7 @@
|
||||
"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.";
|
||||
"When people request to connect, you can accept or reject it." = "Amikor az emberek kapcsolódást kérelmeznek, ön elfogadhatja vagy elutasíthatja azokat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Inkognitóprofil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.";
|
||||
@@ -4248,28 +4257,28 @@
|
||||
"You are already connected to %@." = "Már kapcsolódva van hozzá: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connecting to %@." = "Már folyamatban van a csatlakozás ehhez: %@.";
|
||||
"You are already connecting to %@." = "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!";
|
||||
"You are already connecting via this one-time link!" = "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(z) %@ csoport tagja.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already joining the group %@." = "Már folyamatban van a csatlakozás a csoporthoz %@.";
|
||||
"You are already joining the group %@." = "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!";
|
||||
"You are already joining the group via this link!" = "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.";
|
||||
"You are already joining the group via this link." = "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!\nRepeat join request?" = "Csatlakozás folyamatban!\nCsatlakozási kérés megismétlése?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"You are connected to the server used to receive messages from this contact." = "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. */
|
||||
"you are invited to group" = "meghívást kapott a csoportba";
|
||||
@@ -4314,10 +4323,10 @@
|
||||
"You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." = "Megoszthat egy hivatkozást vagy QR-kódot - így bárki csatlakozhat a csoporthoz. Ha a csoport később törlésre kerül, akkor nem fogja elveszíteni annak tagjait.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"You can share this address with your contacts to let them connect with **%@**." = "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.";
|
||||
"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 kapcsolódhat önhöz.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can start chat via app Settings / Database or by restarting the app" = "A csevegést az alkalmazás Beállítások / Adatbázis menü segítségével vagy az alkalmazás újraindításával indíthatja el";
|
||||
@@ -4344,7 +4353,7 @@
|
||||
"you changed role for yourself to %@" = "saját szerepkör megváltoztatva erre: %@";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you changed role of %@ to %@" = "megváltoztatta %1$@ szerepkörét erre: %@";
|
||||
"you changed role of %@ to %@" = "%1$@ szerepkörét megváltoztatta erre: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Ön szabályozhatja, hogy mely kiszogál(ók)ón keresztül **kapja** az üzeneteket, az ismerősöket - az üzenetküldéshez használt szervereken.";
|
||||
@@ -4353,10 +4362,10 @@
|
||||
"You could not be verified; please try again." = "Nem lehetett ellenőrizni; próbálja meg újra.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You have already requested connection via this address!" = "Már kért egy csatlakozást ezen az azonosítón keresztül!";
|
||||
"You have already requested connection via this address!" = "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!\nRepeat connection request?" = "Már kérelmezte a csatlakozást!\nKapcsolódási kérés megismétlése?";
|
||||
"You have already requested connection!\nRepeat connection request?" = "Már kért egy kapcsolódási kérelmet!\nKapcsolódási kérés megismétlése?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You have no chats" = "Nincsenek csevegési üzenetek";
|
||||
@@ -4401,22 +4410,22 @@
|
||||
"you unblocked %@" = "feloldotta %@ blokkolását";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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!";
|
||||
"You will be connected to group when the group host's device is online, please wait or check later!" = "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!";
|
||||
"You will be connected when group link host's device is online, please wait or check later!" = "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!";
|
||||
"You will be connected when your connection request is accepted, please wait or check later!" = "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!";
|
||||
"You will be connected when your contact's device is online, please wait or check later!" = "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. */
|
||||
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Az alkalmazás indításakor, vagy 30 másodpercnyi háttérben töltött idő után az alkalmazáshoz visszatérve hitelesítés szükséges.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You will connect to all group members." = "Csatlakozni fog a csoport összes tagjához.";
|
||||
"You will connect to all group members." = "Kapcsolódni fog a csoport összes tagjához.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You will still receive calls and notifications from muted profiles when they are active." = "Továbbra is kap hívásokat és értesítéseket a némított profiloktól, ha azok aktívak.";
|
||||
@@ -4425,7 +4434,7 @@
|
||||
"You will stop receiving messages from this group. Chat history will be preserved." = "Ettől a csoporttól nem fog értesítéseket kapni. A csevegési előzmények megmaradnak.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
"You won't lose your contacts if you later delete your address." = "Nem veszíti el az ismerőseit, ha később törli az azonosítóját.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you: " = "ön: ";
|
||||
@@ -4461,7 +4470,7 @@
|
||||
"Your contacts can allow full message deletion." = "Ismerősök engedélyezhetik a teljes üzenet törlést.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "Az ismerősök továbbra is csatlakoztatva maradnak.";
|
||||
"Your contacts will remain connected." = "Az ismerősei továbbra is kapcsolódva maradnak.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "A jelenlegi csevegési adatbázis TÖRLŐDNI FOG, és a HELYÉRE az importált adatbázis kerül.";
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"CFBundleName" = "SimpleX";
|
||||
|
||||
/* Privacy - Camera Usage Description */
|
||||
"NSCameraUsageDescription" = "A SimpleX-nek kamera-hozzáférésre van szüksége a QR-kódok beolvasásához, hogy csatlakozhasson más felhasználókhoz és videohívásokhoz.";
|
||||
"NSCameraUsageDescription" = "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 - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "A SimpleX Face ID-t használ a helyi hitelesítéshez";
|
||||
|
||||
@@ -1893,6 +1893,9 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Inoltra";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Inoltra e salva i messaggi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "inoltrato";
|
||||
|
||||
@@ -2124,6 +2127,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"In reply to" = "In risposta a";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"In-call sounds" = "Suoni nelle chiamate";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito" = "Incognito";
|
||||
|
||||
@@ -2469,6 +2475,9 @@
|
||||
/* notification */
|
||||
"message received" = "messaggio ricevuto";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -2553,6 +2562,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"More improvements are coming soon!" = "Altri miglioramenti sono in arrivo!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"More reliable network connection." = "Connessione di rete più affidabile.";
|
||||
|
||||
/* item status description */
|
||||
"Most likely this connection is deleted." = "Probabilmente questa connessione è stata eliminata.";
|
||||
|
||||
@@ -2577,6 +2589,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -2945,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Immagine del profilo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Immagini del profilo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nome del profilo";
|
||||
|
||||
@@ -3488,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Impostazioni";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Forma delle immagini del profilo";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Condividi";
|
||||
|
||||
@@ -3590,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Qualcuno";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Quadrata, circolare o qualsiasi forma tra le due.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "crittografia end-to-end standard";
|
||||
|
||||
@@ -4172,6 +4196,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"When available" = "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.";
|
||||
|
||||
@@ -4181,6 +4208,9 @@
|
||||
/* 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";
|
||||
|
||||
|
||||
@@ -68,10 +68,10 @@
|
||||
"**Create group**: to create a new group." = "**グループ作成**: 新しいグループを作成する。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**e2e encrypted** audio call" = "**e2e 暗号化**音声通話";
|
||||
"**e2e encrypted** audio call" = "**エンドツーエンド暗号化済み**の音声通話";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**e2e encrypted** video call" = "**e2e暗号化**ビデオ通話";
|
||||
"**e2e encrypted** video call" = "**エンドツーエンド暗号化済み**の テレビ電話 通話";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**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." = "**よりプライベート**: 20 分ごとに新しいメッセージを確認します。 デバイス トークンは SimpleX Chat サーバーと共有されますが、連絡先やメッセージの数は共有されません。";
|
||||
@@ -265,6 +265,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"~strike~" = "\\~取り消し線~";
|
||||
|
||||
/* time to disappear */
|
||||
"0 sec" = "0 秒";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"0s" = "0秒";
|
||||
|
||||
@@ -410,6 +413,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All your contacts will remain connected. Profile update will be sent to your contacts." = "すべての連絡先は維持されます。連絡先に更新されたプロフィールを送信します。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All your contacts, conversations and files will be securely encrypted and uploaded in chunks to configured XFTP relays." = "すべての連絡先、会話、ファイルは安全に暗号化され、設定されたXFTPリレーに分割でアップロードされます。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow" = "許可";
|
||||
|
||||
@@ -440,6 +446,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Allow to send files and media." = "ファイルやメディアの送信を許可する。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow to send SimpleX links." = "SimpleXリンクの送信を許可。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow to send voice messages." = "音声メッセージの送信を許可する。";
|
||||
|
||||
@@ -467,6 +476,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Already connected?" = "すでに接続済みですか?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Already connecting!" = "既に接続中です!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Already joining the group!" = "すでにグループに参加しています!";
|
||||
|
||||
/* pref value */
|
||||
"always" = "常に";
|
||||
|
||||
@@ -482,6 +497,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App build: %@" = "アプリのビルド: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App data migration" = "アプリデータの移行";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App encrypts new local files (except videos)." = "アプリは新しいローカルファイル(ビデオを除く)を暗号化します。";
|
||||
|
||||
|
||||
@@ -2960,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "profielfoto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Profiel afbeeldingen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Profielnaam";
|
||||
|
||||
@@ -3503,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Instellingen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Vorm profiel afbeeldingen";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Deel";
|
||||
|
||||
@@ -3605,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Iemand";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Vierkant, cirkel of iets daartussenin.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "standaard end-to-end encryptie";
|
||||
|
||||
|
||||
@@ -389,6 +389,9 @@
|
||||
/* member role */
|
||||
"admin" = "administrator";
|
||||
|
||||
/* feature role */
|
||||
"admins" = "administratorzy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Admins can block a member for all." = "Administratorzy mogą blokować członka dla wszystkich.";
|
||||
|
||||
@@ -416,6 +419,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Wszyscy członkowie grupy pozostaną połączeni.";
|
||||
|
||||
/* feature role */
|
||||
"all members" = "wszyscy członkowie";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All messages will be deleted - this cannot be undone!" = "Wszystkie wiadomości zostaną usunięte – nie można tego cofnąć!";
|
||||
|
||||
@@ -464,6 +470,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Allow to send files and media." = "Pozwól na wysyłanie plików i mediów.";
|
||||
|
||||
/* 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 voice messages." = "Zezwól na wysyłanie wiadomości głosowych.";
|
||||
|
||||
@@ -707,6 +716,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot receive file" = "Nie można odebrać pliku";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cellular" = "Sieć komórkowa";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Zmień";
|
||||
|
||||
@@ -1401,6 +1413,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Obniż wersję i otwórz czat";
|
||||
|
||||
/* chat item action */
|
||||
"Download" = "Pobierz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Download failed" = "Pobieranie nie udane";
|
||||
|
||||
@@ -1476,6 +1491,9 @@
|
||||
/* enabled status */
|
||||
"enabled" = "włączone";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enabled for" = "Włączony dla";
|
||||
|
||||
/* enabled status */
|
||||
"enabled for contact" = "włączone dla kontaktu";
|
||||
|
||||
@@ -1830,6 +1848,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Files and media are prohibited in this group." = "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!";
|
||||
|
||||
@@ -1869,6 +1890,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"For console" = "Dla konsoli";
|
||||
|
||||
/* chat item action */
|
||||
"Forward" = "Przekaż dalej";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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" = "Przekazane dalej";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Przekazane dalej od";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Found desktop" = "Znaleziono komputer";
|
||||
|
||||
@@ -1947,6 +1983,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Group members can send files and media." = "Członkowie grupy mogą wysyłać pliki i media.";
|
||||
|
||||
/* 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 voice messages." = "Członkowie grupy mogą wysyłać wiadomości głosowe.";
|
||||
|
||||
@@ -2088,6 +2127,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"In reply to" = "W odpowiedzi na";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"In-call sounds" = "Dźwięki w rozmowie";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito" = "Incognito";
|
||||
|
||||
@@ -2433,6 +2475,9 @@
|
||||
/* notification */
|
||||
"message received" = "wiadomość otrzymana";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -2517,6 +2562,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"More improvements are coming soon!" = "Więcej ulepszeń już wkrótce!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"More reliable network connection." = "Bardziej niezawodne połączenia sieciowe.";
|
||||
|
||||
/* item status description */
|
||||
"Most likely this connection is deleted." = "Najprawdopodobniej to połączenie jest usunięte.";
|
||||
|
||||
@@ -2538,6 +2586,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Network & servers" = "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";
|
||||
|
||||
@@ -2616,6 +2670,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No history" = "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";
|
||||
|
||||
@@ -2762,9 +2819,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Or show this code" = "Lub pokaż ten kod";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Other" = "Inne";
|
||||
|
||||
/* member role */
|
||||
"owner" = "właściciel";
|
||||
|
||||
/* feature role */
|
||||
"owners" = "właściciele";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode" = "Pin";
|
||||
|
||||
@@ -2897,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Zdjęcie profilowe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Zdjęcia profilowe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nazwa profilu";
|
||||
|
||||
@@ -2930,6 +2996,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit sending files and media." = "Zakaz wysyłania plików i mediów.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit sending SimpleX links." = "Zabroń wysyłania linków SimpleX.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit sending voice messages." = "Zabroń wysyłania wiadomości głosowych.";
|
||||
|
||||
@@ -3008,6 +3077,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Receiving address will be changed to a different server. Address change will complete after sender comes online." = "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.";
|
||||
|
||||
@@ -3017,6 +3089,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Recent history and improved [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." = "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.";
|
||||
|
||||
@@ -3212,6 +3287,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Zapisać wiadomość powitalną?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "zapisane";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved" = "Zapisane";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saved from" = "Zapisane od";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved from %@" = "zapisane od %@";
|
||||
|
||||
/* message info title */
|
||||
"Saved message" = "Zachowano wiadomość";
|
||||
|
||||
@@ -3419,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Ustawienia";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Kształtuj obrazy profilowe";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Udostępnij";
|
||||
|
||||
@@ -3479,6 +3569,12 @@
|
||||
/* chat feature */
|
||||
"SimpleX links" = "Linki SimpleX";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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. */
|
||||
"SimpleX Lock" = "Blokada SimpleX";
|
||||
|
||||
@@ -3515,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Ktoś";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Kwadrat, okrąg lub cokolwiek pomiędzy.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "standardowe szyfrowanie end-to-end";
|
||||
|
||||
@@ -4043,6 +4142,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Voice messages are prohibited in this group." = "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!";
|
||||
|
||||
@@ -4094,12 +4196,24 @@
|
||||
/* No comment provided by engineer. */
|
||||
"When available" = "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ć.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "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.";
|
||||
|
||||
@@ -4121,6 +4235,9 @@
|
||||
/* pref value */
|
||||
"yes" = "tak";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "Ty";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Ty";
|
||||
|
||||
|
||||
@@ -2960,6 +2960,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Profil fotoğrafı";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Profil resimleri";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Profil ismi";
|
||||
|
||||
@@ -3051,7 +3054,7 @@
|
||||
"Read more in our GitHub repository." = "Daha fazlasını GitHub depomuzdan oku.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Receipts are disabled" = "Makbuzlar devre dışı bırakıldı";
|
||||
"Receipts are disabled" = "Gönderildi bilgisi devre dışı bırakıldı";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"received answer…" = "alınan cevap…";
|
||||
@@ -3417,7 +3420,7 @@
|
||||
"Sending delivery receipts will be enabled for all contacts in all visible chat profiles." = "Görüldü bilgisi, tüm görünür sohbet profillerindeki tüm kişiler için etkinleştirilecektir.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending delivery receipts will be enabled for all contacts." = "Teslimat makbuzlarının gönderilmesi tüm kişiler için etkinleştirilecektir.";
|
||||
"Sending delivery receipts will be enabled for all contacts." = "Gönderildi bilgisi tüm kişiler için etkinleştirilecektir.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending file will be stopped." = "Dosya gönderimi durdurulacaktır.";
|
||||
@@ -3503,6 +3506,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Ayarlar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Profil resimlerini şekillendir";
|
||||
|
||||
/* chat item action */
|
||||
"Share" = "Paylaş";
|
||||
|
||||
@@ -3605,6 +3611,9 @@
|
||||
/* notification title */
|
||||
"Somebody" = "Biri";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Square, circle, or anything in between." = "Kare,daire, veya aralarında herhangi bir şey.";
|
||||
|
||||
/* chat item text */
|
||||
"standard end-to-end encryption" = "standart uçtan uca şifreleme";
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ android {
|
||||
defaultConfig {
|
||||
applicationId = "chat.simplex.app"
|
||||
namespace = "chat.simplex.app"
|
||||
minSdk = 28
|
||||
minSdk = 26
|
||||
//noinspection OldTargetApi
|
||||
targetSdk = 33
|
||||
// !!!
|
||||
|
||||
@@ -113,7 +113,7 @@ android {
|
||||
compileSdk = 34
|
||||
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
|
||||
defaultConfig {
|
||||
minSdk = 28
|
||||
minSdk = 26
|
||||
}
|
||||
testOptions.targetSdk = 33
|
||||
lint.targetSdk = 33
|
||||
|
||||
+17
-6
@@ -37,7 +37,7 @@ actual fun ClipboardManager.shareText(text: String) {
|
||||
}
|
||||
}
|
||||
|
||||
actual fun shareFile(text: String, fileSource: CryptoFile) {
|
||||
fun openOrShareFile(text: String, fileSource: CryptoFile, justOpen: Boolean) {
|
||||
val uri = if (fileSource.cryptoArgs != null) {
|
||||
val tmpFile = File(tmpDir, fileSource.filePath)
|
||||
tmpFile.deleteOnExit()
|
||||
@@ -55,20 +55,31 @@ actual fun shareFile(text: String, fileSource: CryptoFile) {
|
||||
}
|
||||
val ext = fileSource.filePath.substringAfterLast(".")
|
||||
val mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext) ?: return
|
||||
val sendIntent: Intent = Intent().apply {
|
||||
action = Intent.ACTION_SEND
|
||||
val sendIntent: Intent = Intent(if (justOpen) Intent.ACTION_VIEW else Intent.ACTION_SEND).apply {
|
||||
/*if (text.isNotEmpty()) {
|
||||
putExtra(Intent.EXTRA_TEXT, text)
|
||||
}*/
|
||||
putExtra(Intent.EXTRA_STREAM, uri.toUri())
|
||||
type = mimeType
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
if (justOpen) {
|
||||
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
setDataAndType(uri.toUri(), mimeType)
|
||||
} else {
|
||||
putExtra(Intent.EXTRA_STREAM, uri.toUri())
|
||||
type = mimeType
|
||||
}
|
||||
}
|
||||
val shareIntent = Intent.createChooser(sendIntent, null)
|
||||
shareIntent.addFlags(FLAG_ACTIVITY_NEW_TASK)
|
||||
androidAppContext.startActivity(shareIntent)
|
||||
}
|
||||
|
||||
actual fun shareFile(text: String, fileSource: CryptoFile) {
|
||||
openOrShareFile(text, fileSource, justOpen = false)
|
||||
}
|
||||
|
||||
actual fun openFile(fileSource: CryptoFile) {
|
||||
openOrShareFile("", fileSource, justOpen = true)
|
||||
}
|
||||
|
||||
actual fun UriHandler.sendEmail(subject: String, body: CharSequence) {
|
||||
val emailIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
|
||||
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
|
||||
|
||||
+69
-11
@@ -1048,9 +1048,13 @@ data class Contact(
|
||||
override val apiId get() = contactId
|
||||
override val ready get() = activeConn?.connStatus == ConnStatus.Ready
|
||||
val active get() = contactStatus == ContactStatus.Active
|
||||
override val sendMsgEnabled get() =
|
||||
(ready && active && !(activeConn?.connectionStats?.ratchetSyncSendProhibited ?: false))
|
||||
|| nextSendGrpInv
|
||||
override val sendMsgEnabled get() = (
|
||||
ready
|
||||
&& active
|
||||
&& !(activeConn?.connectionStats?.ratchetSyncSendProhibited ?: false)
|
||||
&& !(activeConn?.connDisabled ?: true)
|
||||
)
|
||||
|| nextSendGrpInv
|
||||
val nextSendGrpInv get() = contactGroupMemberId != null && !contactGrpInvSent
|
||||
override val ntfsEnabled get() = chatSettings.enableNtfs == MsgFilter.All
|
||||
override val incognito get() = contactConnIncognito
|
||||
@@ -1150,15 +1154,19 @@ data class Connection(
|
||||
val pqEncryption: Boolean,
|
||||
val pqSndEnabled: Boolean? = null,
|
||||
val pqRcvEnabled: Boolean? = null,
|
||||
val connectionStats: ConnectionStats? = null
|
||||
val connectionStats: ConnectionStats? = null,
|
||||
val authErrCounter: Int
|
||||
) {
|
||||
val id: ChatId get() = ":$connId"
|
||||
|
||||
val connDisabled: Boolean
|
||||
get() = authErrCounter >= 10 // authErrDisableCount in core
|
||||
|
||||
val connPQEnabled: Boolean
|
||||
get() = pqSndEnabled == true && pqRcvEnabled == true
|
||||
|
||||
companion object {
|
||||
val sampleData = Connection(connId = 1, agentConnId = "abc", connStatus = ConnStatus.Ready, connLevel = 0, viaGroupLink = false, peerChatVRange = VersionRange(1, 1), customUserProfileId = null, pqSupport = false, pqEncryption = false)
|
||||
val sampleData = Connection(connId = 1, agentConnId = "abc", connStatus = ConnStatus.Ready, connLevel = 0, viaGroupLink = false, peerChatVRange = VersionRange(1, 1), customUserProfileId = null, pqSupport = false, pqEncryption = false, authErrCounter = 0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1900,6 +1908,7 @@ data class ChatItem (
|
||||
ts: Instant = Clock.System.now(),
|
||||
text: String = "hello\nthere",
|
||||
status: CIStatus = CIStatus.SndNew(),
|
||||
sentViaProxy: Boolean? = null,
|
||||
quotedItem: CIQuote? = null,
|
||||
file: CIFile? = null,
|
||||
itemForwarded: CIForwardedFrom? = null,
|
||||
@@ -1911,7 +1920,7 @@ data class ChatItem (
|
||||
) =
|
||||
ChatItem(
|
||||
chatDir = dir,
|
||||
meta = CIMeta.getSample(id, ts, text, status, itemForwarded, itemDeleted, itemEdited, itemTimed, deletable, editable),
|
||||
meta = CIMeta.getSample(id, ts, text, status, sentViaProxy, itemForwarded, itemDeleted, itemEdited, itemTimed, deletable, editable),
|
||||
content = CIContent.SndMsgContent(msgContent = MsgContent.MCText(text)),
|
||||
quotedItem = quotedItem,
|
||||
reactions = listOf(),
|
||||
@@ -1993,6 +2002,7 @@ data class ChatItem (
|
||||
itemTs = Clock.System.now(),
|
||||
itemText = generalGetString(MR.strings.deleted_description),
|
||||
itemStatus = CIStatus.RcvRead(),
|
||||
sentViaProxy = null,
|
||||
createdAt = Clock.System.now(),
|
||||
updatedAt = Clock.System.now(),
|
||||
itemForwarded = null,
|
||||
@@ -2016,6 +2026,7 @@ data class ChatItem (
|
||||
itemTs = Clock.System.now(),
|
||||
itemText = "",
|
||||
itemStatus = CIStatus.RcvRead(),
|
||||
sentViaProxy = null,
|
||||
createdAt = Clock.System.now(),
|
||||
updatedAt = Clock.System.now(),
|
||||
itemForwarded = null,
|
||||
@@ -2118,6 +2129,7 @@ data class CIMeta (
|
||||
val itemTs: Instant,
|
||||
val itemText: String,
|
||||
val itemStatus: CIStatus,
|
||||
val sentViaProxy: Boolean?,
|
||||
val createdAt: Instant,
|
||||
val updatedAt: Instant,
|
||||
val itemForwarded: CIForwardedFrom?,
|
||||
@@ -2144,7 +2156,7 @@ data class CIMeta (
|
||||
|
||||
companion object {
|
||||
fun getSample(
|
||||
id: Long, ts: Instant, text: String, status: CIStatus = CIStatus.SndNew(),
|
||||
id: Long, ts: Instant, text: String, status: CIStatus = CIStatus.SndNew(), sentViaProxy: Boolean? = null,
|
||||
itemForwarded: CIForwardedFrom? = null, itemDeleted: CIDeleted? = null, itemEdited: Boolean = false,
|
||||
itemTimed: CITimed? = null, itemLive: Boolean = false, deletable: Boolean = true, editable: Boolean = true
|
||||
): CIMeta =
|
||||
@@ -2153,6 +2165,7 @@ data class CIMeta (
|
||||
itemTs = ts,
|
||||
itemText = text,
|
||||
itemStatus = status,
|
||||
sentViaProxy = sentViaProxy,
|
||||
createdAt = ts,
|
||||
updatedAt = ts,
|
||||
itemForwarded = itemForwarded,
|
||||
@@ -2171,6 +2184,7 @@ data class CIMeta (
|
||||
itemTs = Clock.System.now(),
|
||||
itemText = "invalid JSON",
|
||||
itemStatus = CIStatus.SndNew(),
|
||||
sentViaProxy = null,
|
||||
createdAt = Clock.System.now(),
|
||||
updatedAt = Clock.System.now(),
|
||||
itemForwarded = null,
|
||||
@@ -2227,7 +2241,8 @@ sealed class CIStatus {
|
||||
@Serializable @SerialName("sndSent") class SndSent(val sndProgress: SndCIStatusProgress): CIStatus()
|
||||
@Serializable @SerialName("sndRcvd") class SndRcvd(val msgRcptStatus: MsgReceiptStatus, val sndProgress: SndCIStatusProgress): CIStatus()
|
||||
@Serializable @SerialName("sndErrorAuth") class SndErrorAuth: CIStatus()
|
||||
@Serializable @SerialName("sndError") class SndError(val agentError: String): CIStatus()
|
||||
@Serializable @SerialName("sndError") class CISSndError(val agentError: SndError): CIStatus()
|
||||
@Serializable @SerialName("sndWarning") class SndWarning(val agentError: SndError): CIStatus()
|
||||
@Serializable @SerialName("rcvNew") class RcvNew: CIStatus()
|
||||
@Serializable @SerialName("rcvRead") class RcvRead: CIStatus()
|
||||
@Serializable @SerialName("invalid") class Invalid(val text: String): CIStatus()
|
||||
@@ -2251,7 +2266,8 @@ sealed class CIStatus {
|
||||
MsgReceiptStatus.BadMsgHash -> MR.images.ic_double_check to Color.Red
|
||||
}
|
||||
is SndErrorAuth -> MR.images.ic_close to Color.Red
|
||||
is SndError -> MR.images.ic_warning_filled to WarningYellow
|
||||
is CISSndError -> MR.images.ic_close to Color.Red
|
||||
is SndWarning -> MR.images.ic_warning_filled to WarningOrange
|
||||
is RcvNew -> MR.images.ic_circle_filled to primaryColor
|
||||
is RcvRead -> null
|
||||
is CIStatus.Invalid -> MR.images.ic_question_mark to metaColor
|
||||
@@ -2262,13 +2278,48 @@ sealed class CIStatus {
|
||||
is SndSent -> null
|
||||
is SndRcvd -> null
|
||||
is SndErrorAuth -> generalGetString(MR.strings.message_delivery_error_title) to generalGetString(MR.strings.message_delivery_error_desc)
|
||||
is SndError -> generalGetString(MR.strings.message_delivery_error_title) to (generalGetString(MR.strings.unknown_error) + ": $agentError")
|
||||
is CISSndError -> generalGetString(MR.strings.message_delivery_error_title) to agentError.errorInfo
|
||||
is SndWarning -> generalGetString(MR.strings.message_delivery_warning_title) to agentError.errorInfo
|
||||
is RcvNew -> null
|
||||
is RcvRead -> null
|
||||
is Invalid -> "Invalid status" to this.text
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
sealed class SndError {
|
||||
@Serializable @SerialName("auth") class Auth: SndError()
|
||||
@Serializable @SerialName("quota") class Quota: SndError()
|
||||
@Serializable @SerialName("expired") class Expired: SndError()
|
||||
@Serializable @SerialName("relay") class Relay(val srvError: SrvError): SndError()
|
||||
@Serializable @SerialName("proxy") class Proxy(val proxyServer: String, val srvError: SrvError): SndError()
|
||||
@Serializable @SerialName("proxyRelay") class ProxyRelay(val proxyServer: String, val srvError: SrvError): SndError()
|
||||
@Serializable @SerialName("other") class Other(val sndError: String): SndError()
|
||||
|
||||
val errorInfo: String get() = when (this) {
|
||||
is SndError.Auth -> generalGetString(MR.strings.snd_error_auth)
|
||||
is SndError.Quota -> generalGetString(MR.strings.snd_error_quota)
|
||||
is SndError.Expired -> generalGetString(MR.strings.snd_error_expired)
|
||||
is SndError.Relay -> generalGetString(MR.strings.snd_error_relay).format(srvError.errorInfo)
|
||||
is SndError.Proxy -> generalGetString(MR.strings.snd_error_proxy).format(proxyServer, srvError.errorInfo)
|
||||
is SndError.ProxyRelay -> generalGetString(MR.strings.snd_error_proxy_relay).format(proxyServer, srvError.errorInfo)
|
||||
is SndError.Other -> generalGetString(MR.strings.ci_status_other_error).format(sndError)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
sealed class SrvError {
|
||||
@Serializable @SerialName("host") class Host: SrvError()
|
||||
@Serializable @SerialName("version") class Version: SrvError()
|
||||
@Serializable @SerialName("other") class Other(val srvError: String): SrvError()
|
||||
|
||||
val errorInfo: String get() = when (this) {
|
||||
is SrvError.Host -> generalGetString(MR.strings.srv_error_host)
|
||||
is SrvError.Version -> generalGetString(MR.strings.srv_error_version)
|
||||
is SrvError.Other -> srvError
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class MsgReceiptStatus {
|
||||
@SerialName("ok") Ok,
|
||||
@@ -2653,6 +2704,12 @@ data class CIFile(
|
||||
return res
|
||||
}
|
||||
|
||||
fun forwardingAllowed(): Boolean = when {
|
||||
chatModel.connectedToRemote() && cachedRemoteFileRequests[fileSource] != false && loaded -> true
|
||||
getLoadedFilePath(this) != null -> true
|
||||
else -> false
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun getSample(
|
||||
fileId: Long = 1,
|
||||
@@ -3348,7 +3405,8 @@ data class ChatItemVersion(
|
||||
@Serializable
|
||||
data class MemberDeliveryStatus(
|
||||
val groupMemberId: Long,
|
||||
val memberDeliveryStatus: CIStatus
|
||||
val memberDeliveryStatus: CIStatus,
|
||||
val sentViaProxy: Boolean?
|
||||
)
|
||||
|
||||
enum class NotificationPreviewMode {
|
||||
|
||||
+78
-10
@@ -130,6 +130,8 @@ class AppPreferences {
|
||||
},
|
||||
set = fun(mode: TransportSessionMode) { _networkSessionMode.set(mode.name) }
|
||||
)
|
||||
val networkSMPProxyMode = mkStrPreference(SHARED_PREFS_NETWORK_SMP_PROXY_MODE, SMPProxyMode.Never.name)
|
||||
val networkSMPProxyFallback = mkStrPreference(SHARED_PREFS_NETWORK_SMP_PROXY_FALLBACK, SMPProxyFallback.Allow.name)
|
||||
val networkHostMode = mkStrPreference(SHARED_PREFS_NETWORK_HOST_MODE, HostMode.OnionViaSocks.name)
|
||||
val networkRequiredHostMode = mkBoolPreference(SHARED_PREFS_NETWORK_REQUIRED_HOST_MODE, false)
|
||||
val networkTCPConnectTimeout = mkTimeoutPreference(SHARED_PREFS_NETWORK_TCP_CONNECT_TIMEOUT, NetCfg.defaults.tcpConnectTimeout, NetCfg.proxyDefaults.tcpConnectTimeout)
|
||||
@@ -185,6 +187,8 @@ class AppPreferences {
|
||||
|
||||
val desktopWindowState = mkStrPreference(SHARED_PREFS_DESKTOP_WINDOW_STATE, null)
|
||||
|
||||
val showSentViaProxy = mkBoolPreference(SHARED_PREFS_SHOW_SENT_VIA_RPOXY, false)
|
||||
|
||||
|
||||
val iosCallKitEnabled = mkBoolPreference(SHARED_PREFS_IOS_CALL_KIT_ENABLED, true)
|
||||
val iosCallKitCallsInRecents = mkBoolPreference(SHARED_PREFS_IOS_CALL_KIT_CALLS_IN_RECENTS, false)
|
||||
@@ -306,6 +310,8 @@ class AppPreferences {
|
||||
private const val SHARED_PREFS_NETWORK_USE_SOCKS_PROXY = "NetworkUseSocksProxy"
|
||||
private const val SHARED_PREFS_NETWORK_PROXY_HOST_PORT = "NetworkProxyHostPort"
|
||||
private const val SHARED_PREFS_NETWORK_SESSION_MODE = "NetworkSessionMode"
|
||||
private const val SHARED_PREFS_NETWORK_SMP_PROXY_MODE = "NetworkSMPProxyMode"
|
||||
private const val SHARED_PREFS_NETWORK_SMP_PROXY_FALLBACK = "NetworkSMPProxyFallback"
|
||||
private const val SHARED_PREFS_NETWORK_HOST_MODE = "NetworkHostMode"
|
||||
private const val SHARED_PREFS_NETWORK_REQUIRED_HOST_MODE = "NetworkRequiredHostMode"
|
||||
private const val SHARED_PREFS_NETWORK_TCP_CONNECT_TIMEOUT = "NetworkTCPConnectTimeout"
|
||||
@@ -348,6 +354,7 @@ class AppPreferences {
|
||||
private const val SHARED_PREFS_CONNECT_REMOTE_VIA_MULTICAST_AUTO = "ConnectRemoteViaMulticastAuto"
|
||||
private const val SHARED_PREFS_OFFER_REMOTE_MULTICAST = "OfferRemoteMulticast"
|
||||
private const val SHARED_PREFS_DESKTOP_WINDOW_STATE = "DesktopWindowState"
|
||||
private const val SHARED_PREFS_SHOW_SENT_VIA_RPOXY = "showSentViaProxy"
|
||||
|
||||
private const val SHARED_PREFS_IOS_CALL_KIT_ENABLED = "iOSCallKitEnabled"
|
||||
private const val SHARED_PREFS_IOS_CALL_KIT_CALLS_IN_RECENTS = "iOSCallKitCallsInRecents"
|
||||
@@ -775,8 +782,8 @@ object ChatController {
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun apiForwardChatItem(rh: Long?, toChatType: ChatType, toChatId: Long, fromChatType: ChatType, fromChatId: Long, itemId: Long): ChatItem? {
|
||||
val cmd = CC.ApiForwardChatItem(toChatType, toChatId, fromChatType, fromChatId, itemId)
|
||||
suspend fun apiForwardChatItem(rh: Long?, toChatType: ChatType, toChatId: Long, fromChatType: ChatType, fromChatId: Long, itemId: Long, ttl: Int?): ChatItem? {
|
||||
val cmd = CC.ApiForwardChatItem(toChatType, toChatId, fromChatType, fromChatId, itemId, ttl)
|
||||
return processSendMessageCmd(rh, cmd)?.chatItem
|
||||
}
|
||||
|
||||
@@ -2031,13 +2038,21 @@ object ChatController {
|
||||
}
|
||||
}
|
||||
is CR.ContactSwitch ->
|
||||
chatModel.updateContactConnectionStats(rhId, r.contact, r.switchProgress.connectionStats)
|
||||
if (active(r.user)) {
|
||||
chatModel.updateContactConnectionStats(rhId, r.contact, r.switchProgress.connectionStats)
|
||||
}
|
||||
is CR.GroupMemberSwitch ->
|
||||
chatModel.updateGroupMemberConnectionStats(rhId, r.groupInfo, r.member, r.switchProgress.connectionStats)
|
||||
if (active(r.user)) {
|
||||
chatModel.updateGroupMemberConnectionStats(rhId, r.groupInfo, r.member, r.switchProgress.connectionStats)
|
||||
}
|
||||
is CR.ContactRatchetSync ->
|
||||
chatModel.updateContactConnectionStats(rhId, r.contact, r.ratchetSyncProgress.connectionStats)
|
||||
if (active(r.user)) {
|
||||
chatModel.updateContactConnectionStats(rhId, r.contact, r.ratchetSyncProgress.connectionStats)
|
||||
}
|
||||
is CR.GroupMemberRatchetSync ->
|
||||
chatModel.updateGroupMemberConnectionStats(rhId, r.groupInfo, r.member, r.ratchetSyncProgress.connectionStats)
|
||||
if (active(r.user)) {
|
||||
chatModel.updateGroupMemberConnectionStats(rhId, r.groupInfo, r.member, r.ratchetSyncProgress.connectionStats)
|
||||
}
|
||||
is CR.RemoteHostSessionCode -> {
|
||||
chatModel.remoteHostPairing.value = r.remoteHost_ to RemoteHostSessionState.PendingConfirmation(r.sessionCode)
|
||||
}
|
||||
@@ -2046,6 +2061,11 @@ object ChatController {
|
||||
chatModel.currentRemoteHost.value = r.remoteHost
|
||||
switchUIRemoteHost(r.remoteHost.remoteHostId)
|
||||
}
|
||||
is CR.ContactDisabled -> {
|
||||
if (active(r.user)) {
|
||||
chatModel.updateContact(rhId, r.contact)
|
||||
}
|
||||
}
|
||||
is CR.RemoteHostStopped -> {
|
||||
val disconnectedHost = chatModel.remoteHosts.firstOrNull { it.remoteHostId == r.remoteHostId_ }
|
||||
chatModel.remoteHostPairing.value = null
|
||||
@@ -2302,6 +2322,8 @@ object ChatController {
|
||||
val hostMode = HostMode.valueOf(appPrefs.networkHostMode.get()!!)
|
||||
val requiredHostMode = appPrefs.networkRequiredHostMode.get()
|
||||
val sessionMode = appPrefs.networkSessionMode.get()
|
||||
val smpProxyMode = SMPProxyMode.valueOf(appPrefs.networkSMPProxyMode.get()!!)
|
||||
val smpProxyFallback = SMPProxyFallback.valueOf(appPrefs.networkSMPProxyFallback.get()!!)
|
||||
val tcpConnectTimeout = appPrefs.networkTCPConnectTimeout.get()
|
||||
val tcpTimeout = appPrefs.networkTCPTimeout.get()
|
||||
val tcpTimeoutPerKb = appPrefs.networkTCPTimeoutPerKb.get()
|
||||
@@ -2322,6 +2344,8 @@ object ChatController {
|
||||
hostMode = hostMode,
|
||||
requiredHostMode = requiredHostMode,
|
||||
sessionMode = sessionMode,
|
||||
smpProxyMode = smpProxyMode,
|
||||
smpProxyFallback = smpProxyFallback,
|
||||
tcpConnectTimeout = tcpConnectTimeout,
|
||||
tcpTimeout = tcpTimeout,
|
||||
tcpTimeoutPerKb = tcpTimeoutPerKb,
|
||||
@@ -2340,6 +2364,8 @@ object ChatController {
|
||||
appPrefs.networkHostMode.set(cfg.hostMode.name)
|
||||
appPrefs.networkRequiredHostMode.set(cfg.requiredHostMode)
|
||||
appPrefs.networkSessionMode.set(cfg.sessionMode)
|
||||
appPrefs.networkSMPProxyMode.set(cfg.smpProxyMode.name)
|
||||
appPrefs.networkSMPProxyFallback.set(cfg.smpProxyFallback.name)
|
||||
appPrefs.networkTCPConnectTimeout.set(cfg.tcpConnectTimeout)
|
||||
appPrefs.networkTCPTimeout.set(cfg.tcpTimeout)
|
||||
appPrefs.networkTCPTimeoutPerKb.set(cfg.tcpTimeoutPerKb)
|
||||
@@ -2407,7 +2433,7 @@ sealed class CC {
|
||||
class ApiDeleteChatItem(val type: ChatType, val id: Long, val itemId: Long, val mode: CIDeleteMode): CC()
|
||||
class ApiDeleteMemberChatItem(val groupId: Long, val groupMemberId: Long, val itemId: Long): CC()
|
||||
class ApiChatItemReaction(val type: ChatType, val id: Long, val itemId: Long, val add: Boolean, val reaction: MsgReaction): CC()
|
||||
class ApiForwardChatItem(val toChatType: ChatType, val toChatId: Long, val fromChatType: ChatType, val fromChatId: Long, val itemId: Long): CC()
|
||||
class ApiForwardChatItem(val toChatType: ChatType, val toChatId: Long, val fromChatType: ChatType, val fromChatId: Long, val itemId: Long, val ttl: Int?): CC()
|
||||
class ApiNewGroup(val userId: Long, val incognito: Boolean, val groupProfile: GroupProfile): CC()
|
||||
class ApiAddMember(val groupId: Long, val contactId: Long, val memberRole: GroupMemberRole): CC()
|
||||
class ApiJoinGroup(val groupId: Long): CC()
|
||||
@@ -2549,7 +2575,10 @@ sealed class CC {
|
||||
is ApiDeleteChatItem -> "/_delete item ${chatRef(type, id)} $itemId ${mode.deleteMode}"
|
||||
is ApiDeleteMemberChatItem -> "/_delete member item #$groupId $groupMemberId $itemId"
|
||||
is ApiChatItemReaction -> "/_reaction ${chatRef(type, id)} $itemId ${onOff(add)} ${json.encodeToString(reaction)}"
|
||||
is ApiForwardChatItem -> "/_forward ${chatRef(toChatType, toChatId)} ${chatRef(fromChatType, fromChatId)} $itemId"
|
||||
is ApiForwardChatItem -> {
|
||||
val ttlStr = if (ttl != null) "$ttl" else "default"
|
||||
"/_forward ${chatRef(toChatType, toChatId)} ${chatRef(fromChatType, fromChatId)} $itemId ttl=${ttlStr}"
|
||||
}
|
||||
is ApiNewGroup -> "/_group $userId incognito=${onOff(incognito)} ${json.encodeToString(groupProfile)}"
|
||||
is ApiAddMember -> "/_add #$groupId $contactId ${memberRole.memberRole}"
|
||||
is ApiJoinGroup -> "/_join #$groupId"
|
||||
@@ -3025,9 +3054,12 @@ data class ParsedServerAddress (
|
||||
@Serializable
|
||||
data class NetCfg(
|
||||
val socksProxy: String?,
|
||||
val socksMode: SocksMode = SocksMode.Always,
|
||||
val hostMode: HostMode,
|
||||
val requiredHostMode: Boolean,
|
||||
val sessionMode: TransportSessionMode,
|
||||
val smpProxyMode: SMPProxyMode,
|
||||
val smpProxyFallback: SMPProxyFallback,
|
||||
val tcpConnectTimeout: Long, // microseconds
|
||||
val tcpTimeout: Long, // microseconds
|
||||
val tcpTimeoutPerKb: Long, // microseconds
|
||||
@@ -3056,6 +3088,8 @@ data class NetCfg(
|
||||
hostMode = HostMode.OnionViaSocks,
|
||||
requiredHostMode = false,
|
||||
sessionMode = TransportSessionMode.User,
|
||||
smpProxyMode = SMPProxyMode.Never,
|
||||
smpProxyFallback = SMPProxyFallback.Allow,
|
||||
tcpConnectTimeout = 25_000_000,
|
||||
tcpTimeout = 15_000_000,
|
||||
tcpTimeoutPerKb = 10_000,
|
||||
@@ -3071,6 +3105,8 @@ data class NetCfg(
|
||||
hostMode = HostMode.OnionViaSocks,
|
||||
requiredHostMode = false,
|
||||
sessionMode = TransportSessionMode.User,
|
||||
smpProxyMode = SMPProxyMode.Never,
|
||||
smpProxyFallback = SMPProxyFallback.Allow,
|
||||
tcpConnectTimeout = 35_000_000,
|
||||
tcpTimeout = 20_000_000,
|
||||
tcpTimeoutPerKb = 15_000,
|
||||
@@ -3109,6 +3145,35 @@ enum class HostMode {
|
||||
@SerialName("public") Public;
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class SocksMode {
|
||||
@SerialName("always") Always,
|
||||
@SerialName("onion") Onion;
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class SMPProxyMode {
|
||||
@SerialName("always") Always,
|
||||
@SerialName("unknown") Unknown,
|
||||
@SerialName("unprotected") Unprotected,
|
||||
@SerialName("never") Never;
|
||||
|
||||
companion object {
|
||||
val default = Never
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class SMPProxyFallback {
|
||||
@SerialName("allow") Allow,
|
||||
@SerialName("allowProtected") AllowProtected,
|
||||
@SerialName("prohibit") Prohibit;
|
||||
|
||||
companion object {
|
||||
val default = Allow
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class TransportSessionMode {
|
||||
@SerialName("user") User,
|
||||
@@ -4175,7 +4240,7 @@ sealed class CR {
|
||||
@Serializable @SerialName("rcvStandaloneFileComplete") class RcvStandaloneFileComplete(val user: UserRef, val targetPath: String, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||
@Serializable @SerialName("rcvFileCancelled") class RcvFileCancelled(val user: UserRef, val chatItem_: AChatItem?, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||
@Serializable @SerialName("rcvFileSndCancelled") class RcvFileSndCancelled(val user: UserRef, val chatItem: AChatItem, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||
@Serializable @SerialName("rcvFileError") class RcvFileError(val user: UserRef, val chatItem_: AChatItem?, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||
@Serializable @SerialName("rcvFileError") class RcvFileError(val user: UserRef, val chatItem_: AChatItem?, val agentError: AgentErrorType, val rcvFileTransfer: RcvFileTransfer): CR()
|
||||
// sending file events
|
||||
@Serializable @SerialName("sndFileStart") class SndFileStart(val user: UserRef, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
||||
@Serializable @SerialName("sndFileComplete") class SndFileComplete(val user: UserRef, val chatItem: AChatItem, val sndFileTransfer: SndFileTransfer): CR()
|
||||
@@ -4197,6 +4262,7 @@ sealed class CR {
|
||||
@Serializable @SerialName("callExtraInfo") class CallExtraInfo(val user: UserRef, val contact: Contact, val extraInfo: WebRTCExtraInfo): CR()
|
||||
@Serializable @SerialName("callEnded") class CallEnded(val user: UserRef, val contact: Contact): CR()
|
||||
@Serializable @SerialName("contactConnectionDeleted") class ContactConnectionDeleted(val user: UserRef, val connection: PendingContactConnection): CR()
|
||||
@Serializable @SerialName("contactDisabled") class ContactDisabled(val user: UserRef, val contact: Contact): CR()
|
||||
// remote events (desktop)
|
||||
@Serializable @SerialName("remoteHostList") class RemoteHostList(val remoteHosts: List<RemoteHostInfo>): CR()
|
||||
@Serializable @SerialName("currentRemoteHost") class CurrentRemoteHost(val remoteHost_: RemoteHostInfo?): CR()
|
||||
@@ -4361,6 +4427,7 @@ sealed class CR {
|
||||
is CallExtraInfo -> "callExtraInfo"
|
||||
is CallEnded -> "callEnded"
|
||||
is ContactConnectionDeleted -> "contactConnectionDeleted"
|
||||
is ContactDisabled -> "contactDisabled"
|
||||
is RemoteHostList -> "remoteHostList"
|
||||
is CurrentRemoteHost -> "currentRemoteHost"
|
||||
is RemoteHostStarted -> "remoteHostStarted"
|
||||
@@ -4501,7 +4568,7 @@ sealed class CR {
|
||||
is RcvFileSndCancelled -> withUser(user, json.encodeToString(chatItem))
|
||||
is RcvFileProgressXFTP -> withUser(user, "chatItem: ${json.encodeToString(chatItem_)}\nreceivedSize: $receivedSize\ntotalSize: $totalSize")
|
||||
is RcvStandaloneFileComplete -> withUser(user, targetPath)
|
||||
is RcvFileError -> withUser(user, json.encodeToString(chatItem_))
|
||||
is RcvFileError -> withUser(user, "chatItem_: ${json.encodeToString(chatItem_)}\nagentError: ${agentError.string}\nrcvFileTransfer: $rcvFileTransfer")
|
||||
is SndFileCancelled -> json.encodeToString(chatItem_)
|
||||
is SndStandaloneFileCreated -> noDetails()
|
||||
is SndFileStartXFTP -> withUser(user, json.encodeToString(chatItem))
|
||||
@@ -4521,6 +4588,7 @@ sealed class CR {
|
||||
is CallExtraInfo -> withUser(user, "contact: ${contact.id}\nextraInfo: ${json.encodeToString(extraInfo)}")
|
||||
is CallEnded -> withUser(user, "contact: ${contact.id}")
|
||||
is ContactConnectionDeleted -> withUser(user, json.encodeToString(connection))
|
||||
is ContactDisabled -> withUser(user, json.encodeToString(contact))
|
||||
// remote events (mobile)
|
||||
is RemoteHostList -> json.encodeToString(remoteHosts)
|
||||
is CurrentRemoteHost -> if (remoteHost_ == null) "local" else json.encodeToString(remoteHost_)
|
||||
|
||||
@@ -8,3 +8,4 @@ expect fun UriHandler.sendEmail(subject: String, body: CharSequence)
|
||||
|
||||
expect fun ClipboardManager.shareText(text: String)
|
||||
expect fun shareFile(text: String, fileSource: CryptoFile)
|
||||
expect fun openFile(fileSource: CryptoFile)
|
||||
|
||||
+17
-5
@@ -304,7 +304,7 @@ fun ChatItemInfoView(chatRh: Long?, ci: ChatItem, ciInfo: ChatItemInfo, devTools
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun MemberDeliveryStatusView(member: GroupMember, status: CIStatus) {
|
||||
fun MemberDeliveryStatusView(member: GroupMember, status: CIStatus, sentViaProxy: Boolean?) {
|
||||
SectionItemView(
|
||||
padding = PaddingValues(horizontal = 0.dp)
|
||||
) {
|
||||
@@ -317,6 +317,18 @@ fun ChatItemInfoView(chatRh: Long?, ci: ChatItem, ciInfo: ChatItemInfo, devTools
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
Spacer(Modifier.fillMaxWidth().weight(1f))
|
||||
if (sentViaProxy == true) {
|
||||
Box(
|
||||
Modifier.size(36.dp),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Icon(
|
||||
painterResource(MR.images.ic_arrow_forward),
|
||||
contentDescription = null,
|
||||
tint = CurrentColors.value.colors.secondary
|
||||
)
|
||||
}
|
||||
}
|
||||
val statusIcon = status.statusIcon(MaterialTheme.colors.primary, CurrentColors.value.colors.secondary)
|
||||
var modifier = Modifier.size(36.dp).clip(RoundedCornerShape(20.dp))
|
||||
val info = status.statusInto
|
||||
@@ -357,8 +369,8 @@ fun ChatItemInfoView(chatRh: Long?, ci: ChatItem, ciInfo: ChatItemInfo, devTools
|
||||
if (mss.isNotEmpty()) {
|
||||
SectionView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
Text(stringResource(MR.strings.delivery), style = MaterialTheme.typography.h2, modifier = Modifier.padding(bottom = DEFAULT_PADDING))
|
||||
mss.forEach { (member, status) ->
|
||||
MemberDeliveryStatusView(member, status)
|
||||
mss.forEach { (member, status, sentViaProxy) ->
|
||||
MemberDeliveryStatusView(member, status, sentViaProxy)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -482,10 +494,10 @@ fun ChatItemInfoView(chatRh: Long?, ci: ChatItem, ciInfo: ChatItemInfo, devTools
|
||||
}
|
||||
}
|
||||
|
||||
private fun membersStatuses(chatModel: ChatModel, memberDeliveryStatuses: List<MemberDeliveryStatus>): List<Pair<GroupMember, CIStatus>> {
|
||||
private fun membersStatuses(chatModel: ChatModel, memberDeliveryStatuses: List<MemberDeliveryStatus>): List<Triple<GroupMember, CIStatus, Boolean?>> {
|
||||
return memberDeliveryStatuses.mapNotNull { mds ->
|
||||
chatModel.getGroupMember(mds.groupMemberId)?.let { mem ->
|
||||
mem to mds.memberDeliveryStatus
|
||||
Triple(mem, mds.memberDeliveryStatus, mds.sentViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
-3
@@ -479,6 +479,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
|
||||
},
|
||||
onComposed,
|
||||
developerTools = chatModel.controller.appPrefs.developerTools.get(),
|
||||
showViaProxy = chatModel.controller.appPrefs.showSentViaProxy.get(),
|
||||
)
|
||||
}
|
||||
is ChatInfo.ContactConnection -> {
|
||||
@@ -548,6 +549,7 @@ fun ChatLayout(
|
||||
onSearchValueChanged: (String) -> Unit,
|
||||
onComposed: suspend (chatId: String) -> Unit,
|
||||
developerTools: Boolean,
|
||||
showViaProxy: Boolean
|
||||
) {
|
||||
val scope = rememberCoroutineScope()
|
||||
val attachmentDisabled = remember { derivedStateOf { composeState.value.attachmentDisabled } }
|
||||
@@ -606,7 +608,7 @@ fun ChatLayout(
|
||||
useLinkPreviews, linkMode, showMemberInfo, loadPrevMessages, deleteMessage, deleteMessages,
|
||||
receiveFile, cancelFile, joinGroup, acceptCall, acceptFeature, openDirectChat,
|
||||
updateContactStats, updateMemberStats, syncContactConnection, syncMemberConnection, findModelChat, findModelMember,
|
||||
setReaction, showItemDetails, markRead, setFloatingButton, onComposed, developerTools,
|
||||
setReaction, showItemDetails, markRead, setFloatingButton, onComposed, developerTools, showViaProxy,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -885,6 +887,7 @@ fun BoxWithConstraintsScope.ChatItemsList(
|
||||
setFloatingButton: (@Composable () -> Unit) -> Unit,
|
||||
onComposed: suspend (chatId: String) -> Unit,
|
||||
developerTools: Boolean,
|
||||
showViaProxy: Boolean
|
||||
) {
|
||||
val listState = rememberLazyListState()
|
||||
val scope = rememberCoroutineScope()
|
||||
@@ -975,7 +978,7 @@ fun BoxWithConstraintsScope.ChatItemsList(
|
||||
tryOrShowError("${cItem.id}ChatItem", error = {
|
||||
CIBrokenComposableView(if (cItem.chatDir.sent) Alignment.CenterEnd else Alignment.CenterStart)
|
||||
}) {
|
||||
ChatItemView(chat.remoteHostId, chat.chatInfo, cItem, composeState, provider, useLinkPreviews = useLinkPreviews, linkMode = linkMode, revealed = revealed, range = range, deleteMessage = deleteMessage, deleteMessages = deleteMessages, receiveFile = receiveFile, cancelFile = cancelFile, joinGroup = joinGroup, acceptCall = acceptCall, acceptFeature = acceptFeature, openDirectChat = openDirectChat, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember, scrollToItem = scrollToItem, setReaction = setReaction, showItemDetails = showItemDetails, developerTools = developerTools)
|
||||
ChatItemView(chat.remoteHostId, chat.chatInfo, cItem, composeState, provider, useLinkPreviews = useLinkPreviews, linkMode = linkMode, revealed = revealed, range = range, deleteMessage = deleteMessage, deleteMessages = deleteMessages, receiveFile = receiveFile, cancelFile = cancelFile, joinGroup = joinGroup, acceptCall = acceptCall, acceptFeature = acceptFeature, openDirectChat = openDirectChat, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember, scrollToItem = scrollToItem, setReaction = setReaction, showItemDetails = showItemDetails, developerTools = developerTools, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1003,7 +1006,8 @@ fun BoxWithConstraintsScope.ChatItemsList(
|
||||
Text(
|
||||
memberNames(member, prevMember, memCount),
|
||||
Modifier.padding(start = MEMBER_IMAGE_SIZE + 10.dp),
|
||||
style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary)
|
||||
style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary),
|
||||
maxLines = 2
|
||||
)
|
||||
}
|
||||
Row(
|
||||
@@ -1542,6 +1546,7 @@ fun PreviewChatLayout() {
|
||||
onSearchValueChanged = {},
|
||||
onComposed = {},
|
||||
developerTools = false,
|
||||
showViaProxy = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1614,6 +1619,7 @@ fun PreviewGroupChatLayout() {
|
||||
onSearchValueChanged = {},
|
||||
onComposed = {},
|
||||
developerTools = false,
|
||||
showViaProxy = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-4
@@ -408,14 +408,15 @@ fun ComposeView(
|
||||
composeState.value = composeState.value.copy(inProgress = true)
|
||||
}
|
||||
|
||||
suspend fun forwardItem(rhId: Long?, forwardedItem: ChatItem, fromChatInfo: ChatInfo): ChatItem? {
|
||||
suspend fun forwardItem(rhId: Long?, forwardedItem: ChatItem, fromChatInfo: ChatInfo, ttl: Int?): ChatItem? {
|
||||
val chatItem = controller.apiForwardChatItem(
|
||||
rh = rhId,
|
||||
toChatType = chat.chatInfo.chatType,
|
||||
toChatId = chat.chatInfo.apiId,
|
||||
fromChatType = fromChatInfo.chatType,
|
||||
fromChatId = fromChatInfo.apiId,
|
||||
itemId = forwardedItem.id
|
||||
itemId = forwardedItem.id,
|
||||
ttl = ttl
|
||||
)
|
||||
if (chatItem != null) {
|
||||
chatModel.addChatItem(rhId, chat.chatInfo, chatItem)
|
||||
@@ -490,9 +491,9 @@ fun ComposeView(
|
||||
sendMemberContactInvitation()
|
||||
sent = null
|
||||
} else if (cs.contextItem is ComposeContextItem.ForwardingItem) {
|
||||
sent = forwardItem(chat.remoteHostId, cs.contextItem.chatItem, cs.contextItem.fromChatInfo)
|
||||
sent = forwardItem(chat.remoteHostId, cs.contextItem.chatItem, cs.contextItem.fromChatInfo, ttl = ttl)
|
||||
if (cs.message.isNotEmpty()) {
|
||||
sent = send(chat, checkLinkPreview(), quoted = sent?.id, live = false, ttl = null)
|
||||
sent = send(chat, checkLinkPreview(), quoted = sent?.id, live = false, ttl = ttl)
|
||||
}
|
||||
} else if (cs.contextItem is ComposeContextItem.EditingItem) {
|
||||
val ei = cs.contextItem.chatItem
|
||||
|
||||
+2
-2
@@ -32,8 +32,8 @@ fun ContactPreferencesView(
|
||||
) {
|
||||
val contact = remember { derivedStateOf { (m.getContactChat(contactId)?.chatInfo as? ChatInfo.Direct)?.contact } }
|
||||
val ct = contact.value ?: return
|
||||
var featuresAllowed by rememberSaveable(ct, stateSaver = serializableSaver()) { mutableStateOf(contactUserPrefsToFeaturesAllowed(ct.mergedPreferences)) }
|
||||
var currentFeaturesAllowed by rememberSaveable(ct, stateSaver = serializableSaver()) { mutableStateOf(featuresAllowed) }
|
||||
var featuresAllowed by rememberSaveable(ct, user, stateSaver = serializableSaver()) { mutableStateOf(contactUserPrefsToFeaturesAllowed(ct.mergedPreferences)) }
|
||||
var currentFeaturesAllowed by rememberSaveable(ct, user, stateSaver = serializableSaver()) { mutableStateOf(featuresAllowed) }
|
||||
|
||||
fun savePrefs(afterSave: () -> Unit = {}) {
|
||||
withBGApi {
|
||||
|
||||
+1
-1
@@ -157,7 +157,7 @@ fun SendMsgView(
|
||||
fun MenuItems(): List<@Composable () -> Unit> {
|
||||
val menuItems = mutableListOf<@Composable () -> Unit>()
|
||||
|
||||
if (cs.liveMessage == null && !cs.editing && !cs.forwarding && !nextSendGrpInv || sendMsgEnabled) {
|
||||
if (cs.liveMessage == null && !cs.editing && !nextSendGrpInv || sendMsgEnabled) {
|
||||
if (
|
||||
cs.preview !is ComposePreview.VoicePreview &&
|
||||
cs.contextItem is ComposeContextItem.NoContextItem &&
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ fun CICallItemView(
|
||||
CICallStatus.Error -> {}
|
||||
}
|
||||
|
||||
CIMetaView(cItem, timedMessagesTTL, showStatus = false, showEdited = false)
|
||||
CIMetaView(cItem, timedMessagesTTL, showStatus = false, showEdited = false, showViaProxy = false)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+18
-5
@@ -1,6 +1,7 @@
|
||||
package chat.simplex.common.views.chat.item
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.combinedClickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.CornerSize
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
@@ -28,6 +29,7 @@ import java.net.URI
|
||||
fun CIFileView(
|
||||
file: CIFile?,
|
||||
edited: Boolean,
|
||||
showMenu: MutableState<Boolean>,
|
||||
receiveFile: (Long) -> Unit
|
||||
) {
|
||||
val saveFileLauncher = rememberSaveFileLauncher(ciFile = file)
|
||||
@@ -86,7 +88,7 @@ fun CIFileView(
|
||||
)
|
||||
FileProtocol.LOCAL -> {}
|
||||
}
|
||||
file.fileStatus is CIFileStatus.RcvComplete || (file.fileStatus is CIFileStatus.SndStored && file.fileProtocol == FileProtocol.LOCAL) -> {
|
||||
file.forwardingAllowed() -> {
|
||||
withLongRunningApi(slow = 600_000) {
|
||||
var filePath = getLoadedFilePath(file)
|
||||
if (chatModel.connectedToRemote() && filePath == null) {
|
||||
@@ -136,8 +138,7 @@ fun CIFileView(
|
||||
Box(
|
||||
Modifier
|
||||
.size(42.dp)
|
||||
.clip(RoundedCornerShape(4.dp))
|
||||
.clickable(onClick = { fileAction() }),
|
||||
.clip(RoundedCornerShape(4.dp)),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
if (file != null) {
|
||||
@@ -154,7 +155,13 @@ fun CIFileView(
|
||||
FileProtocol.SMP -> progressIndicator()
|
||||
FileProtocol.LOCAL -> {}
|
||||
}
|
||||
is CIFileStatus.SndComplete -> fileIcon(innerIcon = painterResource(MR.images.ic_check_filled))
|
||||
is CIFileStatus.SndComplete -> {
|
||||
if ((file.forwardingAllowed() || (chatModel.connectedToRemote() && CIFile.cachedRemoteFileRequests[file.fileSource] == true))) {
|
||||
fileIcon()
|
||||
} else {
|
||||
fileIcon(innerIcon = painterResource(MR.images.ic_check_filled))
|
||||
}
|
||||
}
|
||||
is CIFileStatus.SndCancelled -> fileIcon(innerIcon = painterResource(MR.images.ic_close))
|
||||
is CIFileStatus.SndError -> fileIcon(innerIcon = painterResource(MR.images.ic_close))
|
||||
is CIFileStatus.RcvInvitation ->
|
||||
@@ -181,7 +188,13 @@ fun CIFileView(
|
||||
}
|
||||
|
||||
Row(
|
||||
Modifier.padding(top = 4.dp, bottom = 6.dp, start = 6.dp, end = 12.dp),
|
||||
Modifier
|
||||
.combinedClickable(
|
||||
onClick = { fileAction() },
|
||||
onLongClick = { showMenu.value = true }
|
||||
)
|
||||
.padding(top = 4.dp, bottom = 6.dp, start = 6.dp, end = 12.dp),
|
||||
//Modifier.clickable(enabled = file?.fileSource != null) { if (file?.fileSource != null && getLoadedFilePath(file) != null) openFile(file.fileSource) }.padding(top = 4.dp, bottom = 6.dp, start = 6.dp, end = 12.dp),
|
||||
verticalAlignment = Alignment.Bottom,
|
||||
horizontalArrangement = Arrangement.spacedBy(2.dp)
|
||||
) {
|
||||
|
||||
+1
-1
@@ -144,7 +144,7 @@ fun CIGroupInvitationView(
|
||||
}
|
||||
}
|
||||
|
||||
CIMetaView(ci, timedMessagesTTL, showStatus = false, showEdited = false)
|
||||
CIMetaView(ci, timedMessagesTTL, showStatus = false, showEdited = false, showViaProxy = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+41
-14
@@ -2,8 +2,7 @@ package chat.simplex.common.views.chat.item
|
||||
|
||||
import androidx.compose.foundation.*
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.CircularProgressIndicator
|
||||
import androidx.compose.material.Icon
|
||||
import androidx.compose.material.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -113,21 +112,49 @@ fun CIImageView(
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ImageView(painter: Painter, onClick: () -> Unit) {
|
||||
Image(
|
||||
painter,
|
||||
contentDescription = stringResource(MR.strings.image_descr),
|
||||
// .width(DEFAULT_MAX_IMAGE_WIDTH) is a hack for image to increase IntrinsicSize of FramedItemView
|
||||
// if text is short and take all available width if text is long
|
||||
modifier = Modifier
|
||||
fun ImageView(painter: Painter, image: String, fileSource: CryptoFile?, onClick: () -> Unit) {
|
||||
// On my Android device Compose fails to display 6000x6000 px WebP image with exception:
|
||||
// IllegalStateException: Recording currently in progress - missing #endRecording() call?
|
||||
// but can display 5000px image. Using even lower value here just to feel safer.
|
||||
// It happens to WebP because it's not compressed while sending since it can be animated.
|
||||
if (painter.intrinsicSize.width <= 4320 && painter.intrinsicSize.height <= 4320) {
|
||||
Image(
|
||||
painter,
|
||||
contentDescription = stringResource(MR.strings.image_descr),
|
||||
// .width(DEFAULT_MAX_IMAGE_WIDTH) is a hack for image to increase IntrinsicSize of FramedItemView
|
||||
// if text is short and take all available width if text is long
|
||||
modifier = Modifier
|
||||
.width(if (painter.intrinsicSize.width * 0.97 <= painter.intrinsicSize.height) imageViewFullWidth() * 0.75f else DEFAULT_MAX_IMAGE_WIDTH)
|
||||
.combinedClickable(
|
||||
onLongClick = { showMenu.value = true },
|
||||
onClick = onClick
|
||||
)
|
||||
.onRightClick { showMenu.value = true },
|
||||
contentScale = ContentScale.FillWidth,
|
||||
)
|
||||
} else {
|
||||
Box(Modifier
|
||||
.width(if (painter.intrinsicSize.width * 0.97 <= painter.intrinsicSize.height) imageViewFullWidth() * 0.75f else DEFAULT_MAX_IMAGE_WIDTH)
|
||||
.combinedClickable(
|
||||
onLongClick = { showMenu.value = true },
|
||||
onClick = onClick
|
||||
onClick = {}
|
||||
)
|
||||
.onRightClick { showMenu.value = true },
|
||||
contentScale = ContentScale.FillWidth,
|
||||
)
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
imageView(base64ToBitmap(image), onClick = {
|
||||
if (fileSource != null) {
|
||||
openFile(fileSource)
|
||||
}
|
||||
})
|
||||
Icon(
|
||||
painterResource(MR.images.ic_open_in_new),
|
||||
contentDescription = stringResource(MR.strings.image_descr),
|
||||
modifier = Modifier.size(30.dp),
|
||||
tint = MaterialTheme.colors.primary,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun fileSizeValid(): Boolean {
|
||||
@@ -172,9 +199,9 @@ fun CIImageView(
|
||||
}
|
||||
}
|
||||
val loaded = res.value
|
||||
if (loaded != null) {
|
||||
if (loaded != null && file != null) {
|
||||
val (imageBitmap, data, _) = loaded
|
||||
SimpleAndAnimatedImageView(data, imageBitmap, file, imageProvider, @Composable { painter, onClick -> ImageView(painter, onClick) })
|
||||
SimpleAndAnimatedImageView(data, imageBitmap, file, imageProvider, @Composable { painter, onClick -> ImageView(painter, image, file.fileSource, onClick) })
|
||||
} else {
|
||||
imageView(base64ToBitmap(image), onClick = {
|
||||
if (file != null) {
|
||||
|
||||
+39
-14
@@ -35,7 +35,8 @@ fun CIMetaView(
|
||||
blue = minOf(metaColor.red * 1.33F, 1F))
|
||||
},
|
||||
showStatus: Boolean = true,
|
||||
showEdited: Boolean = true
|
||||
showEdited: Boolean = true,
|
||||
showViaProxy: Boolean
|
||||
) {
|
||||
Row(Modifier.padding(start = 3.dp), verticalAlignment = Alignment.CenterVertically) {
|
||||
if (chatItem.isDeletedContent) {
|
||||
@@ -53,7 +54,8 @@ fun CIMetaView(
|
||||
metaColor,
|
||||
paleMetaColor,
|
||||
showStatus = showStatus,
|
||||
showEdited = showEdited
|
||||
showEdited = showEdited,
|
||||
showViaProxy = showViaProxy
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -68,7 +70,8 @@ private fun CIMetaText(
|
||||
color: Color,
|
||||
paleColor: Color,
|
||||
showStatus: Boolean = true,
|
||||
showEdited: Boolean = true
|
||||
showEdited: Boolean = true,
|
||||
showViaProxy: Boolean
|
||||
) {
|
||||
if (showEdited && meta.itemEdited) {
|
||||
StatusIconText(painterResource(MR.images.ic_edit), color)
|
||||
@@ -82,6 +85,9 @@ private fun CIMetaText(
|
||||
}
|
||||
Spacer(Modifier.width(4.dp))
|
||||
}
|
||||
if (showViaProxy && meta.sentViaProxy == true) {
|
||||
Icon(painterResource(MR.images.ic_arrow_forward), null, Modifier.height(17.dp), tint = CurrentColors.value.colors.secondary)
|
||||
}
|
||||
if (showStatus) {
|
||||
val statusIcon = meta.statusIcon(MaterialTheme.colors.primary, color, paleColor)
|
||||
if (statusIcon != null) {
|
||||
@@ -105,7 +111,14 @@ private fun CIMetaText(
|
||||
}
|
||||
|
||||
// the conditions in this function should match CIMetaText
|
||||
fun reserveSpaceForMeta(meta: CIMeta, chatTTL: Int?, encrypted: Boolean?, showStatus: Boolean = true, showEdited: Boolean = true): String {
|
||||
fun reserveSpaceForMeta(
|
||||
meta: CIMeta,
|
||||
chatTTL: Int?,
|
||||
encrypted: Boolean?,
|
||||
showStatus: Boolean = true,
|
||||
showEdited: Boolean = true,
|
||||
showViaProxy: Boolean = false
|
||||
): String {
|
||||
val iconSpace = " "
|
||||
var res = ""
|
||||
if (showEdited && meta.itemEdited) res += iconSpace
|
||||
@@ -116,6 +129,9 @@ fun reserveSpaceForMeta(meta: CIMeta, chatTTL: Int?, encrypted: Boolean?, showSt
|
||||
res += shortTimeText(ttl)
|
||||
}
|
||||
}
|
||||
if (showViaProxy && meta.sentViaProxy == true) {
|
||||
res += iconSpace
|
||||
}
|
||||
if (showStatus && (meta.statusIcon(CurrentColors.value.colors.secondary) != null || !meta.disappearing)) {
|
||||
res += iconSpace
|
||||
}
|
||||
@@ -137,7 +153,8 @@ fun PreviewCIMetaView() {
|
||||
chatItem = ChatItem.getSampleData(
|
||||
1, CIDirection.DirectSnd(), Clock.System.now(), "hello"
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -149,7 +166,8 @@ fun PreviewCIMetaViewUnread() {
|
||||
1, CIDirection.DirectSnd(), Clock.System.now(), "hello",
|
||||
status = CIStatus.RcvNew()
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -159,9 +177,10 @@ fun PreviewCIMetaViewSendFailed() {
|
||||
CIMetaView(
|
||||
chatItem = ChatItem.getSampleData(
|
||||
1, CIDirection.DirectSnd(), Clock.System.now(), "hello",
|
||||
status = CIStatus.SndError("CMD SYNTAX")
|
||||
status = CIStatus.CISSndError(SndError.Other("CMD SYNTAX"))
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -172,7 +191,8 @@ fun PreviewCIMetaViewSendNoAuth() {
|
||||
chatItem = ChatItem.getSampleData(
|
||||
1, CIDirection.DirectSnd(), Clock.System.now(), "hello", status = CIStatus.SndErrorAuth()
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -183,7 +203,8 @@ fun PreviewCIMetaViewSendSent() {
|
||||
chatItem = ChatItem.getSampleData(
|
||||
1, CIDirection.DirectSnd(), Clock.System.now(), "hello", status = CIStatus.SndSent(SndCIStatusProgress.Complete)
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -195,7 +216,8 @@ fun PreviewCIMetaViewEdited() {
|
||||
1, CIDirection.DirectSnd(), Clock.System.now(), "hello",
|
||||
itemEdited = true
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -208,7 +230,8 @@ fun PreviewCIMetaViewEditedUnread() {
|
||||
itemEdited = true,
|
||||
status= CIStatus.RcvNew()
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -221,7 +244,8 @@ fun PreviewCIMetaViewEditedSent() {
|
||||
itemEdited = true,
|
||||
status= CIStatus.SndSent(SndCIStatusProgress.Complete)
|
||||
),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -230,6 +254,7 @@ fun PreviewCIMetaViewEditedSent() {
|
||||
fun PreviewCIMetaViewDeletedContent() {
|
||||
CIMetaView(
|
||||
chatItem = ChatItem.getDeletedContentSampleData(),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
|
||||
+2
-2
@@ -174,7 +174,7 @@ fun DecryptionErrorItemFixButton(
|
||||
)
|
||||
}
|
||||
}
|
||||
CIMetaView(ci, timedMessagesTTL = null)
|
||||
CIMetaView(ci, timedMessagesTTL = null, showViaProxy = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -202,7 +202,7 @@ fun DecryptionErrorItem(
|
||||
},
|
||||
style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp)
|
||||
)
|
||||
CIMetaView(ci, timedMessagesTTL = null)
|
||||
CIMetaView(ci, timedMessagesTTL = null, showViaProxy = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -35,6 +35,7 @@ fun CIVoiceView(
|
||||
hasText: Boolean,
|
||||
ci: ChatItem,
|
||||
timedMessagesTTL: Int?,
|
||||
showViaProxy: Boolean,
|
||||
longClick: () -> Unit,
|
||||
receiveFile: (Long) -> Unit,
|
||||
) {
|
||||
@@ -76,7 +77,7 @@ fun CIVoiceView(
|
||||
durationText(time / 1000)
|
||||
}
|
||||
}
|
||||
VoiceLayout(file, ci, text, audioPlaying, progress, duration, brokenAudio, sent, hasText, timedMessagesTTL, play, pause, longClick, receiveFile) {
|
||||
VoiceLayout(file, ci, text, audioPlaying, progress, duration, brokenAudio, sent, hasText, timedMessagesTTL, showViaProxy, play, pause, longClick, receiveFile) {
|
||||
AudioPlayer.seekTo(it, progress, fileSource.value?.filePath)
|
||||
}
|
||||
} else {
|
||||
@@ -102,6 +103,7 @@ private fun VoiceLayout(
|
||||
sent: Boolean,
|
||||
hasText: Boolean,
|
||||
timedMessagesTTL: Int?,
|
||||
showViaProxy: Boolean,
|
||||
play: () -> Unit,
|
||||
pause: () -> Unit,
|
||||
longClick: () -> Unit,
|
||||
@@ -171,7 +173,7 @@ private fun VoiceLayout(
|
||||
VoiceMsgIndicator(file, audioPlaying.value, sent, hasText, progress, duration, brokenAudio, play, pause, longClick, receiveFile)
|
||||
}
|
||||
Box(Modifier.padding(top = 6.dp, end = 6.dp)) {
|
||||
CIMetaView(ci, timedMessagesTTL)
|
||||
CIMetaView(ci, timedMessagesTTL, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -186,7 +188,7 @@ private fun VoiceLayout(
|
||||
}
|
||||
}
|
||||
Box(Modifier.padding(top = 6.dp)) {
|
||||
CIMetaView(ci, timedMessagesTTL)
|
||||
CIMetaView(ci, timedMessagesTTL, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+20
-30
@@ -68,6 +68,7 @@ fun ChatItemView(
|
||||
setReaction: (ChatInfo, ChatItem, Boolean, MsgReaction) -> Unit,
|
||||
showItemDetails: (ChatInfo, ChatItem) -> Unit,
|
||||
developerTools: Boolean,
|
||||
showViaProxy: Boolean
|
||||
) {
|
||||
val uriHandler = LocalUriHandler.current
|
||||
val sent = cItem.chatDir.sent
|
||||
@@ -83,17 +84,15 @@ fun ChatItemView(
|
||||
.fillMaxWidth(),
|
||||
contentAlignment = alignment,
|
||||
) {
|
||||
val onClick = {
|
||||
when (cItem.meta.itemStatus) {
|
||||
is CIStatus.SndErrorAuth -> {
|
||||
showMsgDeliveryErrorAlert(generalGetString(MR.strings.message_delivery_error_desc))
|
||||
}
|
||||
is CIStatus.SndError -> {
|
||||
showMsgDeliveryErrorAlert(generalGetString(MR.strings.unknown_error) + ": ${cItem.meta.itemStatus.agentError}")
|
||||
}
|
||||
else -> {}
|
||||
val info = cItem.meta.itemStatus.statusInto
|
||||
val onClick = if (info != null) {
|
||||
{
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title = info.first,
|
||||
text = info.second,
|
||||
)
|
||||
}
|
||||
}
|
||||
} else { {} }
|
||||
|
||||
@Composable
|
||||
fun ChatItemReactions() {
|
||||
@@ -130,7 +129,7 @@ fun ChatItemView(
|
||||
) {
|
||||
@Composable
|
||||
fun framedItemView() {
|
||||
FramedItemView(cInfo, cItem, uriHandler, imageProvider, linkMode = linkMode, showMenu, receiveFile, onLinkLongClick, scrollToItem)
|
||||
FramedItemView(cInfo, cItem, uriHandler, imageProvider, linkMode = linkMode, showViaProxy = showViaProxy, showMenu, receiveFile, onLinkLongClick, scrollToItem)
|
||||
}
|
||||
|
||||
fun deleteMessageQuestionText(): String {
|
||||
@@ -204,14 +203,10 @@ fun ChatItemView(
|
||||
}
|
||||
val clipboard = LocalClipboardManager.current
|
||||
val cachedRemoteReqs = remember { CIFile.cachedRemoteFileRequests }
|
||||
fun fileForwardingAllowed() = when {
|
||||
cItem.file != null && chatModel.connectedToRemote() && cachedRemoteReqs[cItem.file.fileSource] != false && cItem.file.loaded -> true
|
||||
getLoadedFilePath(cItem.file) != null -> true
|
||||
else -> false
|
||||
}
|
||||
|
||||
val copyAndShareAllowed = when {
|
||||
cItem.content.text.isNotEmpty() -> true
|
||||
fileForwardingAllowed() -> true
|
||||
cItem.file?.forwardingAllowed() == true -> true
|
||||
else -> false
|
||||
}
|
||||
|
||||
@@ -261,7 +256,7 @@ fun ChatItemView(
|
||||
})
|
||||
}
|
||||
if (cItem.meta.itemDeleted == null &&
|
||||
(cItem.file == null || fileForwardingAllowed()) &&
|
||||
(cItem.file == null || cItem.file.forwardingAllowed()) &&
|
||||
!cItem.isLiveDummy && !live
|
||||
) {
|
||||
ItemAction(stringResource(MR.strings.forward_chat_item), painterResource(MR.images.ic_forward), onClick = {
|
||||
@@ -338,14 +333,14 @@ fun ChatItemView(
|
||||
fun ContentItem() {
|
||||
val mc = cItem.content.msgContent
|
||||
if (cItem.meta.itemDeleted != null && (!revealed.value || cItem.isDeletedContent)) {
|
||||
MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, revealed)
|
||||
MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, revealed, showViaProxy = showViaProxy)
|
||||
MarkedDeletedItemDropdownMenu()
|
||||
} else {
|
||||
if (cItem.quotedItem == null && cItem.meta.itemForwarded == null && cItem.meta.itemDeleted == null && !cItem.meta.isLive) {
|
||||
if (mc is MsgContent.MCText && isShortEmoji(cItem.content.text)) {
|
||||
EmojiItemView(cItem, cInfo.timedMessagesTTL)
|
||||
EmojiItemView(cItem, cInfo.timedMessagesTTL, showViaProxy = showViaProxy)
|
||||
} else if (mc is MsgContent.MCVoice && cItem.content.text.isEmpty()) {
|
||||
CIVoiceView(mc.duration, cItem.file, cItem.meta.itemEdited, cItem.chatDir.sent, hasText = false, cItem, cInfo.timedMessagesTTL, longClick = { onLinkLongClick("") }, receiveFile)
|
||||
CIVoiceView(mc.duration, cItem.file, cItem.meta.itemEdited, cItem.chatDir.sent, hasText = false, cItem, cInfo.timedMessagesTTL, showViaProxy = showViaProxy, longClick = { onLinkLongClick("") }, receiveFile)
|
||||
} else {
|
||||
framedItemView()
|
||||
}
|
||||
@@ -357,7 +352,7 @@ fun ChatItemView(
|
||||
}
|
||||
|
||||
@Composable fun LegacyDeletedItem() {
|
||||
DeletedItemView(cItem, cInfo.timedMessagesTTL)
|
||||
DeletedItemView(cItem, cInfo.timedMessagesTTL, showViaProxy = showViaProxy)
|
||||
DefaultDropdownMenu(showMenu) {
|
||||
ItemInfoAction(cInfo, cItem, showItemDetails, showMenu)
|
||||
DeleteItemAction(cItem, revealed, showMenu, questionText = deleteMessageQuestionText(), deleteMessage, deleteMessages)
|
||||
@@ -410,7 +405,7 @@ fun ChatItemView(
|
||||
|
||||
@Composable
|
||||
fun DeletedItem() {
|
||||
MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, revealed)
|
||||
MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, revealed, showViaProxy = showViaProxy)
|
||||
DefaultDropdownMenu(showMenu) {
|
||||
ItemInfoAction(cInfo, cItem, showItemDetails, showMenu)
|
||||
DeleteItemAction(cItem, revealed, showMenu, questionText = generalGetString(MR.strings.delete_message_cannot_be_undone_warning), deleteMessage, deleteMessages)
|
||||
@@ -820,13 +815,6 @@ fun moderateMessageAlertDialog(chatItem: ChatItem, questionText: String, deleteM
|
||||
)
|
||||
}
|
||||
|
||||
private fun showMsgDeliveryErrorAlert(description: String) {
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title = generalGetString(MR.strings.message_delivery_error_title),
|
||||
text = description,
|
||||
)
|
||||
}
|
||||
|
||||
expect fun copyItemToClipboard(cItem: ChatItem, clipboard: ClipboardManager)
|
||||
|
||||
@Preview
|
||||
@@ -862,6 +850,7 @@ fun PreviewChatItemView() {
|
||||
setReaction = { _, _, _, _ -> },
|
||||
showItemDetails = { _, _ -> },
|
||||
developerTools = false,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -897,6 +886,7 @@ fun PreviewChatItemViewDeletedContent() {
|
||||
setReaction = { _, _, _, _ -> },
|
||||
showItemDetails = { _, _ -> },
|
||||
developerTools = false,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-3
@@ -16,7 +16,7 @@ import chat.simplex.common.model.ChatItem
|
||||
import chat.simplex.common.ui.theme.*
|
||||
|
||||
@Composable
|
||||
fun DeletedItemView(ci: ChatItem, timedMessagesTTL: Int?) {
|
||||
fun DeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showViaProxy: Boolean) {
|
||||
val sent = ci.chatDir.sent
|
||||
val sentColor = CurrentColors.collectAsState().value.appColors.sentMessage
|
||||
val receivedColor = CurrentColors.collectAsState().value.appColors.receivedMessage
|
||||
@@ -36,7 +36,7 @@ fun DeletedItemView(ci: ChatItem, timedMessagesTTL: Int?) {
|
||||
style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp),
|
||||
modifier = Modifier.padding(end = 8.dp)
|
||||
)
|
||||
CIMetaView(ci, timedMessagesTTL)
|
||||
CIMetaView(ci, timedMessagesTTL, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -50,7 +50,8 @@ fun PreviewDeletedItemView() {
|
||||
SimpleXTheme {
|
||||
DeletedItemView(
|
||||
ChatItem.getDeletedContentSampleData(),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -17,13 +17,13 @@ val largeEmojiFont: TextStyle = TextStyle(fontSize = 48.sp, fontFamily = EmojiFo
|
||||
val mediumEmojiFont: TextStyle = TextStyle(fontSize = 36.sp, fontFamily = EmojiFont)
|
||||
|
||||
@Composable
|
||||
fun EmojiItemView(chatItem: ChatItem, timedMessagesTTL: Int?) {
|
||||
fun EmojiItemView(chatItem: ChatItem, timedMessagesTTL: Int?, showViaProxy: Boolean) {
|
||||
Column(
|
||||
Modifier.padding(vertical = 8.dp, horizontal = 12.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
EmojiText(chatItem.content.text)
|
||||
CIMetaView(chatItem, timedMessagesTTL)
|
||||
CIMetaView(chatItem, timedMessagesTTL, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+16
-14
@@ -23,7 +23,6 @@ import chat.simplex.common.model.*
|
||||
import chat.simplex.common.platform.*
|
||||
import chat.simplex.common.ui.theme.*
|
||||
import chat.simplex.common.views.helpers.*
|
||||
import chat.simplex.common.views.chat.MEMBER_IMAGE_SIZE
|
||||
import chat.simplex.res.MR
|
||||
import kotlin.math.min
|
||||
|
||||
@@ -34,6 +33,7 @@ fun FramedItemView(
|
||||
uriHandler: UriHandler? = null,
|
||||
imageProvider: (() -> ImageGalleryProvider)? = null,
|
||||
linkMode: SimplexLinkMode,
|
||||
showViaProxy: Boolean,
|
||||
showMenu: MutableState<Boolean>,
|
||||
receiveFile: (Long) -> Unit,
|
||||
onLinkLongClick: (link: String) -> Unit = {},
|
||||
@@ -76,7 +76,8 @@ fun FramedItemView(
|
||||
) {
|
||||
Text(
|
||||
sender,
|
||||
style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary)
|
||||
style = TextStyle(fontSize = 13.5.sp, color = CurrentColors.value.colors.secondary),
|
||||
maxLines = 1
|
||||
)
|
||||
ciQuotedMsgTextView(qi, lines = 2)
|
||||
}
|
||||
@@ -178,9 +179,9 @@ fun FramedItemView(
|
||||
|
||||
@Composable
|
||||
fun ciFileView(ci: ChatItem, text: String) {
|
||||
CIFileView(ci.file, ci.meta.itemEdited, receiveFile)
|
||||
CIFileView(ci.file, ci.meta.itemEdited, showMenu, receiveFile)
|
||||
if (text != "" || ci.meta.isLive) {
|
||||
CIMarkdownText(ci, chatTTL, linkMode = linkMode, uriHandler)
|
||||
CIMarkdownText(ci, chatTTL, linkMode = linkMode, uriHandler, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,7 +245,7 @@ fun FramedItemView(
|
||||
if (mc.text == "" && !ci.meta.isLive) {
|
||||
metaColor = Color.White
|
||||
} else {
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler)
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
is MsgContent.MCVideo -> {
|
||||
@@ -252,35 +253,35 @@ fun FramedItemView(
|
||||
if (mc.text == "" && !ci.meta.isLive) {
|
||||
metaColor = Color.White
|
||||
} else {
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler)
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
is MsgContent.MCVoice -> {
|
||||
CIVoiceView(mc.duration, ci.file, ci.meta.itemEdited, ci.chatDir.sent, hasText = true, ci, timedMessagesTTL = chatTTL, longClick = { onLinkLongClick("") }, receiveFile)
|
||||
CIVoiceView(mc.duration, ci.file, ci.meta.itemEdited, ci.chatDir.sent, hasText = true, ci, timedMessagesTTL = chatTTL, showViaProxy = showViaProxy, longClick = { onLinkLongClick("") }, receiveFile)
|
||||
if (mc.text != "") {
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler)
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
is MsgContent.MCFile -> ciFileView(ci, mc.text)
|
||||
is MsgContent.MCUnknown ->
|
||||
if (ci.file == null) {
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler, onLinkLongClick)
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler, onLinkLongClick, showViaProxy = showViaProxy)
|
||||
} else {
|
||||
ciFileView(ci, mc.text)
|
||||
}
|
||||
is MsgContent.MCLink -> {
|
||||
ChatItemLinkView(mc.preview)
|
||||
Box(Modifier.widthIn(max = DEFAULT_MAX_IMAGE_WIDTH)) {
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler, onLinkLongClick)
|
||||
CIMarkdownText(ci, chatTTL, linkMode, uriHandler, onLinkLongClick, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
else -> CIMarkdownText(ci, chatTTL, linkMode, uriHandler, onLinkLongClick)
|
||||
else -> CIMarkdownText(ci, chatTTL, linkMode, uriHandler, onLinkLongClick, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Box(Modifier.padding(bottom = 6.dp, end = 12.dp)) {
|
||||
CIMetaView(ci, chatTTL, metaColor)
|
||||
CIMetaView(ci, chatTTL, metaColor, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -292,14 +293,15 @@ fun CIMarkdownText(
|
||||
chatTTL: Int?,
|
||||
linkMode: SimplexLinkMode,
|
||||
uriHandler: UriHandler?,
|
||||
onLinkLongClick: (link: String) -> Unit = {}
|
||||
onLinkLongClick: (link: String) -> Unit = {},
|
||||
showViaProxy: Boolean
|
||||
) {
|
||||
Box(Modifier.padding(vertical = 6.dp, horizontal = 12.dp)) {
|
||||
val text = if (ci.meta.isLive) ci.content.msgContent?.text ?: ci.text else ci.text
|
||||
MarkdownText(
|
||||
text, if (text.isEmpty()) emptyList() else ci.formattedText, toggleSecrets = true,
|
||||
meta = ci.meta, chatTTL = chatTTL, linkMode = linkMode,
|
||||
uriHandler = uriHandler, senderBold = true, onLinkLongClick = onLinkLongClick
|
||||
uriHandler = uriHandler, senderBold = true, onLinkLongClick = onLinkLongClick, showViaProxy = showViaProxy
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ fun CIMsgError(ci: ChatItem, timedMessagesTTL: Int?, onClick: () -> Unit) {
|
||||
style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp),
|
||||
modifier = Modifier.padding(end = 8.dp)
|
||||
)
|
||||
CIMetaView(ci, timedMessagesTTL)
|
||||
CIMetaView(ci, timedMessagesTTL, showViaProxy = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+4
-3
@@ -20,7 +20,7 @@ import dev.icerock.moko.resources.compose.stringResource
|
||||
import kotlinx.datetime.Clock
|
||||
|
||||
@Composable
|
||||
fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, revealed: MutableState<Boolean>) {
|
||||
fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, revealed: MutableState<Boolean>, showViaProxy: Boolean) {
|
||||
val sentColor = CurrentColors.collectAsState().value.appColors.sentMessage
|
||||
val receivedColor = CurrentColors.collectAsState().value.appColors.receivedMessage
|
||||
Surface(
|
||||
@@ -35,7 +35,7 @@ fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, revealed: Mutabl
|
||||
Box(Modifier.weight(1f, false)) {
|
||||
MergedMarkedDeletedText(ci, revealed)
|
||||
}
|
||||
CIMetaView(ci, timedMessagesTTL)
|
||||
CIMetaView(ci, timedMessagesTTL, showViaProxy = showViaProxy)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -112,7 +112,8 @@ fun PreviewMarkedDeletedItemView() {
|
||||
SimpleXTheme {
|
||||
DeletedItemView(
|
||||
ChatItem.getSampleData(itemDeleted = CIDeleted.Deleted(Clock.System.now())),
|
||||
null
|
||||
null,
|
||||
showViaProxy = false
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -69,7 +69,8 @@ fun MarkdownText (
|
||||
modifier: Modifier = Modifier,
|
||||
linkMode: SimplexLinkMode,
|
||||
inlineContent: Pair<AnnotatedString.Builder.() -> Unit, Map<String, InlineTextContent>>? = null,
|
||||
onLinkLongClick: (link: String) -> Unit = {}
|
||||
onLinkLongClick: (link: String) -> Unit = {},
|
||||
showViaProxy: Boolean = false
|
||||
) {
|
||||
val textLayoutDirection = remember (text) {
|
||||
if (isRtl(text.subSequence(0, kotlin.math.min(50, text.length)))) LayoutDirection.Rtl else LayoutDirection.Ltr
|
||||
@@ -77,7 +78,7 @@ fun MarkdownText (
|
||||
val reserve = if (textLayoutDirection != LocalLayoutDirection.current && meta != null) {
|
||||
"\n"
|
||||
} else if (meta != null) {
|
||||
reserveSpaceForMeta(meta, chatTTL, null) // LALAL
|
||||
reserveSpaceForMeta(meta, chatTTL, null, showViaProxy = showViaProxy)
|
||||
} else {
|
||||
" "
|
||||
}
|
||||
|
||||
+9
-7
@@ -66,6 +66,8 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) {
|
||||
hostMode = currentCfg.value.hostMode,
|
||||
requiredHostMode = currentCfg.value.requiredHostMode,
|
||||
sessionMode = currentCfg.value.sessionMode,
|
||||
smpProxyMode = currentCfg.value.smpProxyMode,
|
||||
smpProxyFallback = currentCfg.value.smpProxyFallback,
|
||||
tcpConnectTimeout = networkTCPConnectTimeout.value,
|
||||
tcpTimeout = networkTCPTimeout.value,
|
||||
tcpTimeoutPerKb = networkTCPTimeoutPerKb.value,
|
||||
@@ -159,7 +161,7 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) {
|
||||
SectionItemView {
|
||||
TimeoutSettingRow(
|
||||
stringResource(MR.strings.network_option_tcp_connection_timeout), networkTCPConnectTimeout,
|
||||
listOf(10_000000, 15_000000, 20_000000, 25_000000, 35_000000, 50_000000), secondsLabel
|
||||
listOf(10_000000, 15_000000, 20_000000, 30_000000, 45_000000, 60_000000, 90_000000), secondsLabel
|
||||
)
|
||||
}
|
||||
SectionItemView {
|
||||
@@ -175,12 +177,12 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) {
|
||||
listOf(2_500, 5_000, 10_000, 15_000, 20_000, 30_000), secondsLabel
|
||||
)
|
||||
}
|
||||
SectionItemView {
|
||||
IntSettingRow(
|
||||
stringResource(MR.strings.network_option_rcv_concurrency), networkRcvConcurrency,
|
||||
listOf(1, 2, 4, 8, 12, 16, 24), ""
|
||||
)
|
||||
}
|
||||
// SectionItemView {
|
||||
// IntSettingRow(
|
||||
// stringResource(MR.strings.network_option_rcv_concurrency), networkRcvConcurrency,
|
||||
// listOf(1, 2, 4, 8, 12, 16, 24), ""
|
||||
// )
|
||||
// }
|
||||
SectionItemView {
|
||||
TimeoutSettingRow(
|
||||
stringResource(MR.strings.network_option_ping_interval), networkSMPPingInterval,
|
||||
|
||||
+152
-1
@@ -43,6 +43,8 @@ fun NetworkAndServersView() {
|
||||
val developerTools = chatModel.controller.appPrefs.developerTools.get()
|
||||
val onionHosts = remember { mutableStateOf(netCfg.onionHosts) }
|
||||
val sessionMode = remember { mutableStateOf(netCfg.sessionMode) }
|
||||
val smpProxyMode = remember { mutableStateOf(netCfg.smpProxyMode) }
|
||||
val smpProxyFallback = remember { mutableStateOf(netCfg.smpProxyFallback) }
|
||||
|
||||
val proxyPort = remember { derivedStateOf { chatModel.controller.appPrefs.networkProxyHostPort.state.value?.split(":")?.lastOrNull()?.toIntOrNull() ?: 9050 } }
|
||||
NetworkAndServersLayout(
|
||||
@@ -51,6 +53,8 @@ fun NetworkAndServersView() {
|
||||
networkUseSocksProxy = networkUseSocksProxy,
|
||||
onionHosts = onionHosts,
|
||||
sessionMode = sessionMode,
|
||||
smpProxyMode = smpProxyMode,
|
||||
smpProxyFallback = smpProxyFallback,
|
||||
proxyPort = proxyPort,
|
||||
toggleSocksProxy = { enable ->
|
||||
if (enable) {
|
||||
@@ -137,6 +141,59 @@ fun NetworkAndServersView() {
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
updateSMPProxyMode = {
|
||||
if (smpProxyMode.value == it) return@NetworkAndServersLayout
|
||||
val prevValue = smpProxyMode.value
|
||||
smpProxyMode.value = it
|
||||
val startsWith = when (it) {
|
||||
SMPProxyMode.Always -> generalGetString(MR.strings.network_smp_proxy_mode_always_description)
|
||||
SMPProxyMode.Unknown -> generalGetString(MR.strings.network_smp_proxy_mode_unknown_description)
|
||||
SMPProxyMode.Unprotected -> generalGetString(MR.strings.network_smp_proxy_mode_unprotected_description)
|
||||
SMPProxyMode.Never -> generalGetString(MR.strings.network_smp_proxy_mode_never_description)
|
||||
}
|
||||
showUpdateNetworkSettingsDialog(
|
||||
title = generalGetString(MR.strings.update_network_smp_proxy_mode_question),
|
||||
startsWith,
|
||||
onDismiss = { smpProxyMode.value = prevValue }
|
||||
) {
|
||||
withBGApi {
|
||||
val newCfg = chatModel.controller.getNetCfg().copy(smpProxyMode = it)
|
||||
val res = chatModel.controller.apiSetNetworkConfig(newCfg)
|
||||
if (res) {
|
||||
chatModel.controller.setNetCfg(newCfg)
|
||||
smpProxyMode.value = it
|
||||
} else {
|
||||
smpProxyMode.value = prevValue
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
updateSMPProxyFallback = {
|
||||
if (smpProxyFallback.value == it) return@NetworkAndServersLayout
|
||||
val prevValue = smpProxyFallback.value
|
||||
smpProxyFallback.value = it
|
||||
val startsWith = when (it) {
|
||||
SMPProxyFallback.Allow -> generalGetString(MR.strings.network_smp_proxy_fallback_allow_description)
|
||||
SMPProxyFallback.AllowProtected -> generalGetString(MR.strings.network_smp_proxy_fallback_allow_protected_description)
|
||||
SMPProxyFallback.Prohibit -> generalGetString(MR.strings.network_smp_proxy_fallback_prohibit_description)
|
||||
}
|
||||
showUpdateNetworkSettingsDialog(
|
||||
title = generalGetString(MR.strings.update_network_smp_proxy_fallback_question),
|
||||
startsWith,
|
||||
onDismiss = { smpProxyFallback.value = prevValue }
|
||||
) {
|
||||
withBGApi {
|
||||
val newCfg = chatModel.controller.getNetCfg().copy(smpProxyFallback = it)
|
||||
val res = chatModel.controller.apiSetNetworkConfig(newCfg)
|
||||
if (res) {
|
||||
chatModel.controller.setNetCfg(newCfg)
|
||||
smpProxyFallback.value = it
|
||||
} else {
|
||||
smpProxyFallback.value = prevValue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -147,16 +204,22 @@ fun NetworkAndServersView() {
|
||||
networkUseSocksProxy: MutableState<Boolean>,
|
||||
onionHosts: MutableState<OnionHosts>,
|
||||
sessionMode: MutableState<TransportSessionMode>,
|
||||
smpProxyMode: MutableState<SMPProxyMode>,
|
||||
smpProxyFallback: MutableState<SMPProxyFallback>,
|
||||
proxyPort: State<Int>,
|
||||
toggleSocksProxy: (Boolean) -> Unit,
|
||||
useOnion: (OnionHosts) -> Unit,
|
||||
updateSessionMode: (TransportSessionMode) -> Unit,
|
||||
updateSMPProxyMode: (SMPProxyMode) -> Unit,
|
||||
updateSMPProxyFallback: (SMPProxyFallback) -> Unit,
|
||||
) {
|
||||
val m = chatModel
|
||||
ColumnWithScrollBar(
|
||||
Modifier.fillMaxWidth(),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
val showModal = { it: @Composable ModalData.() -> Unit -> ModalManager.start.showModal(content = it) }
|
||||
|
||||
AppBarTitle(stringResource(MR.strings.network_and_servers))
|
||||
if (!chatModel.desktopNoUserNoRemote) {
|
||||
SectionView(generalGetString(MR.strings.settings_section_title_messages)) {
|
||||
@@ -165,7 +228,6 @@ fun NetworkAndServersView() {
|
||||
SettingsActionItem(painterResource(MR.images.ic_dns), stringResource(MR.strings.xftp_servers), { ModalManager.start.showCustomModal { close -> ProtocolServersView(m, m.remoteHostId, ServerProtocol.XFTP, close) } })
|
||||
|
||||
if (currentRemoteHost == null) {
|
||||
val showModal = { it: @Composable ModalData.() -> Unit -> ModalManager.start.showModal(content = it) }
|
||||
UseSocksProxySwitch(networkUseSocksProxy, proxyPort, toggleSocksProxy, showModal, chatModel.controller.appPrefs.networkProxyHostPort, false)
|
||||
UseOnionHosts(onionHosts, networkUseSocksProxy, showModal, useOnion)
|
||||
if (developerTools) {
|
||||
@@ -188,6 +250,18 @@ fun NetworkAndServersView() {
|
||||
Divider(Modifier.padding(start = DEFAULT_PADDING_HALF, top = 24.dp, end = DEFAULT_PADDING_HALF, bottom = 30.dp))
|
||||
}
|
||||
|
||||
// if (currentRemoteHost == null) {
|
||||
// SectionView(generalGetString(MR.strings.settings_section_title_private_message_routing)) {
|
||||
// SMPProxyModePicker(smpProxyMode, showModal, updateSMPProxyMode)
|
||||
// SMPProxyFallbackPicker(smpProxyFallback, showModal, updateSMPProxyFallback, enabled = remember { mutableStateOf(smpProxyMode.value != SMPProxyMode.Never) })
|
||||
// SettingsPreferenceItem(painterResource(MR.images.ic_arrow_forward), stringResource(MR.strings.private_routing_show_message_status), chatModel.controller.appPrefs.showSentViaProxy)
|
||||
// }
|
||||
// SectionCustomFooter {
|
||||
// Text(stringResource(MR.strings.private_routing_explanation))
|
||||
// }
|
||||
// Divider(Modifier.padding(start = DEFAULT_PADDING_HALF, top = 32.dp, end = DEFAULT_PADDING_HALF, bottom = 30.dp))
|
||||
// }
|
||||
|
||||
SectionView(generalGetString(MR.strings.settings_section_title_calls)) {
|
||||
SettingsActionItem(painterResource(MR.images.ic_electrical_services), stringResource(MR.strings.webrtc_ice_servers), { ModalManager.start.showModal { RTCServersView(m) } })
|
||||
}
|
||||
@@ -452,6 +526,79 @@ private fun SessionModePicker(
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun SMPProxyModePicker(
|
||||
smpProxyMode: MutableState<SMPProxyMode>,
|
||||
showModal: (@Composable ModalData.() -> Unit) -> Unit,
|
||||
updateSMPProxyMode: (SMPProxyMode) -> Unit,
|
||||
) {
|
||||
val density = LocalDensity.current
|
||||
val values = remember {
|
||||
SMPProxyMode.values().map {
|
||||
when (it) {
|
||||
SMPProxyMode.Always -> ValueTitleDesc(SMPProxyMode.Always, generalGetString(MR.strings.network_smp_proxy_mode_always), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_smp_proxy_mode_always_description), density))
|
||||
SMPProxyMode.Unknown -> ValueTitleDesc(SMPProxyMode.Unknown, generalGetString(MR.strings.network_smp_proxy_mode_unknown), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_smp_proxy_mode_unknown_description), density))
|
||||
SMPProxyMode.Unprotected -> ValueTitleDesc(SMPProxyMode.Unprotected, generalGetString(MR.strings.network_smp_proxy_mode_unprotected), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_smp_proxy_mode_unprotected_description), density))
|
||||
SMPProxyMode.Never -> ValueTitleDesc(SMPProxyMode.Never, generalGetString(MR.strings.network_smp_proxy_mode_never), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_smp_proxy_mode_never_description), density))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SectionItemWithValue(
|
||||
generalGetString(MR.strings.network_smp_proxy_mode_private_routing),
|
||||
smpProxyMode,
|
||||
values,
|
||||
icon = painterResource(MR.images.ic_settings_ethernet),
|
||||
onSelected = {
|
||||
showModal {
|
||||
ColumnWithScrollBar(
|
||||
Modifier.fillMaxWidth(),
|
||||
) {
|
||||
AppBarTitle(stringResource(MR.strings.network_smp_proxy_mode_private_routing))
|
||||
SectionViewSelectable(null, smpProxyMode, values, updateSMPProxyMode)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun SMPProxyFallbackPicker(
|
||||
smpProxyFallback: MutableState<SMPProxyFallback>,
|
||||
showModal: (@Composable ModalData.() -> Unit) -> Unit,
|
||||
updateSMPProxyFallback: (SMPProxyFallback) -> Unit,
|
||||
enabled: State<Boolean>,
|
||||
) {
|
||||
val density = LocalDensity.current
|
||||
val values = remember {
|
||||
SMPProxyFallback.values().map {
|
||||
when (it) {
|
||||
SMPProxyFallback.Allow -> ValueTitleDesc(SMPProxyFallback.Allow, generalGetString(MR.strings.network_smp_proxy_fallback_allow), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_smp_proxy_fallback_allow_description), density))
|
||||
SMPProxyFallback.AllowProtected -> ValueTitleDesc(SMPProxyFallback.AllowProtected, generalGetString(MR.strings.network_smp_proxy_fallback_allow_protected), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_smp_proxy_fallback_allow_protected_description), density))
|
||||
SMPProxyFallback.Prohibit -> ValueTitleDesc(SMPProxyFallback.Prohibit, generalGetString(MR.strings.network_smp_proxy_fallback_prohibit), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_smp_proxy_fallback_prohibit_description), density))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SectionItemWithValue(
|
||||
generalGetString(MR.strings.network_smp_proxy_fallback_allow_downgrade),
|
||||
smpProxyFallback,
|
||||
values,
|
||||
icon = painterResource(MR.images.ic_arrows_left_right),
|
||||
enabled = enabled,
|
||||
onSelected = {
|
||||
showModal {
|
||||
ColumnWithScrollBar(
|
||||
Modifier.fillMaxWidth(),
|
||||
) {
|
||||
AppBarTitle(stringResource(MR.strings.network_smp_proxy_fallback_allow_downgrade))
|
||||
SectionViewSelectable(null, smpProxyFallback, values, updateSMPProxyFallback)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun NetworkSectionFooter(revert: () -> Unit, save: () -> Unit, revertDisabled: Boolean, saveDisabled: Boolean) {
|
||||
Row(
|
||||
@@ -506,8 +653,12 @@ fun PreviewNetworkAndServersLayout() {
|
||||
toggleSocksProxy = {},
|
||||
onionHosts = remember { mutableStateOf(OnionHosts.PREFER) },
|
||||
sessionMode = remember { mutableStateOf(TransportSessionMode.User) },
|
||||
smpProxyMode = remember { mutableStateOf(SMPProxyMode.Never) },
|
||||
smpProxyFallback = remember { mutableStateOf(SMPProxyFallback.Allow) },
|
||||
useOnion = {},
|
||||
updateSessionMode = {},
|
||||
updateSMPProxyMode = {},
|
||||
updateSMPProxyFallback = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1755,4 +1755,16 @@
|
||||
<string name="saved_chat_item_info_tab">حُفظت</string>
|
||||
<string name="download_file">نزّل</string>
|
||||
<string name="forward_chat_item">حوّل</string>
|
||||
<string name="audio_device_bluetooth">بلوتوث</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">سيتم تفعيله في المحادثات المباشرة!</string>
|
||||
<string name="v5_7_forward">حوّل واحفظ الرسائل</string>
|
||||
<string name="v5_7_call_sounds">أصوات أثناء المكالمة</string>
|
||||
<string name="v5_7_forward_descr">يظل مصدر الرسالة خاصًا.</string>
|
||||
<string name="v5_7_call_sounds_descr">عند اتصال بمكالمات الصوت والفيديو.</string>
|
||||
<string name="v5_7_network">إدارة الشبكة</string>
|
||||
<string name="v5_7_network_descr">اتصال شبكة أكثر موثوقية.</string>
|
||||
<string name="settings_section_title_profile_images">صور الملف الشخصي</string>
|
||||
<string name="v5_7_shape_profile_images">شكل الصور الشخصية</string>
|
||||
<string name="v5_7_new_interface_languages">واجهة المستخدم الليتوانية</string>
|
||||
<string name="v5_7_shape_profile_images_descr">مربع أو دائرة أو أي شيء بينهما.</string>
|
||||
</resources>
|
||||
@@ -255,8 +255,20 @@
|
||||
|
||||
<!-- Chat Alerts - ChatItemView.kt -->
|
||||
<string name="message_delivery_error_title">Message delivery error</string>
|
||||
<string name="message_delivery_warning_title">Message delivery warning</string>
|
||||
<string name="message_delivery_error_desc">Most likely this contact has deleted the connection with you.</string>
|
||||
|
||||
<!-- CIStatus errors -->
|
||||
<string name="ci_status_other_error">Error: %1$s</string>
|
||||
<string name="snd_error_auth">Wrong key or unknown connection - most likely this connection is deleted.</string>
|
||||
<string name="snd_error_quota">Capacity exceeded - recipient did not receive previously sent messages.</string>
|
||||
<string name="snd_error_expired">Network issues - message expired after many attempts to send it.</string>
|
||||
<string name="snd_error_relay">Destination server error: %1$s</string>
|
||||
<string name="snd_error_proxy">Forwarding server: %1$s\nError: %2$s</string>
|
||||
<string name="snd_error_proxy_relay">Forwarding server: %1$s\nDestination server error: %2$s</string>
|
||||
<string name="srv_error_host">Server address is incompatible with network settings.</string>
|
||||
<string name="srv_error_version">Server version is incompatible with network settings.</string>
|
||||
|
||||
<!-- Chat Actions - ChatItemView.kt (and general) -->
|
||||
<string name="reply_verb">Reply</string>
|
||||
<string name="share_verb">Share</string>
|
||||
@@ -710,6 +722,26 @@
|
||||
<string name="update_network_session_mode_question">Update transport isolation mode?</string>
|
||||
<string name="disable_onion_hosts_when_not_supported"><![CDATA[Set <i>Use .onion hosts</i> to No if SOCKS proxy does not support them.]]></string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Please note</b>: message and file relays are connected via SOCKS proxy. Calls and sending link previews use direct connection.]]></string>
|
||||
<string name="network_smp_proxy_mode_private_routing">Private routing</string>
|
||||
<string name="network_smp_proxy_mode_always">Always</string>
|
||||
<string name="network_smp_proxy_mode_unknown">Unknown relays</string>
|
||||
<string name="network_smp_proxy_mode_unprotected">Unprotected</string>
|
||||
<string name="network_smp_proxy_mode_never">Never</string>
|
||||
<string name="network_smp_proxy_mode_always_description">Always use private routing.</string>
|
||||
<string name="network_smp_proxy_mode_unknown_description">Use private routing with unknown servers.</string>
|
||||
<string name="network_smp_proxy_mode_unprotected_description">Use private routing with unknown servers when IP address is not protected.</string>
|
||||
<string name="network_smp_proxy_mode_never_description">Do NOT use private routing.</string>
|
||||
<string name="update_network_smp_proxy_mode_question">Message routing mode</string>
|
||||
<string name="network_smp_proxy_fallback_allow_downgrade">Allow downgrade</string>
|
||||
<string name="network_smp_proxy_fallback_allow">Yes</string>
|
||||
<string name="network_smp_proxy_fallback_allow_protected">When IP hidden</string>
|
||||
<string name="network_smp_proxy_fallback_prohibit">No</string>
|
||||
<string name="network_smp_proxy_fallback_allow_description">Send messages directly when your or destination server does not support private routing.</string>
|
||||
<string name="network_smp_proxy_fallback_allow_protected_description">Send messages directly when IP address is protected and your or destination server does not support private routing.</string>
|
||||
<string name="network_smp_proxy_fallback_prohibit_description">Do NOT send messages directly, even if your or destination server does not support private routing.</string>
|
||||
<string name="update_network_smp_proxy_fallback_question">Message routing fallback</string>
|
||||
<string name="private_routing_show_message_status">Show message status</string>
|
||||
<string name="private_routing_explanation">To protect your IP address, private routing uses your SMP servers to deliver messages.</string>
|
||||
<string name="appearance_settings">Appearance</string>
|
||||
<string name="customize_theme_title">Customize theme</string>
|
||||
<string name="theme_colors_section_title">THEME COLORS</string>
|
||||
@@ -1035,6 +1067,7 @@
|
||||
<string name="settings_section_title_themes">THEMES</string>
|
||||
<string name="settings_section_title_profile_images">Profile images</string>
|
||||
<string name="settings_section_title_messages">MESSAGES AND FILES</string>
|
||||
<string name="settings_section_title_private_message_routing">PRIVATE MESSAGE ROUTING</string>
|
||||
<string name="settings_section_title_calls">CALLS</string>
|
||||
<string name="settings_section_title_network_connection">Network connection</string>
|
||||
<string name="settings_section_title_incognito">Incognito mode</string>
|
||||
|
||||
@@ -1763,4 +1763,7 @@
|
||||
<string name="v5_7_call_sounds_descr">При свързване на аудио и видео разговори.</string>
|
||||
<string name="v5_7_network_descr">По-надеждна мрежова връзка.</string>
|
||||
<string name="v5_7_new_interface_languages">Литовски потребителски интерфейс</string>
|
||||
<string name="settings_section_title_profile_images">Профилни изображения</string>
|
||||
<string name="v5_7_shape_profile_images">Променете формата на профилните изображения</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Квадрат, кръг или нещо между тях.</string>
|
||||
</resources>
|
||||
@@ -710,7 +710,7 @@
|
||||
<string name="icon_descr_call_connecting">Spojování hovoru</string>
|
||||
<string name="icon_descr_call_ended">Skončený hovor</string>
|
||||
<string name="answer_call">Přijmout hovor</string>
|
||||
<string name="integrity_msg_skipped">%1$d přeskočená zpráva (zprávy)</string>
|
||||
<string name="integrity_msg_skipped">%1$d přeskočených zpráv</string>
|
||||
<string name="alert_text_skipped_messages_it_can_happen_when">Může se to stát, když:
|
||||
\n1. Zprávy vypršely v odesílajícím klientovi po 2 dnech nebo na serveru po 30 dnech.
|
||||
\n2. Dešifrování zprávy se nezdařilo, protože vy nebo váš kontakt jste použili starou zálohu databáze.
|
||||
@@ -839,7 +839,7 @@
|
||||
<string name="icon_descr_contact_checked">Zkontrolované kontakty</string>
|
||||
<string name="num_contacts_selected">%d kontakt(y) vybrán(y)</string>
|
||||
<string name="button_add_members">Pozvat členy</string>
|
||||
<string name="group_info_section_title_num_members">%1$s MEMBERS</string>
|
||||
<string name="group_info_section_title_num_members">%1$s ČLENŮ</string>
|
||||
<string name="group_info_member_you">vy: %1$s</string>
|
||||
<string name="button_delete_group">Smazat skupinu</string>
|
||||
<string name="delete_group_question">Smazat skupinu\?</string>
|
||||
@@ -1083,8 +1083,8 @@
|
||||
<string name="alert_text_msg_bad_hash">Hash předchozí zprávy se liší.</string>
|
||||
<string name="alert_text_msg_bad_id">ID další zprávy je nesprávné (menší nebo rovno předchozí).
|
||||
\nMůže se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitováno.</string>
|
||||
<string name="alert_text_decryption_error_n_messages_failed_to_decrypt">%1$d zprávy se nepodařilo dešifrovat.</string>
|
||||
<string name="alert_text_decryption_error_too_many_skipped">%1$d zprývy přeskočeny.</string>
|
||||
<string name="alert_text_decryption_error_n_messages_failed_to_decrypt">%1$d zpráv se nepodařilo dešifrovat.</string>
|
||||
<string name="alert_text_decryption_error_too_many_skipped">%1$d zpráv přeskočeno.</string>
|
||||
<string name="alert_text_fragment_please_report_to_developers">Nahlaste to prosím vývojářům.</string>
|
||||
<string name="alert_text_fragment_encryption_out_of_sync_old_database">Může se to stát, když vy nebo vaše připojení použijete starou zálohu databáze.</string>
|
||||
<string name="revoke_file__message">Soubor bude smazán ze serverů.</string>
|
||||
@@ -1709,4 +1709,65 @@
|
||||
<string name="migrate_to_device_title">Migrovat zde</string>
|
||||
<string name="migrate_to_device_repeat_download">Opakovat stahování</string>
|
||||
<string name="migrate_to_device_repeat_import">Opakovat import</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="settings_section_title_network_connection">Síťové připojení</string>
|
||||
<string name="prohibit_sending_simplex_links">Zákaz odesílání SimpleX odkazů</string>
|
||||
<string name="audio_device_earpiece">Sluchátka</string>
|
||||
<string name="audio_device_wired_headphones">Sluchátka</string>
|
||||
<string name="audio_device_speaker">Reproduktor</string>
|
||||
<string name="network_type_network_wifi">WiFi</string>
|
||||
<string name="v5_7_forward">Přeposlat a uložit zprávy</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Bude povoleno v přímém chatu!</string>
|
||||
<string name="v5_7_new_interface_languages">Litevské UI</string>
|
||||
<string name="v5_7_network_descr">Spolehlivější síťové připojení.</string>
|
||||
<string name="allow_to_send_simplex_links">Povolit odesílat SimpleX odkazy.</string>
|
||||
<string name="saved_description">uloženo</string>
|
||||
<string name="saved_from_description">Uloženo z %s</string>
|
||||
<string name="saved_chat_item_info_tab">Uloženo</string>
|
||||
<string name="forwarded_chat_item_info_tab">Přeposláno</string>
|
||||
<string name="saved_from_chat_item_info_title">Uloženo z</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Přeposláno z</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Příjemce nevidí, od koho zpráva je.</string>
|
||||
<string name="forward_chat_item">Přeposlat</string>
|
||||
<string name="download_file">Stáhnout</string>
|
||||
<string name="forward_message">Přeposlat zprávu…</string>
|
||||
<string name="forwarded_description">přeposláno</string>
|
||||
<string name="e2ee_info_no_pq_short">Tento chat je chráněn koncovým šifrováním.</string>
|
||||
<string name="e2ee_info_pq_short">Tento chat je chráněn kvantům odolným koncovým šifrováním.</string>
|
||||
<string name="e2ee_info_pq"><![CDATA[Zprávy, soubory a hovory jsou chráněny <b>kvantům odolným koncovým šifrováním</b> s dokonalým dopředným utajením, odpíráním a obnovou po vloupání.]]></string>
|
||||
<string name="network_type_cellular">Mobilní</string>
|
||||
<string name="network_type_no_network_connection">Žádné připojení k síti</string>
|
||||
<string name="network_type_other">Ostatní</string>
|
||||
<string name="network_type_ethernet">Kabelový ethernet</string>
|
||||
<string name="error_showing_desktop_notification">Chyba zobrazení oznámení, kontaktujte vývojáře.</string>
|
||||
<string name="files_and_media_not_allowed">Soubory a média nejsou povoleny</string>
|
||||
<string name="simplex_links_not_allowed">SimpleX odkazy jsou zakázány</string>
|
||||
<string name="voice_messages_not_allowed">Hlasové zprávy nejsou povoleny</string>
|
||||
<string name="conn_event_enabled_pq">kvantům odolné e2e šifrování</string>
|
||||
<string name="conn_event_disabled_pq">standardní koncové šifrování</string>
|
||||
<string name="feature_roles_admins">správci</string>
|
||||
<string name="feature_roles_all_members">všichni členové</string>
|
||||
<string name="feature_roles_owners">majitelé</string>
|
||||
<string name="settings_section_title_profile_images">Obrázky profilů</string>
|
||||
<string name="network_option_rcv_concurrency">Souběžné přijímání</string>
|
||||
<string name="simplex_links">SimpleX odkazy</string>
|
||||
<string name="feature_enabled_for">Povoleno pro</string>
|
||||
<string name="group_members_can_send_simplex_links">Členové skupiny mohou odesílat SimpleX odkazy.</string>
|
||||
<string name="v5_7_call_sounds">Zvuky v hovoru</string>
|
||||
<string name="v5_7_forward_descr">Zdroje zpráv zůstávají důvěrné.</string>
|
||||
<string name="v5_7_network">Správa sítě</string>
|
||||
<string name="v5_7_shape_profile_images">Tvar obrázku profilů</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Čtverec, kruh, nebo něco mezi.</string>
|
||||
<string name="v5_7_call_sounds_descr">Při spojování audio a video hovorů.</string>
|
||||
<string name="permissions_grant_in_settings">Udělit v nastavení</string>
|
||||
<string name="permissions_open_settings">Otevřít nastavení</string>
|
||||
<string name="permissions_find_in_settings_and_grant">Najděte toto oprávnění v nastavení Android a povolte ho ručně.</string>
|
||||
<string name="permissions_record_audio">Mikrofon</string>
|
||||
<string name="permissions_required">Udělit oprávnění</string>
|
||||
<string name="permissions_grant">Udělit oprávnění pro volání</string>
|
||||
<string name="v5_6_quantum_resistant_encryption">Kvantům odolné šifrování</string>
|
||||
<string name="permissions_camera">Kamera</string>
|
||||
<string name="permissions_camera_and_record_audio">Kamera a mikrofon</string>
|
||||
<string name="simplex_links_are_prohibited_in_group">SimpleX odkazy jsou v této skupině zakázány.</string>
|
||||
<string name="e2ee_info_no_pq"><![CDATA[Zprávy, soubory a hovory jsou chráněny <b>koncovým</b> šifrováním s dokonalým dopředným utajením, odmítnutím a obnovením po vloupání.]]></string>
|
||||
</resources>
|
||||
@@ -1847,4 +1847,7 @@
|
||||
<string name="v5_7_new_interface_languages">Litauische Bedienoberfläche</string>
|
||||
<string name="v5_7_network_descr">Zuverlässigere Netzwerkverbindung.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Wird in direkten Chats automatisch aktiviert!</string>
|
||||
<string name="settings_section_title_profile_images">Profil-Bilder</string>
|
||||
<string name="v5_7_shape_profile_images">Form der Profil-Bilder</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Quadratisch, kreisförmig oder irgendetwas dazwischen.</string>
|
||||
</resources>
|
||||
@@ -1767,4 +1767,7 @@
|
||||
<string name="v5_7_call_sounds_descr">Al iniciar llamadas de audio y vídeo.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">¡Será habilitado en los chats directos!</string>
|
||||
<string name="v5_7_network_descr">Conexión de red más fiable.</string>
|
||||
<string name="settings_section_title_profile_images">Imágenes del perfil</string>
|
||||
<string name="v5_7_shape_profile_images">Dar forma a las imágenes de perfil</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Cuadrada, circular o cualquier forma intermedia.</string>
|
||||
</resources>
|
||||
@@ -106,13 +106,13 @@
|
||||
<string name="contact_already_exists">مخاطب از قبل وجود دارد</string>
|
||||
<string name="invalid_connection_link">لینک اتصال نامعتبر</string>
|
||||
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">لطفا بررسی کنید که از لینک صحیح استفاده کردید یا از مخاطبتان بخواهید لینک دیگری برایتان بفرستد.</string>
|
||||
<string name="ensure_smp_server_address_are_correct_format_and_unique">مطمئن شوید قالب آدرسهای سرور SMP صحیح است، در خطهای جدا نوشته شده و تکرار نشدهاند.</string>
|
||||
<string name="ensure_smp_server_address_are_correct_format_and_unique">مطمئن شوید قالب نشانیهای سرور SMP صحیح است، در خطهای جدا نوشته شده و تکرار نشدهاند.</string>
|
||||
<string name="error_setting_network_config">خطا در بهروزرسانی پیکربندی شبکه</string>
|
||||
<string name="failed_to_parse_chat_title">عدم موفقیت در بارگیری گپ</string>
|
||||
<string name="failed_to_create_user_invalid_title">نام نمایشی نامعتبر!</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">شما یک نمایه گپ با نام نمایشی یکسان دارید، لطفا نام دیگری انتخاب کنید.</string>
|
||||
<string name="error_creating_address">خطا در ایجاد نشانی</string>
|
||||
<string name="ensure_xftp_server_address_are_correct_format_and_unique">مطمئن شوید قالب آدرسهای سرور XFTP صحیح است، در خطهای جدا نوشته شده و تکرار نشدهاند.</string>
|
||||
<string name="ensure_xftp_server_address_are_correct_format_and_unique">مطمئن شوید قالب نشانیهای سرور XFTP صحیح است، در خطهای جدا نوشته شده و تکرار نشدهاند.</string>
|
||||
<string name="error_accepting_contact_request">خطا در پذیرش درخواست مخاطب</string>
|
||||
<string name="sender_may_have_deleted_the_connection_request">فرستنده ممکن است درخواست اتصال را حذف کرده باشد.</string>
|
||||
<string name="error_deleting_note_folder">خطا در حذف یادداشتهای خصوصی</string>
|
||||
@@ -156,4 +156,530 @@
|
||||
\nممکن است دقایقی زمان ببرد.</string>
|
||||
<string name="turn_off_battery_optimization"><![CDATA[برای استفاده از آن، لطفا در دیالوگ بعدی<b>به SimpleX اجازه دهید در پسزمینه اجرا شود</b>. در غیر این صورت، اعلانها غیرفعال خواهند شد.]]></string>
|
||||
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery"><![CDATA[برای حفاظت از حریم خصوصیتان، به جای اعلانهای رانشی، برنامه یک <b>سرویس پسزمنیه SimpleX</b> دارد – سرویس، هر روز درصد معدودی از باتری را استفاده میکند.]]></string>
|
||||
<string name="saved_description">ذخیره شده</string>
|
||||
<string name="saved_from_description">ذخیره شده از %s</string>
|
||||
<string name="saved_from_chat_item_info_title">ذخیره شده از</string>
|
||||
<string name="forwarded_description">فرستاده شده</string>
|
||||
<string name="e2ee_info_no_pq"><![CDATA[پیامها، پروندهها و تماسها به وسیله <b>رمزگذاری سرتاسر</b> با محرمانگی پیشرو، مردودسازی و بازیابی ورود غیرمجاز محافظت شدهاند.]]></string>
|
||||
<string name="turning_off_service_and_periodic">بهینهسازی باتری فعال است، سرویس پسزمینه و درخواستهای متناوب برای پیامهای جدید خاموش میشوند. میتوانید آنها را از طریق تنظیمات باز فعال کنید.</string>
|
||||
<string name="periodic_notifications">اعلانهای متناوب</string>
|
||||
<string name="periodic_notifications_disabled">اعلانهای متناوب غیرفعالند!</string>
|
||||
<string name="e2ee_info_pq"><![CDATA[پیامها، پروندهها و تماسها به وسیله <b>رمزگذاری سرتاسر مقاوم در برابر کوانتوم</b> با محرمانگی پیشرو، مردودسازی و بازیابی ورود غیرمجاز محافظت شدهاند.]]></string>
|
||||
<string name="e2ee_info_no_pq_short">این گپ به وسیله رمزگذاری سرتاسر محافظت شده است.</string>
|
||||
<string name="e2ee_info_pq_short">این گپ به وسیله رمزگذاری سرتاسر مقاوم در برابر کوانتوم محافظت شده است.</string>
|
||||
<string name="disable_notifications_button">غیرفعال کردن اعلانها</string>
|
||||
<string name="system_restricted_background_desc">SimpleX نمیتواند در پسزمینه اجرا شود. فقط وقتی برنامه در حال اجراست اعلانها را دریافت خواهید کرد.</string>
|
||||
<string name="periodic_notifications_desc">برنامه پیامهای جدید را به طور متناوب دریافت میکند - درصد معدودی از باتری در روز استفاده میکند. برنامه از اعلانهای رانشی استفاده نمیکند - دادهای از دستگاه شما به سرورها فرستاده نمیشود.</string>
|
||||
<string name="turn_off_battery_optimization_button">اجازه دادن</string>
|
||||
<string name="turn_off_system_restriction_button">باز کردن تنظیمات برنامه</string>
|
||||
<string name="settings_notification_preview_mode_title">نمایش پیشنما</string>
|
||||
<string name="notifications_mode_off">وقتی برنامه باز است، اجرا میشود</string>
|
||||
<string name="notifications_mode_periodic_desc">هر ۱۰ دقیقه به مدت ۱ دقیقه پیامهای جدید را بررسی میکند</string>
|
||||
<string name="notification_preview_mode_contact_desc">فقط نمایش مخاطب</string>
|
||||
<string name="auth_open_chat_console">گشودن کنسول گپ</string>
|
||||
<string name="hide_notification">پنهان کردن</string>
|
||||
<string name="ntf_channel_messages">پیامهای SimpleX Chat</string>
|
||||
<string name="ntf_channel_calls">تماسهای SimpleX Chat</string>
|
||||
<string name="settings_notifications_mode_title">سرویس اعلان</string>
|
||||
<string name="notification_preview_mode_contact">نام مخاطب</string>
|
||||
<string name="notification_preview_mode_hidden">پنهان</string>
|
||||
<string name="notification_display_mode_hidden_desc">پنهان کردن مخاطب و پیام</string>
|
||||
<string name="notification_preview_somebody">مخاطب پنهان:</string>
|
||||
<string name="auth_open_chat_profiles">گشودن نمایههای گپ</string>
|
||||
<string name="notifications_mode_service_desc">سرویس پسزمینه همیشه در حال اجراست - اعلانها به محض موجود شدن پیامها به نمایش درمیآیند.</string>
|
||||
<string name="la_notice_title_simplex_lock">قفل SimpleX</string>
|
||||
<string name="call_service_notification_end_call">پایان تماس</string>
|
||||
<string name="settings_notification_preview_title">پیشنمایش اعلان</string>
|
||||
<string name="notifications_mode_periodic">به طور متناوب شروع میشود</string>
|
||||
<string name="notifications_mode_service">همیشه روشن</string>
|
||||
<string name="notifications_mode_off_desc">برنامه فقط وقتی در حال اجراست میتواند اعلانها را دریافت کند، هیچ سرویس پسزمینهای شروع نخواهد شد</string>
|
||||
<string name="notification_preview_mode_message">متن پیام</string>
|
||||
<string name="notification_contact_connected">متصل</string>
|
||||
<string name="notification_preview_new_message">پیام جدید</string>
|
||||
<string name="notification_preview_mode_message_desc">نمایش مخاطب و پیام</string>
|
||||
<string name="notification_new_contact_request">درخواست مخاطب جدید</string>
|
||||
<string name="auth_stop_chat">توقف گپ</string>
|
||||
<string name="auth_open_migration_to_another_device">گشودن صفحه جابهجایی</string>
|
||||
<string name="you_can_turn_on_lock">میتوانید قفل SimpleX را از طریق تنظیمات روشن کنید.</string>
|
||||
<string name="error_showing_desktop_notification">خطا در نمایش اعلان، با توسعهدهندگان تماس بگیرید.</string>
|
||||
<string name="lock_not_enabled">قفل SimpleX فعال نیست!</string>
|
||||
<string name="auth_device_authentication_is_disabled_turning_off">تصدیق دستگاه غیرفعال است. قفل SimpleX خاموش میشود.</string>
|
||||
<string name="icon_descr_sent_msg_status_sent">ارسال شده</string>
|
||||
<string name="icon_descr_context">نماد زمینه</string>
|
||||
<string name="icon_descr_cancel_image_preview">لغو پیشنمایش تصویر</string>
|
||||
<string name="icon_descr_cancel_file_preview">لغو پیشنمایش پرونده</string>
|
||||
<string name="system_restricted_background_warn"><![CDATA[برای فعال کردن اعلانها، لطفا <b>مصرف باتری برنامه</b> / <b>نامحدود</b> را در تنظیمات برنامه انتخاب کنید.]]></string>
|
||||
<string name="system_restricted_background_in_call_desc">برنامه ممکن است بعد از ۱ دقیقه در پسزمینه بسته شود.</string>
|
||||
<string name="database_initialization_error_title">مقداردهی اولیه پایگاه داده ممکن نیست</string>
|
||||
<string name="enter_passphrase_notification_title">عبارت عبور الزامی است</string>
|
||||
<string name="enter_passphrase_notification_desc">برای دریافت اعلانها، لطفا، عبارت عبور پایگاه داده را وارد کنید</string>
|
||||
<string name="database_initialization_error_desc">پایگاه داده به درستی کار نمیکند. برای آگاهی بیشتر لمس کنید</string>
|
||||
<string name="simplex_service_notification_title">سرویس SimpleX Chat</string>
|
||||
<string name="simplex_service_notification_text">در حال دریافت پیامها…</string>
|
||||
<string name="la_notice_turn_on">روشن کردن</string>
|
||||
<string name="la_auth_failed">عدم موفقیت تصدیق</string>
|
||||
<string name="auth_unlock">گشودن قفل</string>
|
||||
<string name="auth_confirm_credential">اطلاعات ورودتان را تایید کنید</string>
|
||||
<string name="reply_verb">پاسخ</string>
|
||||
<string name="edit_history">تاریخچه</string>
|
||||
<string name="received_message">پیام دریافتی</string>
|
||||
<string name="moderate_verb">حذف</string>
|
||||
<string name="expand_verb">بسط دادن</string>
|
||||
<string name="moderate_message_will_be_marked_warning">پیام برای تمام اعضا به عنوان حذف شده علامتگذاری خواهد شد.</string>
|
||||
<string name="stop_file__confirm">توقف</string>
|
||||
<string name="stop_rcv_file__message">دریافت پرونده متوقف خواهد شد.</string>
|
||||
<string name="welcome">خوش آمدید!</string>
|
||||
<string name="image_decoding_exception_title">خطا در رمزگشایی</string>
|
||||
<string name="compose_send_direct_message_to_connect">ارسال پیام مستقیم برای اتصال</string>
|
||||
<string name="loading_remote_file_desc">لطفا، تا زمانی که پرونده در حال بارگیری از موبایل متصل است، منتظر باشید.</string>
|
||||
<string name="button_delete_contact">حذف مخاطب</string>
|
||||
<string name="view_security_code">مشاهده رمز امنیتی</string>
|
||||
<string name="verify_security_code">تایید رمز امنیتی</string>
|
||||
<string name="send_disappearing_message">ارسال پیام ناپدید شونده</string>
|
||||
<string name="add_contact">لینک دعوت یکبارمصرف</string>
|
||||
<string name="create_group">ایجاد گروه محرمانه</string>
|
||||
<string name="to_share_with_your_contact">(برای اشتراکگذاری با مخاطبتان)</string>
|
||||
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">اگر لینک دعوت SimpleX Chat دریافت کردید، میتوانید آن را در مرورگر خود باز کنید:</string>
|
||||
<string name="la_lock_mode_passcode">ورود رمز عبور</string>
|
||||
<string name="la_seconds">%d ثانیه</string>
|
||||
<string name="la_current_app_passcode">رمز عبور فعلی</string>
|
||||
<string name="copy_verb">کپی</string>
|
||||
<string name="delete_message_mark_deleted_warning">پیام به عنوان حذف شده علامتگذاری خواهد شد. گیرندهها قادر خواهند بود این پیام را آشکار کنند.</string>
|
||||
<string name="icon_descr_sent_msg_status_send_failed">ارسال غیرموفق</string>
|
||||
<string name="contact_tap_to_connect">برای اتصال لمس کنید</string>
|
||||
<string name="video_decoding_exception_desc">امکان رمزگشایی ویدئو وجود ندارد. لطفا، ویدئوی دیگری را امتحان کنید یا با توسعهدهندگان تماس بگیرید.</string>
|
||||
<string name="image_descr">تصویر</string>
|
||||
<string name="file_not_found">پرونده پیدا نشد</string>
|
||||
<string name="chat_help_tap_button">لمس دکمه</string>
|
||||
<string name="create_group_button_to_create_new_group"><![CDATA[<b>ایجاد گروه</b>: برای ایجاد یک گروه جدید.]]></string>
|
||||
<string name="system_restricted_background_in_call_title">بدون تماسهای پسزمینه</string>
|
||||
<string name="system_restricted_background_in_call_warn"><![CDATA[برای برقراری تماسها در پسزمینه، لطفا <b>مصرف باتری برنامه</b> / <b>نامحدود</b> را در تنظیمات برنامه انتخاب کنید.]]></string>
|
||||
<string name="la_authenticate">تصدیق</string>
|
||||
<string name="edit_verb">ویرایش</string>
|
||||
<string name="no_info_on_delivery">بدون اطلاعات تحویل</string>
|
||||
<string name="revoke_file__action">لغو پرونده</string>
|
||||
<string name="group_connection_pending">در حال اتصال…</string>
|
||||
<string name="you_have_no_chats">شما هیچ گپی ندارید</string>
|
||||
<string name="loading_chats">بارگذاری گپها…</string>
|
||||
<string name="video_will_be_received_when_contact_completes_uploading">ویدئو وقتی دریافت خواهد شد که مخاطبتان بارگذاری آن را تکمیل کند.</string>
|
||||
<string name="maximum_supported_file_size">بیشترین اندازه پشتیبانی شده فعلی پرونده %1$s است.</string>
|
||||
<string name="error_saving_file">خطا در ذخیرهسازی پرونده</string>
|
||||
<string name="loading_remote_file_title">در حال بارگیری پرونده</string>
|
||||
<string name="delete_and_notify_contact">حذف و مخاطب را باخبر کن</string>
|
||||
<string name="icon_descr_server_status_connected">متصل</string>
|
||||
<string name="sync_connection_force_question">مذاکره مجدد رمزگذاری؟</string>
|
||||
<string name="you_need_to_allow_to_send_voice">شما نیاز دارید به مخاطبتان اجازه ارسال پیامهای صوتی دهید تا بتوانید آنها را ارسال کنید.</string>
|
||||
<string name="send_live_message">ارسال پیام زنده</string>
|
||||
<string name="disappearing_message">پیام ناپدید شونده</string>
|
||||
<string name="send_disappearing_message_custom_time">زمان سفارشی</string>
|
||||
<string name="copied">به حافظه کپی شد</string>
|
||||
<string name="add_contact_or_create_group">شروع گپ جدید</string>
|
||||
<string name="from_gallery_button">از گالری</string>
|
||||
<string name="call_service_notification_video_call">تماس تصویری</string>
|
||||
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">برای محافظت از اطلاعاتتان، قفل SimpleX را روشن کنید.
|
||||
\nاز شما خواسته خواهد شد قبل از فعال شدن این ویژگی، تصدیق را تکمیل کنید.</string>
|
||||
<string name="la_no_app_password">عدم وجود رمز عبور</string>
|
||||
<string name="la_minutes">%d دقیقه</string>
|
||||
<string name="auth_enable_simplex_lock">فعالسازی قفل SimpleX</string>
|
||||
<string name="la_enter_app_passcode">وارد کردن رمز عبور</string>
|
||||
<string name="saved_chat_item_info_tab">ذخیره شده</string>
|
||||
<string name="forwarded_chat_item_info_tab">فرستاده شده</string>
|
||||
<string name="forwarded_from_chat_item_info_title">فرستاده شده از</string>
|
||||
<string name="recipients_can_not_see_who_message_from">گیرندهها نمیتوانند ببینند این پیام از طرف چه کسی است.</string>
|
||||
<string name="reveal_verb">آشکار کردن</string>
|
||||
<string name="hide_verb">پنهان کردن</string>
|
||||
<string name="delete_messages__question">%d پیام حذف شود؟</string>
|
||||
<string name="delete_message_cannot_be_undone_warning">پیام حذف خواهد شد - این عمل قابل برگشت نیست!</string>
|
||||
<string name="moderate_message_will_be_deleted_warning">پیام برای تمام اعضا حذف خواهد شد.</string>
|
||||
<string name="for_me_only">حذف برای من</string>
|
||||
<string name="forward_chat_item">فرستادن</string>
|
||||
<string name="download_file">بارگیری</string>
|
||||
<string name="icon_descr_edited">ویرایش شده</string>
|
||||
<string name="icon_descr_sent_msg_status_unauthorized_send">ارسال غیرمجاز</string>
|
||||
<string name="icon_descr_received_msg_status_unread">خوانده نشده</string>
|
||||
<string name="personal_welcome">خوش آمدید، %1$s!</string>
|
||||
<string name="this_text_is_available_in_settings">این متن در تنظیمات دردسترس است</string>
|
||||
<string name="chat_with_developers">گپ با توسعهدهندگان</string>
|
||||
<string name="no_filtered_chats">گپ پالایش شدهای نیست</string>
|
||||
<string name="connect_with_contact_name_question">به %1$s متصل شوید؟</string>
|
||||
<string name="no_selected_chat">گپی انتخاب نشده</string>
|
||||
<string name="forward_message">فرستادن پیام…</string>
|
||||
<string name="videos_limit_title">تعداد ویدئوی بیش از اندازه!</string>
|
||||
<string name="videos_limit_desc">فقط ۱۰ ویدئو در هر زمان میتوان ارسال کرد</string>
|
||||
<string name="observer_cant_send_message_title">شما نمیتوانید پیامی بفرستید!</string>
|
||||
<string name="observer_cant_send_message_desc">لطفا با مدیر گروه تماس بگیرید.</string>
|
||||
<string name="only_owners_can_enable_files_and_media">فقط صاحبان گروه میتوانند پروندهها و رسانه را فعال کنند.</string>
|
||||
<string name="icon_descr_asked_to_receive">دریافت تصویر درخواست شده</string>
|
||||
<string name="waiting_for_image">در انتظار تصویر</string>
|
||||
<string name="image_saved">تصویر در گالری ذخیره شد</string>
|
||||
<string name="video_descr">ویدئو</string>
|
||||
<string name="video_will_be_received_when_contact_is_online">ویدئو وقتی دریافت خواهد شد که مخاطبتان آنلاین شود، لطفا صبر کنید یا بعدا بررسی کنید.</string>
|
||||
<string name="icon_descr_file">پرونده</string>
|
||||
<string name="large_file">پرونده حجیم!</string>
|
||||
<string name="waiting_for_file">در انتظار پرونده</string>
|
||||
<string name="file_will_be_received_when_contact_completes_uploading">پرونده وقتی دریافت خواهد شد که مخاطبتان بارگذاری آن را تکمیل کند.</string>
|
||||
<string name="voice_message_with_duration">پیام صوتی (%1$s)</string>
|
||||
<string name="notifications">اعلانها</string>
|
||||
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">مخاطب و تمام پیامها حذف خواهند شد - این عمل قابل برگشت نیست!</string>
|
||||
<string name="allow_voice_messages_question">پیامهای صوتی مجازند؟</string>
|
||||
<string name="voice_messages_prohibited">پیامهای صوتی ممنوع هستند!</string>
|
||||
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code"><![CDATA[💻 دسکتاپ: از برنامه رمز QR نمایش داده شده را اسکن کنید، از طریق <b>اسکن رمز QR</b>.]]></string>
|
||||
<string name="share_file">اشتراکگذاری پرونده…</string>
|
||||
<string name="images_limit_title">تعداد تصویر بیش از اندازه!</string>
|
||||
<string name="tap_to_scan">برای اسکن لمس کنید</string>
|
||||
<string name="choose_file_title">انتخاب پرونده</string>
|
||||
<string name="to_start_a_new_chat_help_header">برای شروع گپ جدید</string>
|
||||
<string name="delivery">تحویل</string>
|
||||
<string name="delete_member_message__question">پیام عضو حذف شود؟</string>
|
||||
<string name="for_everybody">برای همه</string>
|
||||
<string name="stop_snd_file__message">ارسال پرونده متوقف خواهد شد.</string>
|
||||
<string name="stop_rcv_file__title">دریافت پرونده متوقف شود؟</string>
|
||||
<string name="revoke_file__message">پرونده از سرورها حذف خواهد شد.</string>
|
||||
<string name="member_contact_send_direct_message">ارسال پیام مستقیم</string>
|
||||
<string name="share_image">اشتراکگذاری رسانه…</string>
|
||||
<string name="images_limit_desc">فقط ۱۰ تصویر در هر زمان میتوان ارسال کرد</string>
|
||||
<string name="call_service_notification_audio_call">تماس صوتی</string>
|
||||
<string name="la_please_remember_to_store_password">لطفا آن را به خاطر داشته باشید یا به طور امن ذخیره کنید - راهی برای بازیابی کلمه عبور وجود ندارد!</string>
|
||||
<string name="auth_simplex_lock_turned_on">قفل SimpleX روشن است</string>
|
||||
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">وقتی برنامه را شروع میکنید یا بعد از ۳۰ ثانیه در پسزمینه آن از سر میگیرید، نیاز به تصدیق خواهید داشت.</string>
|
||||
<string name="search_verb">جستجو</string>
|
||||
<string name="auth_disable_simplex_lock">غیرفعال کردن قفل SimpleX</string>
|
||||
<string name="share_verb">اشتراکگذاری</string>
|
||||
<string name="save_verb">ذخیره</string>
|
||||
<string name="send_disappearing_message_send">ارسال</string>
|
||||
<string name="icon_descr_cancel_live_message">لغو پیام زنده</string>
|
||||
<string name="back">بازگشت</string>
|
||||
<string name="cancel_verb">لغو</string>
|
||||
<string name="ok">موافقت</string>
|
||||
<string name="live_message">پیام زنده!</string>
|
||||
<string name="send_live_message_desc">ارسال پیام زنده - همزمان با تایپ کردن برای گیرندهها بهروز میشود</string>
|
||||
<string name="auth_log_in_using_credential">ورود با استفاده از اطلاعات ورودتان</string>
|
||||
<string name="auth_unavailable">تصدیق موجود نیست</string>
|
||||
<string name="message_delivery_error_title">خطا در تحویل پیام</string>
|
||||
<string name="info_menu">اطلاعات</string>
|
||||
<string name="sent_message">پیام ارسالی</string>
|
||||
<string name="message_delivery_error_desc">به احتمال زیاد این مخاطب اتصال با شما را حذف کرده است.</string>
|
||||
<string name="no_history">بدون تاریخچه</string>
|
||||
<string name="delete_verb">حذف</string>
|
||||
<string name="delete_message__question">پیام حذف شود؟</string>
|
||||
<string name="revoke_file__title">پرونده لغو شود؟</string>
|
||||
<string name="stop_file__action">توقف پرونده</string>
|
||||
<string name="stop_snd_file__title">ارسال پرونده متوقف شود؟</string>
|
||||
<string name="revoke_file__confirm">لغو</string>
|
||||
<string name="contact_connection_pending">در حال اتصال…</string>
|
||||
<string name="your_chats">گپها</string>
|
||||
<string name="group_preview_you_are_invited">شما به گروه دعوت شدهاید</string>
|
||||
<string name="group_preview_join_as">پیوستن به عنوان %s</string>
|
||||
<string name="search_or_paste_simplex_link">جستجو یا الصاق لینک SimpleX</string>
|
||||
<string name="tap_to_start_new_chat">برای شروع گپ جدید لمس کنید</string>
|
||||
<string name="share_message">اشتراکگذاری پیام…</string>
|
||||
<string name="icon_descr_waiting_for_image">در انتظار تصویر</string>
|
||||
<string name="voice_message_send_text">پیام صوتی…</string>
|
||||
<string name="text_field_set_contact_placeholder">تعیین نام مخاطب…</string>
|
||||
<string name="icon_descr_server_status_disconnected">قطع اتصال</string>
|
||||
<string name="icon_descr_server_status_pending">در حال انتظار</string>
|
||||
<string name="switch_receiving_address_question">نشانی دریافت تغییر کند؟</string>
|
||||
<string name="abort_switch_receiving_address_desc">تغییر نشانی لغو خواهد شد. نشانی دریافت پیشین استفاده خواهد شد.</string>
|
||||
<string name="sync_connection_force_confirm">مذاکره مجدد</string>
|
||||
<string name="only_group_owners_can_enable_voice">فقط صاحبان گروه میتوانند پیامهای صوتی را فعال کنند.</string>
|
||||
<string name="confirm_verb">تایید</string>
|
||||
<string name="reset_verb">بازنشاندن</string>
|
||||
<string name="scan_QR_code">اسکن رمز QR</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(اسکن یا الصاق از حافظه)</string>
|
||||
<string name="only_stored_on_members_devices">(تنها ذخیره شده توسط اعضای گروه)</string>
|
||||
<string name="enable_camera_access">فعال کردن دسترسی دوربین</string>
|
||||
<string name="toast_permission_denied">اجازه داده نشد!</string>
|
||||
<string name="use_camera_button">دوربین</string>
|
||||
<string name="thank_you_for_installing_simplex">سپاس برای نصب SimpleX Chat!</string>
|
||||
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app"><![CDATA[📱 موبایل: <b>گشودن در موبایل</b> را لمس کنید، سپس <b>اتصال</b> را در برنامه لمس کنید.]]></string>
|
||||
<string name="accept_connection_request__question">درخواست اتصال پذیرفته شود؟</string>
|
||||
<string name="voice_messages_not_allowed">پیامهای صوتی مجاز نیستند</string>
|
||||
<string name="simplex_links_not_allowed">لینکهای SimpleX مجاز نیستند</string>
|
||||
<string name="files_and_media_not_allowed">پروندهها و رسانه مجاز نیست</string>
|
||||
<string name="icon_descr_waiting_for_video">در انتظار ویدئو</string>
|
||||
<string name="icon_descr_video_asked_to_receive">دریافت ویدئو درخواست شده</string>
|
||||
<string name="icon_descr_video_snd_complete">ویدئو ارسال شد</string>
|
||||
<string name="image_will_be_received_when_contact_completes_uploading">تصویر وقتی دریافت خواهد شد که مخاطبتان بارگذاری آن را تکمیل کند.</string>
|
||||
<string name="voice_message">پیام صوتی</string>
|
||||
<string name="icon_descr_record_voice_message">ضبط پیام صوتی</string>
|
||||
<string name="icon_descr_send_message">ارسال پیام</string>
|
||||
<string name="no_details">بدون جزئیات</string>
|
||||
<string name="connect_via_link_or_qr">اتصال به وسیله لینک / رمز QR</string>
|
||||
<string name="camera_not_available">دوربین موجود نیست</string>
|
||||
<string name="gallery_image_button">تصویر</string>
|
||||
<string name="share_one_time_link">ایجاد لینک دعوت یکبارمصرف</string>
|
||||
<string name="you_can_connect_to_simplex_chat_founder"><![CDATA[میتوانید <font color="#0088ff">برای پرسش هر سوال و دریافت اطلاعات به توسعهدهندگان SimpleX Chat متصل شوید</font>.]]></string>
|
||||
<string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>افزودن مخاطب</b>: برای ایجاد لینک دعوت جدید، یا اتصال از طریق لینکی که دریافت کردید.]]></string>
|
||||
<string name="to_connect_via_link_title">اتصال از طریق لینک</string>
|
||||
<string name="image_will_be_received_when_contact_is_online">تصویر وقتی دریافت خواهد شد که مخاطبتان آنلاین شود، لطفا صبر کنید یا بعدا بررسی کنید!</string>
|
||||
<string name="la_lock_mode">نوع قفل SimpleX</string>
|
||||
<string name="la_lock_mode_system">تصدیق سامانه</string>
|
||||
<string name="la_change_app_passcode">تغییر رمز عبور</string>
|
||||
<string name="in_reply_to">در پاسخ به</string>
|
||||
<string name="la_immediately">فوری</string>
|
||||
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">تصدیق دستگاه فعال نیست. زمانی که تصدیق دستگاه را فعال کنید میتوانید قفل SimpleX را از طریق تنظیمات روشن کنید.</string>
|
||||
<string name="allow_verb">اجازه دادن</string>
|
||||
<string name="attach">ضمیمه</string>
|
||||
<string name="image_decoding_exception_desc">امکان رمزگشایی تصویر وجود ندارد. لطفا، تصویر دیگری را امتحان کنید یا با توسعهدهندگان تماس بگیرید.</string>
|
||||
<string name="files_and_media_prohibited">پروندهها و رسانه ممنوع است!</string>
|
||||
<string name="icon_descr_image_snd_complete">تصویر ارسال شد</string>
|
||||
<string name="waiting_for_video">در انتظار ویدئو</string>
|
||||
<string name="contact_sent_large_file">مخاطبتان پروندهای ارسال کرد که از بیشترین اندازه پشتیبانی شده (%1$s) بزرگتر است.</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">پرونده وقتی دریافت خواهد شد که مخاطبتان آنلاین شود، لطفا صبر کنید یا بعدا بررسی کنید.</string>
|
||||
<string name="file_saved">پرونده ذخیره شد</string>
|
||||
<string name="sync_connection_force_desc">رمزگذاری در حال کار است و نیازی به توافق رمزگذاری جدید نیست. ممکن است باعث بروز خطاهای اتصال شود!</string>
|
||||
<string name="ask_your_contact_to_enable_voice">لطفا از مخاطبتان بخواهید ارسال پیامهای صوتی را فعال کند.</string>
|
||||
<string name="send_verb">ارسال</string>
|
||||
<string name="gallery_video_button">ویدئو</string>
|
||||
<string name="above_then_preposition_continuation">بالا، سپس:</string>
|
||||
<string name="delete_contact_question">مخاطب حذف شود؟</string>
|
||||
<string name="icon_descr_server_status_error">خطا</string>
|
||||
<string name="switch_receiving_address_desc">آدرس دریافت به سرور متفاوتی تغییر خواهد یافت. تغییر نشانی وقتی تکمیل خواهد شد که فرستنده آنلاین شود.</string>
|
||||
<string name="la_could_not_be_verified">تایید شما ممکن نیست؛ لطفا دوباره امتحان کنید.</string>
|
||||
<string name="choose_file">پرونده</string>
|
||||
<string name="you_are_observer">شما ناظر هستید</string>
|
||||
<string name="clear_chat_question">گپ پاک شود؟</string>
|
||||
<string name="clear_note_folder_warning">تمام پیامها حذف خواهند شد - این عمل قابل برگشت نیست!</string>
|
||||
<string name="delete_contact_menu_action">حذف</string>
|
||||
<string name="accept_contact_incognito_button">پذیرش ناشناس</string>
|
||||
<string name="favorite_chat">برگزیده</string>
|
||||
<string name="accept_contact_button">پذیرفتن</string>
|
||||
<string name="reject_contact_button">رد کردن</string>
|
||||
<string name="clear_note_folder_question">یادداشتهای خصوصی پاک شود؟</string>
|
||||
<string name="clear_verb">پاک کردن</string>
|
||||
<string name="clear_chat_menu_action">پاکسازی</string>
|
||||
<string name="delete_group_menu_action">حذف</string>
|
||||
<string name="mark_unread">علامتگذاری به عنوان خوانده نشده</string>
|
||||
<string name="set_contact_name">تعیین نام مخاطب</string>
|
||||
<string name="contact_you_shared_link_with_wont_be_able_to_connect">مخاطبی که این لینک را با او به اشتراک گذاشتید قادر به اتصال نخواهد بود!</string>
|
||||
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">اگر نپذیرید، فرستنده باخبر نخواهد شد.</string>
|
||||
<string name="clear_chat_warning">تمام پیامها حذف خواهند شد - این عمل قابل برگشت نیست! پیامها فقط برای شما حذف خواهند شد.</string>
|
||||
<string name="clear_chat_button">پاکسازی گپ</string>
|
||||
<string name="you_accepted_connection">اتصال را پذیرفتید</string>
|
||||
<string name="alert_title_contact_connection_pending">مخاطب هنوز متصل نشده است!</string>
|
||||
<string name="you_invited_a_contact">شما مخاطبی را دعوت کردید</string>
|
||||
<string name="delete_pending_connection__question">اتصال در حال انتظار حذف شود؟</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">اتصالی که پذیرفتید لغو خواهد شد!</string>
|
||||
<string name="mute_chat">بیصدا</string>
|
||||
<string name="unmute_chat">لغو بیصدا</string>
|
||||
<string name="mark_read">علامتگذاری به عنوان خوانده شده</string>
|
||||
<string name="unfavorite_chat">خلع برگزیده</string>
|
||||
<string name="icon_descr_simplex_team">تیم SimpleX</string>
|
||||
<string name="new_chat">گپ جدید</string>
|
||||
<string name="how_to_use_simplex_chat">روش استفاده</string>
|
||||
<string name="markdown_help">راهنمای مارکداون</string>
|
||||
<string name="invalid_contact_link">لینک نامعتبر!</string>
|
||||
<string name="share_invitation_link">اشتراکگذاری لینک یک بار مصرف</string>
|
||||
<string name="or_scan_qr_code">یا رمز QR را اسکن کنید</string>
|
||||
<string name="retry_verb">تلاش مجدد</string>
|
||||
<string name="database_passphrase_and_export">عبارت عبور و صدور پایگاه داده</string>
|
||||
<string name="smp_servers_preset_add">افزودن سرورهای از پیش تنظیم شده</string>
|
||||
<string name="smp_servers_add_to_another_device">افزودن به دستگاه دیگر</string>
|
||||
<string name="smp_servers_delete_server">حذف سرور</string>
|
||||
<string name="how_to_use_your_servers">چگونه از سرورهای خود استفاده کنید</string>
|
||||
<string name="image_descr_link_preview">تصویر پیشنمایش لینک</string>
|
||||
<string name="your_chat_profiles">نمایههای گپ شما</string>
|
||||
<string name="smp_servers">سرورهای SMP</string>
|
||||
<string name="install_simplex_chat_for_terminal">SimpleX Chat را برای ترمینال نصب کنید</string>
|
||||
<string name="star_on_github">در GitHub ستاره بزنید</string>
|
||||
<string name="contribute">همکاری کنید</string>
|
||||
<string name="image_descr_qr_code">رمز QR</string>
|
||||
<string name="connect__a_new_random_profile_will_be_shared">یک نمایه تصادفی جدید به اشتراک گذاشته خواهد شد.</string>
|
||||
<string name="connect_via_link">اتصال از طریق لینک</string>
|
||||
<string name="one_time_link">لینک دعوت یکبارمصرف</string>
|
||||
<string name="is_verified">%s تایید شده است</string>
|
||||
<string name="create_chat_profile">ایجاد نمایه گپ</string>
|
||||
<string name="chat_console">کنسول گپ</string>
|
||||
<string name="smp_servers_test_server">آزمایش سرور</string>
|
||||
<string name="smp_servers_enter_manually">وارد کردن دستی سرور</string>
|
||||
<string name="enter_one_ICE_server_per_line">سرورهای ICE (یکی در هر خط)</string>
|
||||
<string name="error_saving_ICE_servers">خطا در ذخیره کردن سرورهای ICE</string>
|
||||
<string name="icon_descr_profile_image_placeholder">جایگزین تصویر نمایه</string>
|
||||
<string name="icon_descr_close_button">دکمه بستن</string>
|
||||
<string name="icon_descr_cancel_link_preview">لغو پیشنمایش لینک</string>
|
||||
<string name="icon_descr_settings">تنظیمات</string>
|
||||
<string name="icon_descr_help">کمک</string>
|
||||
<string name="image_descr_simplex_logo">لوگوی SimpleX</string>
|
||||
<string name="icon_descr_email">ایمیل</string>
|
||||
<string name="this_link_is_not_a_valid_connection_link">این لینک، یک لینک اتصال معتبر نیست!</string>
|
||||
<string name="connection_request_sent">درخواست اتصال ارسال شد!</string>
|
||||
<string name="you_will_be_connected_when_group_host_device_is_online">وقتی دستگاه میزبان گروه آنلاین شد، به گروه متصل خواهید شد، لطفا صبر کنید یا بعدا بررسی کنید!</string>
|
||||
<string name="paste_the_link_you_received_to_connect_with_your_contact">لینکی که دریافت کردید را الصاق کنید تا به مخاطبتان متصل شوید…</string>
|
||||
<string name="connect__your_profile_will_be_shared">نمایه شما %1$s به اشتراک گذاشته خواهد شد.</string>
|
||||
<string name="scan_qr_to_connect_to_contact">برای اتصال، مخاطبتان میتواند رمز QR را اسکن یا از لینک در برنامه استفاده کند.</string>
|
||||
<string name="if_you_cant_meet_in_person">اگر نمیتوانید ملاقات حضوری داشته باشید، رمز QR را در یک تماس تصویری نمایش دهید، یا لینک را به اشتراک بگذارید.</string>
|
||||
<string name="you_can_share_your_address">میتوانید نشانی خود را به صورت لینک یا رمز QR به اشتراک بگذارید - هر کسی میتواند به شما متصل شود.</string>
|
||||
<string name="you_can_accept_or_reject_connection">وقتی اشخاص درخواست اتصال کنند، شما میتوانید آن را بپذیرید یا رد کنید.</string>
|
||||
<string name="or_show_this_qr_code">یا این رمز را نشان دهید</string>
|
||||
<string name="you_can_view_invitation_link_again">میتوانید دوباره لینک دعوت را در جزئیات اتصال مشاهده کنید.</string>
|
||||
<string name="keep_invitation_link">نگهداشتن</string>
|
||||
<string name="creating_link">در حال ایجاد لینک…</string>
|
||||
<string name="paste_the_link_you_received">لینکی که دریافت کردید را الصاق کنید</string>
|
||||
<string name="the_text_you_pasted_is_not_a_link">متن الصاقی شما یک لینک SimpleX نیست.</string>
|
||||
<string name="smp_servers_your_server">سرور شما</string>
|
||||
<string name="smp_servers_preset_server">سرور از پیش تنظیم شده</string>
|
||||
<string name="smp_servers_invalid_address">نشانی سرور نامعتبر!</string>
|
||||
<string name="smp_servers_use_server_for_new_conn">بهکارگیری برای اتصالهای جدید</string>
|
||||
<string name="invalid_qr_code">رمز QR نامعتبر</string>
|
||||
<string name="incorrect_code">رمز امنیتی نادرست!</string>
|
||||
<string name="scan_code_from_contacts_app">رمز امنیتی را از برنامه مخاطبتان اسکن کنید.</string>
|
||||
<string name="mark_code_verified">علامتگذاری به عنوان تایید شده</string>
|
||||
<string name="is_not_verified">%s تایید نشده است</string>
|
||||
<string name="to_verify_compare">برای تایید رمزگذاری سرتاسر، روی دستگاههای خود، کد را با مخاطبتان مقایسه(یا اسکن) کنید.</string>
|
||||
<string name="your_XFTP_servers">سرورهای XFTP شما</string>
|
||||
<string name="how_to">چگونه</string>
|
||||
<string name="using_simplex_chat_servers">در حال استفاده از سرورهای SimpleX Chat.</string>
|
||||
<string name="configure_ICE_servers">تنظیم سرورهای ICE</string>
|
||||
<string name="contact_wants_to_connect_with_you">میخواهد به شما متصل شود!</string>
|
||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">وقتی دستگاه مخاطبتان آنلاین شد، متصل خواهید شد، لطفا صبر کنید یا بعدا بررسی کنید!</string>
|
||||
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link"><![CDATA[اگر نمیتوانید ملاقات حضوری داشته باشید، <b>رمز QR را در تماس تصویری اسکن کنید</b>، یا مخاطبتان میتواند یک لینک دعوت به اشتراک بگذارد.]]></string>
|
||||
<string name="keep_unused_invitation_question">دعوت استعمال نشده نگه داشته شود؟</string>
|
||||
<string name="your_simplex_contact_address">نشانی SimpleX شما</string>
|
||||
<string name="markdown_in_messages">مارکداون در پیامها</string>
|
||||
<string name="chat_with_the_founder">ایدهها و سوالات را ارسال کنید</string>
|
||||
<string name="send_us_an_email">به ما ایمیل بفرستید</string>
|
||||
<string name="chat_lock">قفل SimpleX</string>
|
||||
<string name="smp_servers_add">افزودن سرور…</string>
|
||||
<string name="smp_servers_test_servers">آزمایش سرورها</string>
|
||||
<string name="smp_servers_save">ذخیره سرورها</string>
|
||||
<string name="smp_servers_test_failed">عدم موفقیت آزمایش سرور!</string>
|
||||
<string name="smp_servers_test_some_failed">عدم موفقیت آزمایش چند سرور:</string>
|
||||
<string name="smp_servers_scan_qr">اسکن رمز QR سرور</string>
|
||||
<string name="your_SMP_servers">سرورهای SMP شما</string>
|
||||
<string name="xftp_servers">سرورهای XFTP</string>
|
||||
<string name="use_simplex_chat_servers__question">از سرورهای SimpleX Chat استفاده شود؟</string>
|
||||
<string name="saved_ICE_servers_will_be_removed">سرورهای WebRTC ICE ذخیره شده حذف خواهند شد.</string>
|
||||
<string name="your_ICE_servers">سرورهای ICE شما</string>
|
||||
<string name="connect_button">اتصال</string>
|
||||
<string name="paste_button">الصاق</string>
|
||||
<string name="you_can_also_connect_by_clicking_the_link"><![CDATA[شما همچنین میتوانید با کلیک روی لینک متصل شوید. اگر در مرورگر باز شد، روی دکمه <b>گشودن در برنامه موبایل</b> کلیک کنید.]]></string>
|
||||
<string name="add_contact_tab">افزودن مخاطب</string>
|
||||
<string name="simplex_address">نشانی SimpleX</string>
|
||||
<string name="clear_verification">پاکسازی تایید</string>
|
||||
<string name="smp_servers_preset_address">نشانی سرور از پیش تنظیم شده</string>
|
||||
<string name="security_code">رمز امنیتی</string>
|
||||
<string name="smp_servers_use_server">بهکارگیری از سرور</string>
|
||||
<string name="smp_servers_per_user">سرورها برای اتصالهای جدید نمایه گپ فعلی شما</string>
|
||||
<string name="smp_save_servers_question">سرورها ذخیره شوند؟</string>
|
||||
<string name="rate_the_app">به برنامه امتیاز بدهید</string>
|
||||
<string name="smp_servers_your_server_address">نشانی سرور شما</string>
|
||||
<string name="smp_servers_check_address">نشانی سرور را بررسی و دوباره امتحان کنید.</string>
|
||||
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">لازم است مخاطبتان آنلاین باشد تا اتصال کامل شود.
|
||||
\nمیتوانید این اتصال را لغو و مخاطب را حذف کنید (و بعدا با یک لینک جدید امتحان کنید).</string>
|
||||
<string name="icon_descr_address">نشانی SimpleX</string>
|
||||
<string name="this_QR_code_is_not_a_link">این رمز QR یک لینک نیست!</string>
|
||||
<string name="read_more_in_user_guide_with_link"><![CDATA[مطالعه بیشتر در <font color="#0088ff">راهنمای کاربر</font>.]]></string>
|
||||
<string name="this_string_is_not_a_connection_link">این رشته متن، یک لینک اتصال نیست!</string>
|
||||
<string name="code_you_scanned_is_not_simplex_link_qr_code">رمزی که اسکن کردید یک رمز QR لینک SimpleX نیست.</string>
|
||||
<string name="scan_code">اسکن رمز</string>
|
||||
<string name="image_descr_profile_image">تصویر نمایه</string>
|
||||
<string name="icon_descr_more_button">بیشتر</string>
|
||||
<string name="show_QR_code">نمایش رمز QR</string>
|
||||
<string name="invalid_QR_code">رمز QR نامعتبر</string>
|
||||
<string name="you_will_be_connected_when_your_connection_request_is_accepted">وقتی درخواست اتصال شما پذیرفته شد، متصل خواهید شد، لطفا صبر کنید یا بعدا بررسی کنید!</string>
|
||||
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel"><![CDATA[اگر نمیتوانید ملاقات حضوری داشته باشید، <b>رمز QR را در تماس تصویری نمایش دهید</b>، یا لینک را به اشتراک بگذارید.]]></string>
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">نمایه گپ شما ارسال خواهد شد
|
||||
\nبه مخاطبتان</string>
|
||||
<string name="learn_more">اطلاعات بیشتر</string>
|
||||
<string name="you_wont_lose_your_contacts_if_delete_address">اگر بعدا نشانی خود را حذف کنید، مخاطبان خود را از دست نخواهید داد.</string>
|
||||
<string name="share_this_1_time_link">این لینک دعوت یکبارمصرف را به اشتراک بگذارید</string>
|
||||
<string name="tap_to_paste_link">برای الصاق لینک لمس کنید</string>
|
||||
<string name="your_settings">تنظیمات شما</string>
|
||||
<string name="network_use_onion_hosts_required_desc">میزبانهای Onion برای اتصال الزامی خواهد بود.
|
||||
\nلطفا توجه داشته باشید: شما بدون نشانی onion. قادر نخواهید بود به سرورها متصل شوید.</string>
|
||||
<string name="save_servers_button">ذخیره</string>
|
||||
<string name="update_onion_hosts_settings_question">تنظیمات میزبانهای onion. به روز شود؟</string>
|
||||
<string name="port_verb">پورت</string>
|
||||
<string name="network_enable_socks">از پروکسی SOCKS استفاده شود؟</string>
|
||||
<string name="network_disable_socks">از اتصال مستقیم اینترنت استفاده شود؟</string>
|
||||
<string name="network_settings">تنظیمات پیشرفته شبکه</string>
|
||||
<string name="network_socks_proxy_settings">تنظیمات پروکسی SOCKS</string>
|
||||
<string name="host_verb">هاست</string>
|
||||
<string name="network_use_onion_hosts_required">الزامی</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">از میزبانهای Onion وقتی موجود باشند استفاده خواهد شد.</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">از میزبانهای Onion وقتی موجود باشند استفاده خواهد شد.</string>
|
||||
<string name="appearance_settings">ظاهر</string>
|
||||
<string name="app_version_name">نسخه برنامه: v%s</string>
|
||||
<string name="show_developer_options">نمایش گزینههای توسعهدهنده</string>
|
||||
<string name="developer_options">شناسههای پایگاه داده و گزینه انزوای ترابری</string>
|
||||
<string name="your_contacts_will_remain_connected">مخاطبانتان متصل باقی خواهند ماند.</string>
|
||||
<string name="share_link">اشتراکگذاری لینک</string>
|
||||
<string name="network_enable_socks_info">دسترسی به سرورها از طریق پروکسی SOCKS روی پورت %d؟ پروکسی باید قبل از فعال کردن این گزینه، راه اندازی شده باشد.</string>
|
||||
<string name="network_session_mode_user_description"><![CDATA[یک اتصال جدای TCP (و اطلاعات ورود SOCKS) <b>برای هر نمایه گپی که در برنامه دارید</b> استفاده خواهد شد.]]></string>
|
||||
<string name="show_internal_errors">نمایش خطاهای داخلی</string>
|
||||
<string name="show_slow_api_calls">نمایش تماسهای کند API</string>
|
||||
<string name="network_use_onion_hosts_no_desc_in_alert">از میزبانهای Onion استفاده نخواهد شد.</string>
|
||||
<string name="network_use_onion_hosts_no">خیر</string>
|
||||
<string name="disable_onion_hosts_when_not_supported"><![CDATA[<i>استفاده از میزبانهای onion.</i> را روی «خیر» تنظیم کنید اگر پروکسی SOCKS از آنها پشتیبانی نمیکند.]]></string>
|
||||
<string name="customize_theme_title">سفارشی کردن تم</string>
|
||||
<string name="app_version_title">نسخه برنامه</string>
|
||||
<string name="theme_colors_section_title">رنگهای تم</string>
|
||||
<string name="core_version">نسخه هسته: v%s</string>
|
||||
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
|
||||
<string name="shutdown_alert_desc">اعلانها از کار خواهند افتاد تا زمانی که برنامه را دوباره راهاندازی کنید</string>
|
||||
<string name="create_address">ایجاد نشانی</string>
|
||||
<string name="delete_address__question">نشانی حذف شود؟</string>
|
||||
<string name="network_and_servers">شبکه و سرورها</string>
|
||||
<string name="network_socks_toggle_use_socks_proxy">استفاده از پروکسی SOCKS</string>
|
||||
<string name="network_proxy_port">پورت %d</string>
|
||||
<string name="network_use_onion_hosts">استفاده از میزبانهای onion.</string>
|
||||
<string name="network_use_onion_hosts_prefer">وقتی موجود بود</string>
|
||||
<string name="network_use_onion_hosts_no_desc">از میزبانهای Onion استفاده نخواهد شد.</string>
|
||||
<string name="network_session_mode_transport_isolation">انزوای ترابری</string>
|
||||
<string name="network_session_mode_user">نمایه گپ</string>
|
||||
<string name="network_session_mode_entity">اتصال</string>
|
||||
<string name="app_version_code">ساختار برنامه: %s</string>
|
||||
<string name="network_settings_title">تنظیمات شبکه</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">میزبانهای Onion برای اتصال الزامی خواهد بود.</string>
|
||||
<string name="show_dev_options">نمایش:</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>لطفا توجه داشته باشید</b>: واسطههای پیام و پرونده از طریق پروکسی SOCKS متصل میشوند. تماسها و ارسال پیشنمایشهای لینک از اتصال مستقیم استفاده میکنند.]]></string>
|
||||
<string name="developer_options_section">گزینههای توسعهدهنده</string>
|
||||
<string name="hide_dev_options">پنهان کردن:</string>
|
||||
<string name="shutdown_alert_question">بسته شود؟</string>
|
||||
<string name="all_your_contacts_will_remain_connected">تمام مخاطبانتان متصل باقی خواهند ماند.</string>
|
||||
<string name="all_your_contacts_will_remain_connected_update_sent">تمام مخاطبانتان متصل باقی خواهند ماند. بهروزرسانی نمایه به مخاطبانتان ارسال خواهد شد.</string>
|
||||
<string name="network_disable_socks_info">اگر تایید کنید، سرورهای پیامرسانی خواهند توانست نشانی IP، و فراهمکننده شما را ببینند - و این که به چه سرورهایی متصل میشوید.</string>
|
||||
<string name="ensure_ICE_server_address_are_correct_format_and_unique">مطمئن شوید قالب نشانیهای سرور WebRTC ICE صحیح است، در خطهای جدا نوشته شده و تکرار نشدهاند.</string>
|
||||
<string name="network_session_mode_entity_description">یک اتصال جدای TCP (و اطلاعات ورود SOCKS) <b>برای هر مخاطب و عضو گروه</b> استفاده خواهد شد.
|
||||
\n<b>لطفا توجه داشته باشید</b>: اگر اتصالهای زیادی داشته باشید، مصرف باتری و ترافیک شما میتواند به شکل قابل توجه بالاتر باشد و بعضی اتصالها ممکن است با موفقیت انجام نشوند.</string>
|
||||
<string name="update_network_session_mode_question">حالت انزوای ترابری به روز شود؟</string>
|
||||
<string name="edit_image">ویرایش تصویر</string>
|
||||
<string name="create_simplex_address">ایجاد نشانی SimpleX</string>
|
||||
<string name="share_with_contacts">اشتراکگذاری با مخاطبان</string>
|
||||
<string name="profile_update_will_be_sent_to_contacts">بهروزرسانی نمایه به مخاطبانتان ارسال خواهد شد.</string>
|
||||
<string name="auto_accept_contact">پذیرفتن خودکار</string>
|
||||
<string name="enter_welcome_message_optional">ورود پیام خوشامدگویی…(اختیاری)</string>
|
||||
<string name="save_settings_question">تنظیمات ذخیره شوند؟</string>
|
||||
<string name="save_auto_accept_settings">ذخیره تنظیمات پذیرفتن خودکار</string>
|
||||
<string name="delete_address">حذف نشانی</string>
|
||||
<string name="email_invite_body">سلام!
|
||||
\nبه وسیله SimpleX Chat به من متصل شوید: %s</string>
|
||||
<string name="dont_create_address">نشانی ایجاد نشود</string>
|
||||
<string name="continue_to_next_step">ادامه</string>
|
||||
<string name="your_current_profile">نمایه فعلی شما</string>
|
||||
<string name="full_name__field">نام کامل:</string>
|
||||
<string name="save_and_notify_contacts">ذخیره و مخاطبان مطلع شوند</string>
|
||||
<string name="email_invite_subject">بیایید در SimpleX Chat گفتگو کنیم</string>
|
||||
<string name="save_preferences_question">تنظیمات ذخیره شوند؟</string>
|
||||
<string name="hide_profile">پنهان کردن نمایه</string>
|
||||
<string name="password_to_show">کلمه عبور برای نمایش</string>
|
||||
<string name="save_profile_password">ذخیره کلمه عبور نمایه</string>
|
||||
<string name="stop_sharing_address">اشتراکگذاری نشانی متوقف شود؟</string>
|
||||
<string name="stop_sharing">توقف اشتراکگذاری</string>
|
||||
<string name="you_can_create_it_later">میتوانید بعدا آن را ایجاد کنید</string>
|
||||
<string name="you_can_make_address_visible_via_settings">میتوانید آن را از طریق تنظیمات برای مخاطبان SimpleX خود قابل رویت کنید.</string>
|
||||
<string name="display_name__field">نام نمایه:</string>
|
||||
<string name="delete_image">حذف تصویر</string>
|
||||
<string name="save_and_notify_group_members">ذخیره و اعضای گروه مطلع شوند</string>
|
||||
<string name="save_and_notify_contact">ذخیره و مخاطب مطلع شود</string>
|
||||
<string name="exit_without_saving">خروج بدون ذخیره کردن</string>
|
||||
<string name="to_reveal_profile_enter_password">برای آشکار کردن نمایه پنهان خود، یک کلمه عبور کامل در فیلد جستجو در صفحه نمایههای گپتان وارد کنید.</string>
|
||||
<string name="invite_friends">دعوت از دوستان</string>
|
||||
<string name="confirm_password">تایید کلمه عبور</string>
|
||||
<string name="hidden_profile_password">کلمه عبور نمایه پنهان</string>
|
||||
<string name="add_address_to_your_profile">به نمایه خود نشانی اضافه کنید، تا مخاطبانتان بتوانند آن را با اشخاص دیگر به اشتراک بگذارند. بهروزرسانی نمایه به مخاطبانتان ارسال خواهد شد.</string>
|
||||
<string name="share_address_with_contacts_question">نشانی با مخاطبان به اشتراک گذاشته شود؟</string>
|
||||
<string name="create_address_and_let_people_connect">یک نشانی ایجاد کنید تا اشخاص بتوانند به شما متصل شوند.</string>
|
||||
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">نمایه شما روی دستگاهتان ذخیره شده و فقط با مخاطبانتان به اشتراک گذاشته میشود. سرورهای SimpleX قادر به دیدن نمایه شما نیستند.</string>
|
||||
<string name="error_saving_user_password">خطا در ذخیره کردن کلمه عبور کاربر</string>
|
||||
</resources>
|
||||
@@ -1743,4 +1743,30 @@
|
||||
<string name="network_type_ethernet">Ethernet câblé</string>
|
||||
<string name="simplex_links">Liens SimpleX</string>
|
||||
<string name="network_type_other">Autres</string>
|
||||
<string name="v5_7_network_descr">Connexion réseau plus fiable.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Activé dans les discussions directes !</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="audio_device_earpiece">Écouteurs</string>
|
||||
<string name="audio_device_speaker">Haut-parleur</string>
|
||||
<string name="audio_device_wired_headphones">Casque audio</string>
|
||||
<string name="v5_7_forward_descr">La source du message reste privée.</string>
|
||||
<string name="saved_description">enregistré</string>
|
||||
<string name="saved_from_description">enregistré depuis %s</string>
|
||||
<string name="forwarded_chat_item_info_tab">Transféré</string>
|
||||
<string name="forwarded_from_chat_item_info_title">Transféré depuis</string>
|
||||
<string name="recipients_can_not_see_who_message_from">Le(s) destinataire(s) ne peut(vent) pas voir de qui provient ce message.</string>
|
||||
<string name="saved_from_chat_item_info_title">Enregistré depuis</string>
|
||||
<string name="saved_chat_item_info_tab">Enregistré</string>
|
||||
<string name="download_file">Télécharger</string>
|
||||
<string name="forward_chat_item">Transférer</string>
|
||||
<string name="forward_message">Transfert du message…</string>
|
||||
<string name="settings_section_title_profile_images">Images de profil</string>
|
||||
<string name="network_option_rcv_concurrency">Réception simultanée</string>
|
||||
<string name="v5_7_forward">Transférer et sauvegarder des messages</string>
|
||||
<string name="v5_7_call_sounds">Sons d\'appel</string>
|
||||
<string name="v5_7_network">Gestion du réseau</string>
|
||||
<string name="v5_7_shape_profile_images">Images de profil modelable</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Carré, circulaire, ou toute autre forme intermédiaire.</string>
|
||||
<string name="v5_7_call_sounds_descr">Lors des appels audio et vidéo.</string>
|
||||
<string name="v5_7_new_interface_languages">Interface utilisateur en lituanien</string>
|
||||
</resources>
|
||||
@@ -40,7 +40,7 @@
|
||||
<string name="calls_prohibited_with_this_contact">A hang- és videóhívások le vannak tiltva.</string>
|
||||
<string name="network_session_mode_entity_description">Külön TCP kapcsolat (és SOCKS bejelentkezési adatok) lesz használva <b>minden ismerős és csoporttag számára</b>.
|
||||
\n<b>Figyelem</b>: ha sok ismerőse van, az akkumulátor- és adathasználat jelentősen megnövekedhet és néhány kapcsolódási kísérlet sikertelen lehet.</string>
|
||||
<string name="icon_descr_cancel_link_preview">hivatkozás előnézet megszakítása</string>
|
||||
<string name="icon_descr_cancel_link_preview">hivatkozás előnézet visszavonása</string>
|
||||
<string name="network_session_mode_user_description"><![CDATA[Külön TCP kapcsolat (és SOCKS bejelentkezési adatok) lesz használva <b>az alkalmazásban minden csevegési profiljához </b>.]]></string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">Mindkét fél küldhet eltűnő üzeneteket.</string>
|
||||
<string name="keychain_is_storing_securely">Az Android Keystore-t a jelmondat biztonságos tárolására használják - lehetővé teszi az értesítési szolgáltatás működését.</string>
|
||||
@@ -98,12 +98,12 @@
|
||||
<string name="color_secondary_variant">További másodlagos</string>
|
||||
<string name="smp_servers_add_to_another_device">Hozzáadás egy másik eszközhöz</string>
|
||||
<string name="allow_message_reactions">Az üzenetreakciók küldése engedélyezve van.</string>
|
||||
<string name="icon_descr_cancel_file_preview">Fájl előnézet megszakítása</string>
|
||||
<string name="icon_descr_cancel_file_preview">Fájl előnézet visszavonása</string>
|
||||
<string name="all_group_members_will_remain_connected">Minden csoporttag kapcsolatban marad.</string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Több akkumulátort használ</b>! Háttérszolgáltatás mindig fut - az értesítések megjelennek, amint az üzenetek elérhetővé válnak.]]></string>
|
||||
<string name="block_member_confirmation">Letiltás</string>
|
||||
<string name="group_member_role_admin">admin</string>
|
||||
<string name="icon_descr_cancel_image_preview">Fénykép előnézet megszakítása</string>
|
||||
<string name="icon_descr_cancel_image_preview">Fénykép előnézet visszavonása</string>
|
||||
<string name="v5_1_self_destruct_passcode_descr">A jelkód megadása után minden adat törlésre kerül.</string>
|
||||
<string name="icon_descr_video_asked_to_receive">Felkérték a videó fogadására</string>
|
||||
<string name="block_member_button">Tag letiltása</string>
|
||||
@@ -120,8 +120,8 @@
|
||||
<string name="chat_preferences_always">mindig</string>
|
||||
<string name="call_already_ended">A hívás már befejeződött!</string>
|
||||
<string name="turn_off_battery_optimization_button">Engedélyezés</string>
|
||||
<string name="all_your_contacts_will_remain_connected">Minden ismerős csatlakoztatva marad.</string>
|
||||
<string name="icon_descr_cancel_live_message">Élő csevegési üzenet megszakítása</string>
|
||||
<string name="all_your_contacts_will_remain_connected">Minden ismerősével kapcsolatban marad.</string>
|
||||
<string name="icon_descr_cancel_live_message">Élő csevegési üzenet visszavonása</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">Üzenet végleges törlésének engedélyezése kizárólag abban az esetben, ha az ismerőse is engedélyezi. (24 óra)</string>
|
||||
<string name="v4_6_audio_video_calls">Hang- és videóhívások</string>
|
||||
<string name="integrity_msg_bad_hash">téves üzenet hash</string>
|
||||
@@ -136,7 +136,7 @@
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b>Jó akkumulátoridő</b>. A háttérszolgáltatás 10 percenként ellenőrzi az új üzeneteket. Előfordulhat, hogy hívásokról, vagy a sürgős üzenetekről marad le.]]></string>
|
||||
<string name="group_member_role_author">szerző</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">Elküldött üzenetek végleges törlésének engedélyezése az ismerősei számára. (24 óra)</string>
|
||||
<string name="cancel_verb">Megszakítás</string>
|
||||
<string name="cancel_verb">Mégse</string>
|
||||
<string name="notifications_mode_off_desc">Az alkalmazás csak akkor tud értesítéseket fogadni amikor fut, háttérszolgáltatás nem indul el</string>
|
||||
<string name="v5_1_better_messages">Jobb üzenetek</string>
|
||||
<string name="abort_switch_receiving_address_desc">A cím módosítása megszakad. A régi fogadási cím kerül felhasználásra.</string>
|
||||
@@ -172,17 +172,17 @@
|
||||
<string name="change_database_passphrase_question">Adatbázis jelmondat megváltoztatása?</string>
|
||||
<string name="callstate_connected">kapcsolódva</string>
|
||||
<string name="la_change_app_passcode">Jelkód megváltoztatása</string>
|
||||
<string name="rcv_group_event_changed_member_role">%s szerepköre megváltozott erre: %s</string>
|
||||
<string name="rcv_group_event_changed_member_role">%s szerepkörét megváltoztatta erre: %s</string>
|
||||
<string name="switch_receiving_address">A fogadó cím megváltoztatása</string>
|
||||
<string name="change_verb">Változtatás</string>
|
||||
<string name="confirm_passcode">Jelkód megerősítése</string>
|
||||
<string name="confirm_password">Jelszó megerősítése</string>
|
||||
<string name="change_member_role_question">Csoport szerepkör megváltoztatása?</string>
|
||||
<string name="change_lock_mode">Zárolási mód megváltoztatása</string>
|
||||
<string name="notification_contact_connected">Csatlakozott</string>
|
||||
<string name="rcv_group_event_member_connected">kapcsolódva</string>
|
||||
<string name="notification_contact_connected">Kapcsolódott</string>
|
||||
<string name="rcv_group_event_member_connected">kapcsolódott</string>
|
||||
<string name="connect_via_link_verb">Kapcsolódás</string>
|
||||
<string name="group_member_status_connected">kapcsolódva</string>
|
||||
<string name="group_member_status_connected">kapcsolódott</string>
|
||||
<string name="connected_mobile">Csatlakoztatott telefon</string>
|
||||
<string name="server_connected">kapcsolódva</string>
|
||||
<string name="change_role">Szerepkör megváltoztatása</string>
|
||||
@@ -193,7 +193,7 @@
|
||||
<string name="change_self_destruct_mode">Önmegsemmisítő mód megváltoztatása</string>
|
||||
<string name="rcv_group_event_changed_your_role">megváltoztatta az ön szerepkörét erre: %s</string>
|
||||
<string name="connect_button">Kapcsolódás</string>
|
||||
<string name="connect_via_member_address_alert_title">Közvetlen csatlakozás?</string>
|
||||
<string name="connect_via_member_address_alert_title">Közvetlen kapcsolódás?</string>
|
||||
<string name="smp_server_test_connect">Kapcsolódás</string>
|
||||
<string name="rcv_group_event_member_created_contact">közvetlenül kapcsolódva</string>
|
||||
<string name="connection_local_display_name">kapcsolat %1$d</string>
|
||||
@@ -205,7 +205,7 @@
|
||||
<string name="connect_via_link_or_qr">Kapcsolódás egy hivatkozás / QR-kód által</string>
|
||||
<string name="connection_error_auth">Kapcsolódási hiba (AUTH)</string>
|
||||
<string name="notification_preview_mode_contact">Ismerős neve</string>
|
||||
<string name="connect_via_contact_link">Kapcsolódik ehhez az ismerőshöz?</string>
|
||||
<string name="connect_via_contact_link">Kapcsolódik a kapcsolattartási azonosítón keresztül?</string>
|
||||
<string name="create_address">Azonosító létrehozása</string>
|
||||
<string name="copy_verb">Másolás</string>
|
||||
<string name="continue_to_next_step">Folytatás</string>
|
||||
@@ -234,12 +234,12 @@
|
||||
<string name="connect_via_link">Kapcsolódás egy hivatkozáson keresztül</string>
|
||||
<string name="receipts_section_contacts">Ismerősök</string>
|
||||
<string name="connection_error">Kapcsolódási hiba</string>
|
||||
<string name="alert_title_contact_connection_pending">Az ismerős még nem csatlakozott!</string>
|
||||
<string name="alert_title_contact_connection_pending">Az ismerős még nem kapcsolódott!</string>
|
||||
<string name="v5_3_discover_join_groups_descr">- kapcsolódás könyvtár szolgáltatáshoz (BÉTA)!
|
||||
\n- kézbesítési jelentések (20 tagig).
|
||||
\n- gyorsabb és stabilabb.</string>
|
||||
<string name="contribute">Hozzájárulás</string>
|
||||
<string name="group_member_status_intro_invitation">csatlakozás (bemutatkozó meghívó)</string>
|
||||
<string name="group_member_status_intro_invitation">kapcsolódás (bemutatkozó meghívó)</string>
|
||||
<string name="create_simplex_address">SimpleX azonosító létrehozása</string>
|
||||
<string name="rcv_direct_event_contact_deleted">törölt ismerős</string>
|
||||
<string name="delete_member_message__question">Csoporttag üzenet törlése?</string>
|
||||
@@ -318,7 +318,7 @@
|
||||
<string name="delete_link_question">Hivatkozás törlése?</string>
|
||||
<string name="server_connecting">kapcsolódás</string>
|
||||
<string name="send_disappearing_message_custom_time">Személyreszabott idő</string>
|
||||
<string name="connect_via_link_incognito">Csatlakozás inkognitóban</string>
|
||||
<string name="connect_via_link_incognito">Kapcsolódás inkognitóban</string>
|
||||
<string name="settings_section_title_chats">CSEVEGÉSEK</string>
|
||||
<string name="v5_3_new_desktop_app_descr">Új profil létrehozása a számítógép alkalmazásban. 💻</string>
|
||||
<string name="group_member_status_announced">kapcsolódás (bejelentve)</string>
|
||||
@@ -547,11 +547,11 @@
|
||||
<string name="enter_welcome_message">Üdvözlő üzenetet megadása…</string>
|
||||
<string name="encrypted_database">Titkosított adatbázis</string>
|
||||
<string name="enter_password_to_show">Jelszó megadása a keresőben</string>
|
||||
<string name="file_will_be_received_when_contact_completes_uploading">A fájl akkor érkezik meg, amikor az ismerőse befejezte annak feltöltését.</string>
|
||||
<string name="file_will_be_received_when_contact_completes_uploading">A fájl akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</string>
|
||||
<string name="smp_server_test_download_file">Fájl letöltése</string>
|
||||
<string name="failed_to_parse_chat_title">A csevegés betöltése sikertelen</string>
|
||||
<string name="smp_servers_enter_manually">Kiszolgáló megadása kézzel</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">A fájl akkor érkezik meg, amikor az ismerőse online lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="file_will_be_received_when_contact_is_online">A fájl akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="error_creating_link_for_group">Hiba a csoport hivatkozásának létrehozásakor</string>
|
||||
<string name="from_gallery_button">A Galériából</string>
|
||||
<string name="receipts_groups_enable_keep_overrides">Engedélyezés (csoport felülírások megtartásával)</string>
|
||||
@@ -602,7 +602,7 @@
|
||||
<string name="export_database">Adatbázis exportálása</string>
|
||||
<string name="full_name__field">Teljes név:</string>
|
||||
<string name="v4_6_reduced_battery_usage">Tovább csökkentett akkumulátor használat</string>
|
||||
<string name="error_stopping_chat">Hiba a csevegés megszakításakor</string>
|
||||
<string name="error_stopping_chat">Hiba a csevegés megállításakor</string>
|
||||
<string name="snd_conn_event_ratchet_sync_ok">titkosítás rendben %s számára</string>
|
||||
<string name="delete_group_for_all_members_cannot_undo_warning">Csoport törlésre kerül minden tag számára - ez a művelet nem vonható vissza!</string>
|
||||
<string name="v5_2_fix_encryption_descr">Titkosítás javítása az adatmentések helyreállítása után.</string>
|
||||
@@ -675,8 +675,8 @@
|
||||
<string name="if_you_enter_passcode_data_removed">Ha az alkalmazás megnyitásakor megadja ezt a jelkódot, az összes alkalmazásadat véglegesen törlődik!</string>
|
||||
<string name="if_you_cant_meet_in_person">Ha nem tud személyesen találkozni, mutassa meg a QR-kódot egy videohívás során, vagy ossza meg a hivatkozást.</string>
|
||||
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel"><![CDATA[Ha nem tud személyesen találkozni, <b>mutassa meg a QR-kódot a videohívásban</b>, vagy ossza meg a hivatkozást.]]></string>
|
||||
<string name="network_disable_socks_info">Megerősítés esetén az üzenetküldő kiszolgálók látni fogják az IP-címét és a szolgáltatóját – azt, hogy mely kiszolgálókhoz csatlakozik.</string>
|
||||
<string name="image_will_be_received_when_contact_completes_uploading">A kép akkor érkezik meg, amikor az ismerőse befejezte annak feltöltését.</string>
|
||||
<string name="network_disable_socks_info">Megerősítés esetén az üzenetküldő kiszolgálók látni fogják az IP-címét és a szolgáltatóját – azt, hogy mely kiszolgálókhoz kapcsolódik.</string>
|
||||
<string name="image_will_be_received_when_contact_completes_uploading">A kép akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</string>
|
||||
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code"><![CDATA[💻 asztali számítógép: a megjelenített QR-kód beolvasása az alkalmazásból, a <b>QR kód beolvasásával</b>.]]></string>
|
||||
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Kapott SimpleX Chat meghívó hivatkozását megnyithatja böngészőjében:</string>
|
||||
<string name="if_you_enter_self_destruct_code">Ha az alkalmazás megnyitásakor az önmegsemmisítő jelkódot megadásra kerül:</string>
|
||||
@@ -689,7 +689,7 @@
|
||||
<string name="v4_5_multiple_chat_profiles_descr">Különböző nevek, avatarok és átviteli izoláció.</string>
|
||||
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Elutasítás esetén a feladó NEM kap értesítést.</string>
|
||||
<string name="icon_descr_expand_role">Szerepkör kiválasztásának bővítése</string>
|
||||
<string name="image_will_be_received_when_contact_is_online">A kép akkor érkezik meg, amikor az ismerőse elérhető lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="image_will_be_received_when_contact_is_online">A kép akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="group_member_status_invited">meghívta</string>
|
||||
<string name="invalid_connection_link">Érvénytelen kapcsolati hivatkozás</string>
|
||||
<string name="mute_chat">Némítás</string>
|
||||
@@ -707,7 +707,7 @@
|
||||
<string name="ensure_xftp_server_address_are_correct_format_and_unique">Győződjön meg róla, hogy az XFTP-kiszolgáló címei megfelelő formátumúak, sorszeparáltak és nem duplikáltak.</string>
|
||||
<string name="no_contacts_selected">Nem kerültek ismerősök kiválasztásra</string>
|
||||
<string name="no_received_app_files">Nincsenek fogadott, vagy küldött fájlok</string>
|
||||
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app"><![CDATA[📱 mobil: koppintson a <b>Megnyitás mobil alkalmazásban</b>, majd koppintson a <b>Csatlakozás</b> gombra az alkalmazásban.]]></string>
|
||||
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app"><![CDATA[📱 mobil: koppintson a <b>Megnyitás mobil alkalmazásban</b>, majd koppintson a <b>Kapcsolódás</b> gombra az alkalmazásban.]]></string>
|
||||
<string name="markdown_in_messages">Markdown az üzenetekben</string>
|
||||
<string name="group_invitation_item_description">meghívás a %1$s csoportba</string>
|
||||
<string name="lock_mode">Zárolási mód</string>
|
||||
@@ -740,7 +740,7 @@
|
||||
<string name="new_member_role">Új tag szerepköre</string>
|
||||
<string name="la_mode_off">Ki</string>
|
||||
<string name="invalid_contact_link">Érvénytelen hivatkozás!</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">A csatlakozáshoz Onion kiszolgálókra lesz szükség.</string>
|
||||
<string name="network_use_onion_hosts_required_desc_in_alert">A kapcsolódáshoz Onion kiszolgálókra lesz szükség.</string>
|
||||
<string name="new_in_version">Változások a %s verzióban</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion kiszolgálók használata, ha azok rendelkezésre állnak.</string>
|
||||
<string name="smp_servers_invalid_address">Érvénytelen kiszolgálócím!</string>
|
||||
@@ -776,7 +776,7 @@
|
||||
<string name="group_member_status_left">elhagyta a csoportot</string>
|
||||
<string name="message_deletion_prohibited">Ebben a csevegésben az üzenetek végleges törlése le van tiltva.</string>
|
||||
<string name="v4_3_voice_messages_desc">Max 40 másodperc, azonnal fogadható.</string>
|
||||
<string name="description_via_contact_address_link_incognito">inkognitó az ismerős azonosító hivatkozásán keresztül</string>
|
||||
<string name="description_via_contact_address_link_incognito">inkognitó a kapcsolattartási azonosító-hivatkozáson keresztül</string>
|
||||
<string name="network_use_onion_hosts_required_desc">A kapcsolódáshoz Onion kiszolgálókra lesz szükség.
|
||||
\nFigyelem: .onion cím nélkül nem fog tudni kapcsolódni a kiszolgálókhoz.</string>
|
||||
<string name="v4_5_italian_interface">Olasz kezelőfelület</string>
|
||||
@@ -822,7 +822,7 @@
|
||||
<string name="join_group_button">Csatlakozás</string>
|
||||
<string name="shutdown_alert_desc">Az értesítések az alkalmazás elindításáig nem fognak működni</string>
|
||||
<string name="chat_preferences_off">ki</string>`
|
||||
<string name="this_device_version"><![CDATA[<i>(ez az eszköz) v%s)</i>]]></string>
|
||||
<string name="this_device_version"><![CDATA[<i>(ez az eszköz: v%s)</i>]]></string>
|
||||
<string name="feature_offered_item">ajánlott %s</string>
|
||||
<string name="button_leave_group">Csoport elhagyása</string>
|
||||
<string name="unblock_member_desc">Minden %s által írt üzenet megjelenik!</string>
|
||||
@@ -896,8 +896,8 @@
|
||||
<string name="connect_plan_repeat_connection_request">Kapcsolódási kérés megismétlése?</string>
|
||||
<string name="only_you_can_delete_messages">Véglegesen csak ön törölhet üzeneteket (ismerőse csak törlésre jelölheti őket ). (24 óra)</string>
|
||||
<string name="role_in_group">Szerepkör</string>
|
||||
<string name="simplex_link_contact">SimpleX ismerős azonosítója</string>
|
||||
<string name="stop_file__confirm">Megszakítás</string>
|
||||
<string name="simplex_link_contact">SimpleX kapcsolattartási azonosító</string>
|
||||
<string name="stop_file__confirm">Megállítás</string>
|
||||
<string name="smp_servers_preset_server">Előre beállított kiszolgáló</string>
|
||||
<string name="add_contact_or_create_group">Új csevegés kezdése</string>
|
||||
<string name="opensource_protocol_and_code_anybody_can_run_servers">Nyílt forráskódú protokoll és forráskód – bárki üzemeltethet kiszolgálókat.</string>
|
||||
@@ -906,7 +906,7 @@
|
||||
<string name="secret_text">titkos</string>
|
||||
<string name="settings_notification_preview_mode_title">Előnézet megjelenítése</string>
|
||||
<string name="callstate_waiting_for_confirmation">várakozás a visszaigazolásra…</string>
|
||||
<string name="stop_file__action">Fájl megszakítása</string>
|
||||
<string name="stop_file__action">Fájl megállítása</string>
|
||||
<string name="description_via_group_link">csoport hivatkozáson keresztül</string>
|
||||
<string name="network_option_ping_interval">PING időköze</string>
|
||||
<string name="send_disappearing_message">Eltűnő üzenet küldése</string>
|
||||
@@ -939,11 +939,11 @@
|
||||
<string name="share_verb">Megosztás</string>
|
||||
<string name="received_message">Fogadott üzenet</string>
|
||||
<string name="button_welcome_message">Üdvözlő üzenet</string>
|
||||
<string name="rcv_group_event_n_members_connected">%s, %s és további %d tag csatlakozott</string>
|
||||
<string name="rcv_group_event_n_members_connected">%s, %s és további %d tag kapcsolódott</string>
|
||||
<string name="only_your_contact_can_make_calls">Csak az ismerőse tud hívást indítani.</string>
|
||||
<string name="settings_section_title_themes">TÉMÁK</string>
|
||||
<string name="videos_limit_title">Túl sok videó!</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Csevegési szolgáltatás megszakítása az adatbázis műveletek elvégzéséhez.</string>
|
||||
<string name="stop_chat_to_enable_database_actions">Csevegési szolgáltatás megállítása az adatbázis műveletek elvégzéséhez.</string>
|
||||
<string name="welcome">Üdvözöljük!</string>
|
||||
<string name="v5_1_self_destruct_passcode">Önmegsemmisítési jelkód</string>
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(beolvasás, vagy beillesztés a vágólapról)</string>
|
||||
@@ -955,14 +955,14 @@
|
||||
<string name="contact_developers">Frissítse az alkalmazást, és lépjen kapcsolatba a fejlesztőkkel.</string>
|
||||
<string name="theme_simplex">SimpleX</string>
|
||||
<string name="send_link_previews">Hivatkozás előnézete</string>
|
||||
<string name="rcv_conn_event_verification_code_reset">biztonsági kód megváltozott</string>
|
||||
<string name="rcv_conn_event_verification_code_reset">a biztonsági kód megváltozott</string>
|
||||
<string name="notification_preview_mode_contact_desc">Kizárólag ismerős megjelenítése</string>
|
||||
<string name="icon_descr_speaker_on">Hangszóró bekapcsolva</string>
|
||||
<string name="restart_the_app_to_use_imported_chat_database">Importált csevegési adatbázis használatához indítsa újra az alkalmazást.</string>
|
||||
<string name="icon_descr_sent_msg_status_unauthorized_send">jogosulatlan küldés</string>
|
||||
<string name="only_your_contact_can_send_voice">Csak az ismerőse tud hangüzeneteket küldeni.</string>
|
||||
<string name="icon_descr_settings">Beállítások</string>
|
||||
<string name="scan_qr_to_connect_to_contact">A csatlakozáshoz az ismerőse beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást.</string>
|
||||
<string name="scan_qr_to_connect_to_contact">A kapcsolódáshoz az ismerőse beolvashatja a QR-kódot, vagy használhatja az alkalmazásban található hivatkozást.</string>
|
||||
<string name="callstate_received_confirmation">visszaigazolás fogadása…</string>
|
||||
<string name="scan_code_from_contacts_app">Biztonsági kód beolvasása az ismerősének alkalmazásából.</string>
|
||||
<string name="observer_cant_send_message_desc">Lépjen kapcsolatba a csoport adminnal.</string>
|
||||
@@ -989,13 +989,13 @@
|
||||
<string name="notification_preview_mode_message_desc">Ismerős és üzenet megjelenítése</string>
|
||||
<string name="settings_section_title_settings">BEÁLLÍTÁSOK</string>
|
||||
<string name="save_profile_password">Felhasználói fiók jelszavának mentése</string>
|
||||
<string name="stop_snd_file__title">Fájl küldés megszakítása?</string>
|
||||
<string name="stop_snd_file__title">Fájl küldés megállítása?</string>
|
||||
<string name="unlink_desktop_question">Számítógép leválasztása?</string>
|
||||
<string name="voice_messages_prohibited">A hangüzenetek le vannak tilva!</string>
|
||||
<string name="compose_send_direct_message_to_connect">Közvetlen üzenet küldése a csatlakozáshoz</string>
|
||||
<string name="compose_send_direct_message_to_connect">Közvetlen üzenet küldése a kapcsolódáshoz</string>
|
||||
<string name="network_option_ping_count">PING számláló</string>
|
||||
<string name="show_developer_options">Fejlesztői beállítások megjelenítése</string>
|
||||
<string name="rcv_group_event_1_member_connected">%s csatlakozott</string>
|
||||
<string name="rcv_group_event_1_member_connected">%s kapcsolódott</string>
|
||||
<string name="theme_system">Rendszer</string>
|
||||
<string name="network_use_onion_hosts_prefer">Amikor elérhető</string>
|
||||
<string name="voice_message_with_duration">Hangüzenet (%1$s)</string>
|
||||
@@ -1012,14 +1012,14 @@
|
||||
<string name="images_limit_title">Túl sok kép!</string>
|
||||
<string name="save_archive">Archívum mentése</string>
|
||||
<string name="group_members_n">%s, %s és %d tag</string>
|
||||
<string name="auth_stop_chat">Csevegési szolgáltatás megszakítása</string>
|
||||
<string name="auth_stop_chat">Csevegési szolgáltatás megállítása</string>
|
||||
<string name="simplex_link_mode">SimpleX hivatkozások</string>
|
||||
<string name="v4_4_disappearing_messages_desc">Az elküldött üzenetek törlésre kerülnek a beállított idő után.</string>
|
||||
<string name="user_unmute">Némítás feloldása</string>
|
||||
<string name="share_text_sent_at">Elküldve ekkor: %s</string>
|
||||
<string name="connect_use_current_profile">Jelenlegi profil használata</string>
|
||||
<string name="this_device">Ez az eszköz</string>
|
||||
<string name="share_address_with_contacts_question">Megosztja az azonosítót az ismerősökkel?</string>
|
||||
<string name="share_address_with_contacts_question">Megosztja az azonosítót az ismerőseivel?</string>
|
||||
<string name="profile_password">Profiljelszó</string>
|
||||
<string name="theme">Téma</string>
|
||||
<string name="remove_passphrase_from_settings">Jelmondat eltávolítása a beállításokból?</string>
|
||||
@@ -1074,7 +1074,7 @@
|
||||
<string name="onboarding_notifications_mode_title">Privát értesítések</string>
|
||||
<string name="you_invited_a_contact">Meghívta egy ismerősét</string>
|
||||
<string name="is_not_verified">%s nincs ellenőrizve</string>
|
||||
<string name="contact_tap_to_connect">Koppintson a csatlakozáshoz</string>
|
||||
<string name="contact_tap_to_connect">Koppintson a kapcsolódáshoz</string>
|
||||
<string name="this_device_name">Ennek az eszköznek a neve</string>
|
||||
<string name="your_current_profile">Jelenlegi profil</string>
|
||||
<string name="smp_server_test_upload_file">Fájl feltöltése</string>
|
||||
@@ -1093,7 +1093,7 @@
|
||||
<string name="your_chat_profiles">Csevegési profilok</string>
|
||||
<string name="group_member_role_owner">tulajdonos</string>
|
||||
<string name="la_notice_turn_on">Bekapcsolás</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s és %s csatlakoztak</string>
|
||||
<string name="rcv_group_event_3_members_connected">%s, %s és %s kapcsolódott</string>
|
||||
<string name="simplex_link_invitation">SimpleX egyszer használatos meghívó</string>
|
||||
<string name="your_calls">Hívások</string>
|
||||
<string name="icon_descr_sent_msg_status_send_failed">nem sikerült elküldeni</string>
|
||||
@@ -1134,11 +1134,11 @@
|
||||
<string name="settings_section_title_use_from_desktop">Használat számítógépről</string>
|
||||
<string name="settings_section_title_you">ÖN</string>
|
||||
<string name="network_proxy_port">port %d</string>
|
||||
<string name="to_connect_via_link_title">Csatlakozás hivatkozáson keresztül</string>
|
||||
<string name="to_connect_via_link_title">Kapcsolódás hivatkozáson keresztül</string>
|
||||
<string name="share_address">Azonosító megosztása</string>
|
||||
<string name="smp_servers_scan_qr">A kiszolgáló QR-kódjának beolvasása</string>
|
||||
<string name="stop_chat_confirmation">Megszakítás</string>
|
||||
<string name="stop_sharing_address">Címmegosztás megszakítása?</string>
|
||||
<string name="stop_chat_confirmation">Megállítás</string>
|
||||
<string name="stop_sharing_address">Címmegosztás megállítása?</string>
|
||||
<string name="auth_open_chat_profiles">Csevegés profilok megnyitása</string>
|
||||
<string name="connect_plan_repeat_join_request">Csatlakozási kérés megismétlése?</string>
|
||||
<string name="waiting_for_image">Képre várakozás</string>
|
||||
@@ -1151,7 +1151,7 @@
|
||||
<string name="callstate_received_answer">fogadott válasz…</string>
|
||||
<string name="restore_database_alert_title">Adatbázismentés visszaállítása?</string>
|
||||
<string name="simplex_service_notification_text">Üzenetek fogadása…</string>
|
||||
<string name="rcv_group_event_2_members_connected">%s és %s csatlakoztak</string>
|
||||
<string name="rcv_group_event_2_members_connected">%s és %s kapcsolódott</string>
|
||||
<string name="you_are_observer">megfigyelő szerep</string>
|
||||
<string name="port_verb">Port</string>
|
||||
<string name="set_passcode">Jelkód beállítása</string>
|
||||
@@ -1216,7 +1216,7 @@
|
||||
<string name="image_descr_qr_code">QR-kód</string>
|
||||
<string name="renegotiate_encryption">Titkosítás újraegyeztetése</string>
|
||||
<string name="remove_passphrase">Eltávolítás</string>
|
||||
<string name="network_use_onion_hosts">Tor .onion hostok használata</string>
|
||||
<string name="network_use_onion_hosts">Tor .onion kiszolgálók használata</string>
|
||||
<string name="reveal_verb">Felfedés</string>
|
||||
<string name="la_lock_mode">SimpleX zárolási mód</string>
|
||||
<string name="revoke_file__action">Fájl visszavonása</string>
|
||||
@@ -1225,7 +1225,7 @@
|
||||
<string name="share_file">Fájl megosztása…</string>
|
||||
<string name="save_verb">Mentés</string>
|
||||
<string name="call_connection_via_relay">átjátszón keresztül</string>
|
||||
<string name="stop_sharing">Megosztás megszakítása</string>
|
||||
<string name="stop_sharing">Megosztás megállítása</string>
|
||||
<string name="snd_group_event_member_deleted">eltávolította őt: %1$s</string>
|
||||
<string name="save_passphrase_and_open_chat">Jelmondat mentése és csevegés megnyitása</string>
|
||||
<string name="save_preferences_question">Beállítások mentése?</string>
|
||||
@@ -1250,7 +1250,7 @@
|
||||
<string name="unblock_member_confirmation">Feloldás</string>
|
||||
<string name="unmute_chat">Némítás feloldása</string>
|
||||
<string name="open_simplex_chat_to_accept_call">SimpleX Chat megnyitása a hívás fogadásához</string>
|
||||
<string name="stop_rcv_file__title">Fájl fogadás megszakítása?</string>
|
||||
<string name="stop_rcv_file__title">Fájl fogadás megállítása?</string>
|
||||
<string name="v5_4_more_things_descr">- opcionális értesítés a törölt ismerősök számára
|
||||
\n- profil nevek szóközökkel
|
||||
\n- és továbbiak!</string>
|
||||
@@ -1279,7 +1279,7 @@
|
||||
<string name="verify_connection">Kapcsolat ellenőrzése</string>
|
||||
<string name="whats_new_read_more">Tudjon meg többet</string>
|
||||
<string name="sender_cancelled_file_transfer">A küldő megszakította a fájl átvitelt.</string>
|
||||
<string name="stop_chat_question">Csevegési szolgáltatás megszakítása?</string>
|
||||
<string name="stop_chat_question">Csevegési szolgáltatás megállítása?</string>
|
||||
<string name="info_row_received_at">Fogadva ekkor:</string>
|
||||
<string name="accept_feature_set_1_day">Beállítva 1 nap</string>
|
||||
<string name="user_unhide">Felfedés</string>
|
||||
@@ -1292,7 +1292,7 @@
|
||||
<string name="v5_0_large_files_support">Videók és fájlok 1Gb méretig</string>
|
||||
<string name="network_option_tcp_connection_timeout">TCP kapcsolat időtúllépés</string>
|
||||
<string name="connect__your_profile_will_be_shared">A(z) %1$s nevű profiljának SimpleX azonosítója megosztásra fog kerülni.</string>
|
||||
<string name="you_are_already_connected_to_vName_via_this_link">Ön már csatlakozott ehhez: %1$s.</string>
|
||||
<string name="you_are_already_connected_to_vName_via_this_link">Ön már kapcsolódott ehhez: %1$s.</string>
|
||||
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Jelenlegi csevegési adatbázis TÖRLÉSRE és FELCSERÉLÉSRE kerül az importált által!
|
||||
\nEz a művelet nem vonható vissza - profiljai, ismerősei, csevegési üzenetei és fájljai véglegesen törölve lesznek!</string>
|
||||
<string name="chat_with_the_founder">Ötletek és javaslatok</string>
|
||||
@@ -1309,21 +1309,21 @@
|
||||
<string name="save_group_profile">Csoport profil mentése</string>
|
||||
<string name="network_options_reset_to_defaults">Alaphelyzetbe állítás</string>
|
||||
<string name="connection_error_auth_desc">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.
|
||||
\nA 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.</string>
|
||||
\nA 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.</string>
|
||||
<string name="video_call_no_encryption">videóhívás (nem e2e titkosított)</string>
|
||||
<string name="smp_servers_use_server_for_new_conn">Alkalmazás új kapcsolatokhoz</string>
|
||||
<string name="periodic_notifications_desc">Az új üzenetek rendszeresen letöltésre kerülnek az alkalmazás által – naponta néhány százalékot használ az akkumulátorból. Az alkalmazás nem használ push értesítéseket – az eszközről származó adatok nem kerülnek elküldésre a kiszolgálóknak.</string>
|
||||
<string name="paste_desktop_address">Számítógép azonosítójának beillesztése</string>
|
||||
<string name="description_via_contact_address_link">ismerős azonosítójának hivatkozásán keresztül</string>
|
||||
<string name="description_via_contact_address_link">kapcsolattartási azonosító-hivatkozáson keresztül</string>
|
||||
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery"><![CDATA[Az adatvédelem megőrzése érdekkében a push értesítési rendszer helyett az alkalmazás a <b>SimpleX háttérszolgáltatást </b> használja - az akkumulátor néhány százalékát használja naponta.]]></string>
|
||||
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Az ismerősnek online kell lennie ahhoz, hogy a kapcsolat létrejöjjön.
|
||||
\nMegszakíthatja ezt a kapcsolatfelvételt és törölheti az ismerőst (ezt később ismét megpróbálhatja egy új hivatkozással)</string>
|
||||
<string name="restore_passphrase_not_found_desc">A jelszó nem található a Keystore-ban, ezért kézzel szükséges megadni. Ez akkor történhetett meg, ha visszaállította az alkalmazás adatait egy biztonsági mentési eszközzel. Ha nem így történt, akkor lépjen kapcsolatba a fejlesztőkkel.</string>
|
||||
<string name="your_contacts_will_remain_connected">Az ismerősei továbbra is csatlakoztatva maradnak.</string>
|
||||
<string name="your_contacts_will_remain_connected">Az ismerősei továbbra is kapcsolódva maradnak.</string>
|
||||
<string name="error_xftp_test_server_auth">A kiszolgálónak engedélyre van szüksége a várólisták létrehozásához, ellenőrizze jelszavát</string>
|
||||
<string name="database_initialization_error_desc">Az adatbázis nem működik megfelelően. Koppintson további információért</string>
|
||||
<string name="stop_snd_file__message">A fájl küldése leállt.</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages">Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz ettől az ismerőstől.</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages">Kapcsolódási kísérlet ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál.</string>
|
||||
<string name="la_could_not_be_verified">Nem lehetett ellenőrizni; próbálja meg újra.</string>
|
||||
<string name="moderate_message_will_be_marked_warning">Az üzenet minden tag számára moderáltként lesz megjelölve.</string>
|
||||
<string name="enter_passphrase_notification_desc">Értesítések fogadásához adja meg az adatbázis jelmondatát</string>
|
||||
@@ -1337,11 +1337,11 @@
|
||||
<string name="group_preview_you_are_invited">meghívást kapott a csoportba</string>
|
||||
<string name="turn_off_battery_optimization"><![CDATA[Használatához <b>engedélyezze a SimpleX háttérben történő futását</b> a következő párbeszédpanelen. Ellenkező esetben az értesítések letiltásra kerülnek.]]></string>
|
||||
<string name="error_smp_test_server_auth">A kiszolgálónak engedélyre van szüksége a várólisták létrehozásához, ellenőrizze jelszavát</string>
|
||||
<string name="you_will_join_group">Csatlakozni fog a csoport összes tagjához.</string>
|
||||
<string name="you_will_join_group">Kapcsolódni fog a csoport összes tagjához.</string>
|
||||
<string name="error_smp_test_certificate">Lehetséges, hogy a kiszolgáló címében szereplő tanúsítvány-ujjlenyomat helytelen</string>
|
||||
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">Az adatavédelem érdekében kapcsolja be a SimpleX zárolás funkciót.
|
||||
\nA funkció engedélyezése előtt a rendszer felszólítja a hitelesítés befejezésére.</string>
|
||||
<string name="video_will_be_received_when_contact_is_online">A videó akkor érkezik meg, amikor az ismerőse elérhető, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="video_will_be_received_when_contact_is_online">A videó akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="network_error_desc">Hálózati kapcsolat ellenőrzése a következővel: %1$s, és próbálja újra.</string>
|
||||
<string name="you_can_turn_on_lock">A SimpleX zárolás a Beállításokon keresztül kapcsolható be.</string>
|
||||
<string name="app_was_crashed">Az alkalmazás összeomlott</string>
|
||||
@@ -1349,16 +1349,16 @@
|
||||
<string name="image_decoding_exception_desc">A kép nem dekódolható. Próbálja meg egy másik képpel, vagy lépjen kapcsolatba a fejlesztőkkel.</string>
|
||||
<string name="non_content_uri_alert_text">Érvénytelen fájl elérési útvonalat osztott meg. Jelentse a problémát az alkalmazás fejlesztőinek.</string>
|
||||
<string name="failed_to_create_user_duplicate_desc">Már van egy csevegési profil ugyanezzel a megjelenített névvel. Válasszon egy másik nevet.</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Csatlakozási kísérlet a kapcsolat üzeneteinek fogadására használt kiszolgálóhoz ettől az ismerőstől (hiba: %1$s).</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">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: %1$s).</string>
|
||||
<string name="stop_rcv_file__message">A fájl fogadása leállt.</string>
|
||||
<string name="la_please_remember_to_store_password">Ne felejtse el, vagy tárolja biztonságosan – az elveszett jelszót nem lehet visszaállítani!</string>
|
||||
<string name="video_will_be_received_when_contact_completes_uploading">A videó akkor érkezik meg, amikor az ismerőse befejezte annak feltöltését.</string>
|
||||
<string name="video_will_be_received_when_contact_completes_uploading">A videó akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</string>
|
||||
<string name="description_you_shared_one_time_link_incognito">egyszer használatos hivatkozást osztott meg inkognitóban</string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">Kiszolgálóhoz történő csatlakozás, mely az adott ismerőstől érkező üzenetek fogadására szolgál.</string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">Már kapcsolódott ahhoz a kiszolgálóhoz, amely az adott ismerőstől érkező üzenetek fogadására szolgál.</string>
|
||||
<string name="you_can_enable_delivery_receipts_later">Később engedélyezheti a Beállításokban</string>
|
||||
<string name="you_will_be_connected_when_group_host_device_is_online">Akkor tud csatlakozni a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="you_will_be_connected_when_group_host_device_is_online">Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="mtr_error_different">különböző átköltöztetés az alkalmazásban/adatbázisban: %s / %s</string>
|
||||
<string name="connect_plan_you_are_already_connecting_to_vName"><![CDATA[Ön már csatlakozik a következőhöz: <b>%1$s</b>.]]></string>
|
||||
<string name="connect_plan_you_are_already_connecting_to_vName"><![CDATA[A kapcsolódás már folyamatban van ehhez: <b>%1$s</b>.]]></string>
|
||||
<string name="unhide_profile">Profil felfedése</string>
|
||||
<string name="this_link_is_not_a_valid_connection_link">Ez a hivatkozás nem érvényes kapcsolati hivatkozás!</string>
|
||||
<string name="to_verify_compare">A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy szkennelje be) az ismerőse eszközén lévő kódot.</string>
|
||||
@@ -1366,7 +1366,7 @@
|
||||
<string name="messages_section_description">Ez a beállítás a jelenlegi csevegési profilban lévő üzenetekre érvényes</string>
|
||||
<string name="you_are_invited_to_group_join_to_connect_with_group_members">Meghívást kapott a csoportba. Csatlakozzon, hogy kapcsolatba léphessen a csoport tagjaival.</string>
|
||||
<string name="alert_message_no_group">Ez a csoport már nem létezik.</string>
|
||||
<string name="connect_plan_you_are_already_joining_the_group_via_this_link">Ezen a hivatkozáson keresztül már csatlakozik a csoporthoz.</string>
|
||||
<string name="connect_plan_you_are_already_joining_the_group_via_this_link">A csatlakozás már folyamatban van a csoporthoz ezen a hivatkozáson keresztül.</string>
|
||||
<string name="you_are_invited_to_group">Meghívást kapott a csoportba</string>
|
||||
<string name="contact_sent_large_file">Ismerőse a jelenleg megengedett maximális méretű (%1$s) fájlnál nagyobbat küldött.</string>
|
||||
<string name="we_do_not_store_contacts_or_messages_on_servers">Az ismerősei és az üzenetek (kézbesítés után) nem kerülnek tárolásra a SimpleX kiszolgálókon.</string>
|
||||
@@ -1375,11 +1375,11 @@
|
||||
<string name="your_chat_profile_will_be_sent_to_your_contact">Csevegési profilja elküldésre kerül
|
||||
\naz ismerőse számára</string>
|
||||
<string name="invite_prohibited_description">Egy olyan ismerősét próbálja meghívni, akivel inkognitóprofilt osztott meg abban a csoportban, amelyben a saját fő profilja van használatban</string>
|
||||
<string name="connect_plan_you_are_already_joining_the_group_vName"><![CDATA[Csatlakozás folyamatban van a(z) <b>%1$s</b> csoporthoz.]]></string>
|
||||
<string name="connect_plan_you_are_already_joining_the_group_vName"><![CDATA[A csatlakozás már folyamatban van a(z) <b>%1$s</b> csoporthoz.]]></string>
|
||||
<string name="onboarding_notifications_mode_off">Amikor az alkalmazás fut</string>
|
||||
<string name="alert_title_cant_invite_contacts_descr">Inkognító profilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében meghívók küldése tiltott</string>
|
||||
<string name="v4_5_transport_isolation">Kapcsolat izolációs mód</string>
|
||||
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Akkor lesz csatlakoztatva, ha a csatlakozási kérelme elfogadásra került, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Akkor lesz kapcsolódva, ha a kapcsolódási kérelme elfogadásra kerül, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="voice_messages_are_prohibited">A hangüzenetek küldése le van tiltva ebben a csoportban.</string>
|
||||
<string name="system_restricted_background_in_call_warn"><![CDATA[A háttérben való hívásokhoz válassza ki az <b>Alkalmazás akkumulátor használata</b> / <b>Korlátlan</b> módot az alkalmazás beállításaiban.]]></string>
|
||||
<string name="v5_4_link_mobile_desktop_descr">Biztonságos kvantumrezisztens protokollon keresztül.</string>
|
||||
@@ -1387,11 +1387,11 @@
|
||||
\n- egyedi eltűnési időhatár.
|
||||
\n- előzmény szerkesztése.</string>
|
||||
<string name="open_on_mobile_and_scan_qr_code"><![CDATA[Válassza a <i>Használat számítógépről</i> menüpontot a mobil alkalmazásban és olvassa be a QR-kódot.]]></string>
|
||||
<string name="sender_at_ts">%s at %s</string>
|
||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">Akkor csatlakozik, amikor az ismerősének az eszköze online lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="sender_at_ts">%s ekkor: %s</string>
|
||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">Akkor lesz kapcsolódva, amikor az ismerősének az eszköze online lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="v5_4_block_group_members_descr">Kéretlen üzenetek elrejtése.</string>
|
||||
<string name="disable_onion_hosts_when_not_supported"><![CDATA[Állítsa a <i>Használja az .onion hostokat</i> NEM értékre, ha a SOCKS proxy nem támogatja őket.]]></string>
|
||||
<string name="you_can_share_your_address">Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki csatlakozhat önhöz.</string>
|
||||
<string name="disable_onion_hosts_when_not_supported"><![CDATA[Állítsa a <i>Használja az .onion kiszolgálókat</i> NEM értékre, ha a SOCKS proxy nem támogatja őket.]]></string>
|
||||
<string name="you_can_share_your_address">Megoszthatja azonosítóját hivatkozásként vagy QR-kódként – így bárki kapcsolódhat önhöz.</string>
|
||||
<string name="you_can_create_it_later">Létrehozás később</string>
|
||||
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Profilja az eszközön van tárolva és csak az ismerőseivel kerül megosztásra. A SimpleX kiszolgálók nem láthatják a profilját.</string>
|
||||
<string name="snd_group_event_changed_member_role">%s szerepkörét megváltoztatta erre: %s</string>
|
||||
@@ -1420,7 +1420,7 @@
|
||||
<string name="system_restricted_background_warn"><![CDATA[Az értesítések engedélyezéséhez válassza ki az <b>Alkalmazás akkumulátor használata</b> / <b>Korlátlan</b> módot az alkalmazás beállításaiban.]]></string>
|
||||
<string name="this_string_is_not_a_connection_link">Ez a karakterlánc nem egy meghívó hivatkozás!</string>
|
||||
<string name="to_start_a_new_chat_help_header">Új csevegés kezdése</string>
|
||||
<string name="connect_plan_you_are_already_connecting_via_this_one_time_link">Ön már csatlakozik ezen az egyszer használatos hivatkozáson keresztül!</string>
|
||||
<string name="connect_plan_you_are_already_connecting_via_this_one_time_link">A kapcsolódás már folyamatban van ezen az egyszer használatos hivatkozáson keresztül!</string>
|
||||
<string name="you_wont_lose_your_contacts_if_delete_address">Nem veszíti el az ismerőseit, ha később törli az azonosítóját.</string>
|
||||
<string name="updating_settings_will_reconnect_client_to_all_servers">A beállítások frissítése a kiszolgálókhoz való újra kapcsolódással jár.</string>
|
||||
<string name="contact_wants_to_connect_with_you">kapcsolatba akar lépni veled!</string>
|
||||
@@ -1432,8 +1432,8 @@
|
||||
<string name="v4_2_auto_accept_contact_requests_desc">Opcionális üdvözlő üzenettel.</string>
|
||||
<string name="unknown_database_error_with_info">Ismeretlen adatbázis hiba: %s</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Elrejthet vagy némíthat egy felhasználói profilt - tartsa lenyomva a menühöz.</string>
|
||||
<string name="v5_3_simpler_incognito_mode_descr">Inkognító mód csatlakozáskor.</string>
|
||||
<string name="update_onion_hosts_settings_question">Tor .onion host beállítások frissítése?</string>
|
||||
<string name="v5_3_simpler_incognito_mode_descr">Inkognító mód kapcsolódáskor.</string>
|
||||
<string name="update_onion_hosts_settings_question">Tor .onion kiszolgálók beállításainak frissítése?</string>
|
||||
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">Megoszthat egy hivatkozást vagy QR-kódot - így bárki csatlakozhat a csoporthoz. Ha a csoport később törlésre kerül, akkor nem fogja elveszíteni annak tagjait.</string>
|
||||
<string name="you_joined_this_group">Csatlakozott ehhez a csoporthoz</string>
|
||||
<string name="connect_plan_this_is_your_link_for_group_vName"><![CDATA[Ez a hivatkozása a(z) <b>%1$s</b> csoporthoz!]]></string>
|
||||
@@ -1441,18 +1441,18 @@
|
||||
<string name="you_control_your_chat">Ön irányítja csevegését!</string>
|
||||
<string name="verify_code_with_desktop">Kód ellenőrzése a számítógépen</string>
|
||||
<string name="v4_5_private_filenames_descr">Az időzóna védelme érdekében a kép-/hangfájlok UTC-t használnak.</string>
|
||||
<string name="connect_via_member_address_alert_desc">Csoporttag részére a csatlakozási kérelem eküldésre kerül.</string>
|
||||
<string name="connect_via_member_address_alert_desc">Csoporttag részére a kapcsolódási kérelem elküldésre kerül.</string>
|
||||
<string name="incognito_info_share">Inkognitóprofil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.</string>
|
||||
<string name="connect_plan_you_have_already_requested_connection_via_this_address">Már kért egy csatlakozást ezen az azonosítón keresztül!</string>
|
||||
<string name="you_can_share_this_address_with_your_contacts">Megoszthatja ezt a SimpleX azonosítót ismerőseivel, hogy kapcsolatba léphessenek vele: %s.</string>
|
||||
<string name="you_can_accept_or_reject_connection">Csatlakozási kérelmek esetében, elfogadhatja vagy elutasíthatja azokat.</string>
|
||||
<string name="connect_plan_you_have_already_requested_connection_via_this_address">Már kért egy kapcsolódási kérelmet ezen az azonosítón keresztül!</string>
|
||||
<string name="you_can_share_this_address_with_your_contacts">Megoszthatja ezt a SimpleX azonosítót az ismerőseivel, hogy kapcsolatba léphessenek vele: %s.</string>
|
||||
<string name="you_can_accept_or_reject_connection">Amikor az emberek kapcsolódást kérelmeznek, ön elfogadhatja vagy elutasíthatja azokat.</string>
|
||||
<string name="v4_6_group_welcome_message_descr">Megjelenítendő üzenet beállítása az új tagok számára!</string>
|
||||
<string name="whats_new_thanks_to_users_contribute_weblate">Köszönet a felhasználóknak - hozzájárulás a Weblaten!</string>
|
||||
<string name="sending_delivery_receipts_will_be_enabled">A kézbesítési jelentés küldése minden ismerős számára engedélyezésre kerül.</string>
|
||||
<string name="network_option_protocol_timeout_per_kb">Protokoll időkorlát KB-onként</string>
|
||||
<string name="database_backup_can_be_restored">Az adatbázis jelmondatának megváltoztatására tett kísérlet nem fejeződött be.</string>
|
||||
<string name="enable_automatic_deletion_message">Ez a művelet nem vonható vissza - a kiválasztottnál korábban küldött és fogadott üzenetek törlésre kerülnek. Ez több percet is igénybe vehet.</string>
|
||||
<string name="profile_is_only_shared_with_your_contacts">Profilja csak az ismerősei számára kerül megosztásra.</string>
|
||||
<string name="profile_is_only_shared_with_your_contacts">Profilja csak az ismerőseivel kerül megosztásra.</string>
|
||||
<string name="smp_servers_test_some_failed">Néhány kiszolgáló megbukott a teszten:</string>
|
||||
<string name="group_invitation_tap_to_join">Koppintson a csatlakozáshoz</string>
|
||||
<string name="delete_files_and_media_desc">Ez a művelet nem vonható vissza - az összes fogadott és küldött fájl a médiatartalommal együtt törlésre kerülnek. Az alacsony felbontású fotók viszont megmaradnak.</string>
|
||||
@@ -1465,10 +1465,10 @@
|
||||
<string name="share_text_updated_at">A bejegyzés frissítve: %s</string>
|
||||
<string name="skip_inviting_button">Tagok meghívásának kihagyása</string>
|
||||
<string name="receipts_section_description_1">Ezek felülbírálhatóak az ismerős- és csoportbeállításokban.</string>
|
||||
<string name="contact_you_shared_link_with_wont_be_able_to_connect">Ismerőse NEM fog tudni csatlakozni, akivel megosztotta ezt a hivatkozást!</string>
|
||||
<string name="contact_you_shared_link_with_wont_be_able_to_connect">Ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni!</string>
|
||||
<string name="you_can_change_it_later">A véletlenszerű jelmondat egyszerű szövegként van tárolva a beállításokban.
|
||||
\nEz később megváltoztatható.</string>
|
||||
<string name="group_invitation_tap_to_join_incognito">Koppintson az inkognitóban való csatlakozáshoz</string>
|
||||
<string name="group_invitation_tap_to_join_incognito">Koppintson az inkognitóban való kapcsolódáshoz</string>
|
||||
<string name="set_password_to_export">Jelmondat beállítása az exportáláshoz</string>
|
||||
<string name="receipts_groups_override_disabled">Kézbesítési jelentések le vannak tiltva a(z) %d csoportban</string>
|
||||
<string name="non_fatal_errors_occured_during_import">Néhány nem végzetes hiba történt az importálás során – további részletekért a csevegési konzolban olvashat.</string>
|
||||
@@ -1476,7 +1476,7 @@
|
||||
<string name="relay_server_if_necessary">Az átjátszó kiszolgáló csak szükség esetén kerül használatra. Egy másik fél megfigyelheti az IP-címét.</string>
|
||||
<string name="v5_0_app_passcode_descr">Rendszerhitelesítés helyetti beállítás.</string>
|
||||
<string name="switch_receiving_address_desc">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.</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">A csevegés megszakítása a csevegő adatbázis exportálásához, importálásához, vagy törléséhez. A csevegés megszakítása alatt nem tud üzeneteket fogadni és küldeni.</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">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.</string>
|
||||
<string name="save_passphrase_in_keychain">Jelmondat mentése a kulcstárolóba</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Köszönet a felhasználóknak - hozzájárulás a Weblaten!</string>
|
||||
<string name="save_passphrase_in_settings">Jelmondat mentése a beállításokban</string>
|
||||
@@ -1521,7 +1521,7 @@
|
||||
<string name="read_more_in_github_with_link"><![CDATA[További információ a <font color="#0088ff">GitHub tárolónkban</font>.]]></string>
|
||||
<string name="error_showing_content">hiba a tartalom megjelenítése közben</string>
|
||||
<string name="error_showing_message">hiba az üzenet megjelenítésekor</string>
|
||||
<string name="you_can_make_address_visible_via_settings">Láthatóvá teheti SimpleX beli ismerősei számára a Beállításokban.</string>
|
||||
<string name="you_can_make_address_visible_via_settings">Láthatóvá teheti SimpleX-beli ismerősei számára a Beállításokban.</string>
|
||||
<string name="recent_history_is_sent_to_new_members">Legfeljebb az utolsó 100 üzenet kerül elküldésre az új tagok számára.</string>
|
||||
<string name="code_you_scanned_is_not_simplex_link_qr_code">A beolvasott kód nem egy SimpleX hivatkozás QR-kód.</string>
|
||||
<string name="the_text_you_pasted_is_not_a_link">A beillesztett szöveg nem egy SimpleX hivatkozás.</string>
|
||||
@@ -1532,7 +1532,7 @@
|
||||
<string name="add_contact_tab">Ismerős hozzáadása</string>
|
||||
<string name="tap_to_scan">Koppintson a beolvasáshoz</string>
|
||||
<string name="tap_to_paste_link">Koppintson a hivatkozás beillesztéséhez</string>
|
||||
<string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>Ismerős hozzáadása</b>: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő csatlakozáshoz.]]></string>
|
||||
<string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>Ismerős hozzáadása</b>: új meghívó hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.]]></string>
|
||||
<string name="create_group_button_to_create_new_group"><![CDATA[<b>Csoport létrehozása</b>: új csoport létrehozásához.]]></string>
|
||||
<string name="chat_is_stopped_you_should_transfer_database">A csevegés leállt. Ha már használta ezt az adatbázist egy másik eszközön, úgy visszaállítás szükséges a csevegés megkezdése előtt.</string>
|
||||
<string name="recent_history_is_not_sent_to_new_members">Az előzmények nem kerülnek elküldésre az új tagok számára.</string>
|
||||
@@ -1588,13 +1588,13 @@
|
||||
<string name="remote_host_error_busy"><![CDATA[A(z) <b>%s</b> mobil eszköz elfoglalt]]></string>
|
||||
<string name="past_member_vName">Legutóbbi tag %1$s</string>
|
||||
<string name="group_member_status_unknown">ismeretlen státusz</string>
|
||||
<string name="profile_update_event_member_name_changed">%1$s tag neve megváltozott erre: %2$s</string>
|
||||
<string name="profile_update_event_removed_address">törölt csatlakozási cím</string>
|
||||
<string name="profile_update_event_member_name_changed">%1$s megváltoztatta a nevét erre: %2$s</string>
|
||||
<string name="profile_update_event_removed_address">törölt kapcsolattartási azonosító</string>
|
||||
<string name="profile_update_event_removed_picture">törölt profilkép</string>
|
||||
<string name="profile_update_event_set_new_address">új kapcsolattartási cím beállítása</string>
|
||||
<string name="profile_update_event_set_new_address">új kapcsolattartási azonosító beállítása</string>
|
||||
<string name="profile_update_event_set_new_picture">új profilkép beállítása</string>
|
||||
<string name="profile_update_event_updated_profile">frissített profil</string>
|
||||
<string name="profile_update_event_contact_name_changed">%1$s ismerős neve megváltozott erre: %2$s</string>
|
||||
<string name="profile_update_event_contact_name_changed">%1$s megváltoztatta a nevét erre: %2$s</string>
|
||||
<string name="note_folder_local_display_name">Privát jegyzetek</string>
|
||||
<string name="error_deleting_note_folder">Hiba a privát jegyzetek törlésekor</string>
|
||||
<string name="error_creating_message">Hiba az üzenet létrehozásakor</string>
|
||||
@@ -1605,7 +1605,7 @@
|
||||
<string name="clear_note_folder_warning">Minden üzenet törlésre kerül – ez a művelet nem vonható vissza!</string>
|
||||
<string name="v5_5_message_delivery">Továbbfejlesztett üzenetküldés</string>
|
||||
<string name="v5_5_join_group_conversation">Csatlakozás csoportos beszélgetésekhez</string>
|
||||
<string name="v5_5_simpler_connect_ui">Hivatkozás beillesztése a csatlakozáshoz!</string>
|
||||
<string name="v5_5_simpler_connect_ui">Hivatkozás beillesztése a kapcsolódáshoz!</string>
|
||||
<string name="v5_5_private_notes">Privát jegyzetek</string>
|
||||
<string name="v5_5_simpler_connect_ui_descr">A keresősáv elfogadja a meghívó hivatkozásokat.</string>
|
||||
<string name="v5_5_private_notes_descr">Titkosított fájlokkal és médiatartalommal.</string>
|
||||
@@ -1644,7 +1644,7 @@
|
||||
<string name="migrate_from_device_all_data_will_be_uploaded">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.</string>
|
||||
<string name="v5_6_app_data_migration">Alkalmazásadatok átköltöztetése</string>
|
||||
<string name="migrate_from_device_archiving_database">Adatbázis archiválása</string>
|
||||
<string name="migrate_from_device_cancel_migration">Átköltöztetés megszakítása</string>
|
||||
<string name="migrate_from_device_cancel_migration">Átköltöztetés visszavonása</string>
|
||||
<string name="migrate_to_device_chat_migrated">A csevegés átköltöztetve!</string>
|
||||
<string name="migrate_from_device_check_connection_and_try_again">Ellenőrizze az internetkapcsolatot, és próbálja újra</string>
|
||||
<string name="migrate_from_device_creating_archive_link">Archív hivatkozás létrehozása</string>
|
||||
@@ -1675,7 +1675,7 @@
|
||||
<string name="migrate_to_device_import_failed">Sikertelen importálás</string>
|
||||
<string name="migrate_to_device_confirm_network_settings_footer">Ellenőrizze, hogy a hálózati beállítások megfelelőek-e ehhez az eszközhöz.</string>
|
||||
<string name="migrate_from_device_chat_should_be_stopped">A folytatáshoz a csevegést meg kell szakítani.</string>
|
||||
<string name="migrate_from_device_stopping_chat">Csevegés megszakítása</string>
|
||||
<string name="migrate_from_device_stopping_chat">Csevegés megállítása folyamatban</string>
|
||||
<string name="migrate_from_device_or_share_this_file_link">Vagy a fájl hivítkozásának biztonságos megosztása</string>
|
||||
<string name="migrate_from_device_start_chat">Csevegés indítása</string>
|
||||
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[<b>Nem szabad</b> ugyanazt az adatbázist használni egyszerre két eszközön.]]></string>
|
||||
@@ -1761,4 +1761,7 @@
|
||||
<string name="v5_7_forward">Üzenetek továbbítása és mentése</string>
|
||||
<string name="v5_7_call_sounds">Bejövő hívás csengőhangja</string>
|
||||
<string name="v5_7_forward_descr">Az üzenet forrása titokban marad.</string>
|
||||
<string name="settings_section_title_profile_images">Profilképek</string>
|
||||
<string name="v5_7_shape_profile_images">Profilkép alakzat</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Négyzet, kör vagy bármi a kettő között.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="#5f6368"><path d="M629-446.5H235.48q-13.79 0-23.64-9.79-9.84-9.79-9.84-23.5t9.84-23.71q9.85-10 23.64-10H629L455.79-686.71Q445.5-697 445.25-710.5t10.25-24.48q10.5-10.52 24-10.27t23.81 10.57L734.1-503.59q4.9 4.91 7.65 10.97 2.75 6.06 2.75 12.78 0 6.71-2.75 12.78Q739-461 734.5-456.5l-231 231q-11 11-23.75 10.5t-23.25-11.02Q446-237 446-250.42q0-13.41 10.5-23.58L629-446.5Z"/></svg>
|
||||
|
After Width: | Height: | Size: 472 B |
@@ -0,0 +1,4 @@
|
||||
<svg height="24" viewBox="0 -960 960 960" width="24" fill="#000000" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M 831.5 -480 L 657 -656.5 C 651.667 -662.167 648.917 -668.833 648.75 -676.5 C 648.583 -684.167 651.333 -690.833 657 -696.5 C 662.667 -702.5 669.333 -705.5 677 -705.5 C 684.667 -705.5 691.5 -702.667 697.5 -697 L 894 -500.5 C 897 -497.167 899.25 -493.917 900.75 -490.75 C 902.25 -487.583 903 -484 903 -480 C 903 -476 902.25 -472.417 900.75 -469.25 C 899.25 -466.083 897 -463 894 -460 L 697.5 -263.5 C 691.5 -257.5 684.667 -254.583 677 -254.75 C 669.333 -254.917 662.667 -257.833 657 -263.5 C 651 -269.5 648.167 -276.25 648.5 -283.75 C 648.833 -291.25 651.667 -297.833 657 -303.5 L 831.5 -480 Z M 128.5 -480 L 303 -303.5 C 308.333 -297.833 311.083 -291.167 311.25 -283.5 C 311.417 -275.833 308.667 -269.167 303 -263.5 C 297.333 -257.5 290.667 -254.5 283 -254.5 C 275.333 -254.5 268.667 -257.5 263 -263.5 L 66.5 -460 C 63.167 -463 60.833 -466.083 59.5 -469.25 C 58.167 -472.417 57.5 -476 57.5 -480 C 57.5 -484 58.167 -487.583 59.5 -490.75 C 60.833 -493.917 63.167 -497.167 66.5 -500.5 L 263 -697 C 268.667 -702.667 275.333 -705.417 283 -705.25 C 290.667 -705.083 297.5 -702.167 303.5 -696.5 C 309.167 -690.5 311.833 -683.75 311.5 -676.25 C 311.167 -668.75 308.333 -662.167 303 -656.5 L 128.5 -480 Z" transform="matrix(0.9999999999999999, 0, 0, 0.9999999999999999, 0, 0)"/>
|
||||
<rect x="123" y="-514" width="711.266" height="68" style="stroke: rgb(0, 0, 0);" transform="matrix(0.9999999999999999, 0, 0, 0.9999999999999999, 0, 0)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -1758,4 +1758,15 @@
|
||||
<string name="audio_device_wired_headphones">Cuffie</string>
|
||||
<string name="audio_device_speaker">Altoparlante</string>
|
||||
<string name="network_option_rcv_concurrency">Ricezione concomitanza</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Viene attivata nelle chat dirette!</string>
|
||||
<string name="v5_7_forward">Inoltra e salva i messaggi</string>
|
||||
<string name="v5_7_call_sounds_descr">Quando si connettono le chiamate audio e video.</string>
|
||||
<string name="v5_7_new_interface_languages">Interfaccia in lituano</string>
|
||||
<string name="v5_7_network_descr">Connessione di rete più affidabile.</string>
|
||||
<string name="v5_7_network">Gestione della rete</string>
|
||||
<string name="settings_section_title_profile_images">Immagini del profilo</string>
|
||||
<string name="v5_7_call_sounds">Suoni nelle chiamate</string>
|
||||
<string name="v5_7_forward_descr">La fonte del messaggio resta privata.</string>
|
||||
<string name="v5_7_shape_profile_images">Forma delle immagini del profilo</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Quadrata, circolare o qualsiasi forma tra le due</string>
|
||||
</resources>
|
||||
@@ -46,7 +46,7 @@
|
||||
<string name="bold_text">太文字</string>
|
||||
<string name="icon_descr_audio_call">音声通話</string>
|
||||
<string name="settings_audio_video_calls">音声とビデオ通話</string>
|
||||
<string name="impossible_to_recover_passphrase"><![CDATA[<b>※注意※</b>:喪失したら、パスフレーズの回復・変更ができません。]]></string>
|
||||
<string name="impossible_to_recover_passphrase"><![CDATA[<b>※注意※</b>:紛失するとパスフレーズの回復・変更ができません。]]></string>
|
||||
<string name="all_group_members_will_remain_connected">グループ全員の接続が継続します。</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">送信相手が消えるメッセージを送るのを許可する。</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">送信相手が永久メッセージ削除するのを許可する。(24時間)</string>
|
||||
@@ -179,7 +179,7 @@
|
||||
<string name="chat_is_stopped_indication">チャットが停止してます。</string>
|
||||
<string name="network_disable_socks_info">承諾すると、メッセージのサーバがIPアドレス、ISP、接続サーバを特定できます。</string>
|
||||
<string name="chat_preferences">チャット設定</string>
|
||||
<string name="clear_chat_button">消す</string>
|
||||
<string name="clear_chat_button">チャットを削除</string>
|
||||
<string name="icon_descr_close_button">閉じるボタン</string>
|
||||
<string name="clear_verification">未検証の状態に戻す</string>
|
||||
<string name="image_saved">画像をギャラリーに保存しました。</string>
|
||||
@@ -868,7 +868,7 @@
|
||||
<string name="smp_servers_scan_qr">サーバのQRコードを読み込む</string>
|
||||
<string name="smp_servers_test_some_failed">テストに失敗したサーバがあります:</string>
|
||||
<string name="use_simplex_chat_servers__question">SimpleX Chatサーバを使いますか?</string>
|
||||
<string name="using_simplex_chat_servers">SimpleX Chatを使っています。</string>
|
||||
<string name="using_simplex_chat_servers">SimpleX Chatサーバを使用中。</string>
|
||||
<string name="share_link">リンクを送る</string>
|
||||
<string name="core_simplexmq_version">simplexmq: バージョン%s (%2s)</string>
|
||||
<string name="callstate_waiting_for_answer">応答を待機中…</string>
|
||||
@@ -1766,4 +1766,7 @@
|
||||
<string name="network_option_rcv_concurrency">並列受信</string>
|
||||
<string name="recipients_can_not_see_who_message_from">受信者は発信者を特定できません。</string>
|
||||
<string name="saved_chat_item_info_tab">保存済</string>
|
||||
<string name="settings_section_title_profile_images">プロフィール画像</string>
|
||||
<string name="v5_7_shape_profile_images_descr">正方形、円形またはその中間</string>
|
||||
<string name="v5_7_shape_profile_images">プロフィール画像をシェイプ</string>
|
||||
</resources>
|
||||
@@ -1764,4 +1764,7 @@
|
||||
<string name="v5_7_call_sounds">Geluiden tijdens het bellen</string>
|
||||
<string name="v5_7_new_interface_languages">Litouwse gebruikersinterface</string>
|
||||
<string name="v5_7_network_descr">Betrouwbaardere netwerkverbinding.</string>
|
||||
<string name="v5_7_shape_profile_images">Vorm profiel afbeeldingen</string>
|
||||
<string name="settings_section_title_profile_images">Profiel afbeeldingen</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Vierkant, cirkel of iets daartussenin.</string>
|
||||
</resources>
|
||||
@@ -1753,4 +1753,20 @@
|
||||
<string name="saved_chat_item_info_tab">Zapisane</string>
|
||||
<string name="saved_description">zapisane</string>
|
||||
<string name="saved_from_description">zapisane od %s</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="v5_7_forward">Przesyłaj dalej i zapisuj wiadomości</string>
|
||||
<string name="audio_device_earpiece">Słuchawki douszne</string>
|
||||
<string name="audio_device_wired_headphones">Słuchawki</string>
|
||||
<string name="audio_device_speaker">Głośnik</string>
|
||||
<string name="v5_7_call_sounds_descr">Podczas łączenia połączeń audio i wideo.</string>
|
||||
<string name="v5_7_call_sounds">Dźwięki w rozmowie</string>
|
||||
<string name="settings_section_title_profile_images">Zdjęcia profilowe</string>
|
||||
<string name="network_option_rcv_concurrency">Konkurencyjne odbieranie</string>
|
||||
<string name="v5_7_new_interface_languages">Litewski interfejs użytkownika</string>
|
||||
<string name="v5_7_network_descr">Bardziej niezawodne połączenia sieciowe.</string>
|
||||
<string name="v5_7_network">Zarządzenie sieciowe</string>
|
||||
<string name="v5_7_shape_profile_images">Kształtuj obrazy profilowe</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Kwadrat, okrąg lub cokolwiek pomiędzy.</string>
|
||||
<string name="v5_7_forward_descr">Źródło wiadomości pozostaje prywatne.</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">Zostanie włączone w czatach bezpośrednich!</string>
|
||||
</resources>
|
||||
@@ -88,4 +88,71 @@
|
||||
<string name="permissions_camera_and_record_audio">Camera și microfon</string>
|
||||
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>Atenție</b>: arhiva va fi ștearsă.]]></string>
|
||||
<string name="icon_descr_cancel_file_preview">Anulează previzualizarea fișierului</string>
|
||||
<string name="empty_chat_profile_is_created">Un profil de conversație gol cu numele furnizat este creat, și aplicația se deschide ca de obicei.</string>
|
||||
<string name="connect_plan_already_connecting">Se conectează deja!</string>
|
||||
<string name="notifications_mode_off_desc">Aplicația poate primi notificări doar când rulează, niciun serviciu în fundal nu va fi lansat.</string>
|
||||
<string name="connect_plan_already_joining_the_group">Se alătură deja grupului!</string>
|
||||
<string name="notifications_mode_service">Mereu pornit</string>
|
||||
<string name="connect__a_new_random_profile_will_be_shared">Un nou profil aleatoriu va fi distribuit.</string>
|
||||
<string name="keychain_is_storing_securely">Android Keystore este folosit pentru a stoca în siguranță fraza de acces - permite serviciului de notificare să funcționeze.</string>
|
||||
<string name="rcv_group_and_other_events">și %d alte evenimente</string>
|
||||
<string name="answer_call">Răspunde la apel</string>
|
||||
<string name="keychain_allows_to_receive_ntfs">Android Keystore va fi folosit pentru a stoca în siguranță fraza de acces după ce repornești aplicația sau schimbi fraza de acces - va permite primirea notificărilor.</string>
|
||||
<string name="settings_section_title_app">APLICAȚIE</string>
|
||||
<string name="create_group_button">Creează grup</string>
|
||||
<string name="v4_6_audio_video_calls">Apeluri audio și video</string>
|
||||
<string name="migrate_from_device_archive_and_upload">Arhivează și încarcă</string>
|
||||
<string name="migrate_from_device_archiving_database">Bază de date de arhivare</string>
|
||||
<string name="migrate_from_device_creating_archive_link">Se creează un link de arhivare</string>
|
||||
<string name="share_one_time_link">Creează un link de invitare unic.</string>
|
||||
<string name="auto_accept_images">Acceptă automat imagini</string>
|
||||
<string name="call_service_notification_audio_call">Apel audio</string>
|
||||
<string name="icon_descr_audio_call">Apel audio</string>
|
||||
<string name="icon_descr_audio_off">Audio oprit</string>
|
||||
<string name="settings_section_title_icon">PICTOGRAMĂ APLICAȚIE</string>
|
||||
<string name="la_app_passcode">Cod de acces aplicație</string>
|
||||
<string name="create_secret_group_title">Creează grup secret</string>
|
||||
<string name="smp_server_test_create_queue">Creează coadă</string>
|
||||
<string name="notifications_mode_service_desc">Serviciul în fundal rulează mereu - notificările vor fi afișate imediat ce sunt disponibile.</string>
|
||||
<string name="la_authenticate">Autentificare</string>
|
||||
<string name="la_auth_failed">Autentificare eșuată</string>
|
||||
<string name="la_current_app_passcode">Codul de acces curent</string>
|
||||
<string name="auth_unavailable">Autentificare indisponibilă</string>
|
||||
<string name="attach">Atașează</string>
|
||||
<string name="back">Înapoi</string>
|
||||
<string name="create_group">Creează grup secret</string>
|
||||
<string name="creating_link">Se creează link…</string>
|
||||
<string name="audio_call_no_encryption">apel audio (necriptat e2e)</string>
|
||||
<string name="smp_server_test_create_file">Creează fișier</string>
|
||||
<string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>Adaugă contact</b>: pentru a crea un nou link de invitare, sau a te conecta printr-un link pe care l-ai primit.]]></string>
|
||||
<string name="authentication_cancelled">Autentificare anulată</string>
|
||||
<string name="app_passcode_replaced_with_self_destruct">Cod de acces aplicație este înlocuit cu cod de acces de autodistrugere.</string>
|
||||
<string name="audio_video_calls">Apeluri audio/video</string>
|
||||
<string name="available_in_v51">"
|
||||
\nDisponibil în v5.1"</string>
|
||||
<string name="v5_0_app_passcode">Cod de acces aplicație</string>
|
||||
<string name="v5_6_app_data_migration">Migrare date aplicație</string>
|
||||
<string name="agent_critical_error_title">Eroare critică</string>
|
||||
<string name="migrate_to_device_apply_onion">Aplică</string>
|
||||
<string name="create_profile">Creează profil</string>
|
||||
<string name="create_another_profile_button">Creează profil</string>
|
||||
<string name="v4_2_auto_accept_contact_requests">Acceptă automat cererile de contactare</string>
|
||||
<string name="custom_time_picker_custom">personalizat</string>
|
||||
<string name="maximum_supported_file_size">În prezent dimensiunea maximă pentru fișiere este %1$s.</string>
|
||||
<string name="create_simplex_address">Creează adresă SimpleX</string>
|
||||
<string name="auto_accept_contact">Acceptare automată</string>
|
||||
<string name="create_your_profile">Creează-ți profilul</string>
|
||||
<string name="settings_audio_video_calls">Apeluri audio și video</string>
|
||||
<string name="icon_descr_audio_on">Audio pornit</string>
|
||||
<string name="current_passphrase">Frază de acces curentă…</string>
|
||||
<string name="create_group_link">Creează link pentru grup</string>
|
||||
<string name="button_create_group_link">Creează link</string>
|
||||
<string name="group_member_status_creator">creator</string>
|
||||
<string name="color_background">Fundal</string>
|
||||
<string name="v5_3_new_desktop_app_descr">Creează profil nou în aplicația desktop. 💻</string>
|
||||
<string name="v5_3_encrypt_local_files_descr">Aplicația criptează fișierele locale noi (cu excepția videoclipurilor).</string>
|
||||
<string name="group_member_role_author">autor</string>
|
||||
<string name="v5_3_new_interface_languages_descr">Arabă, Bulgară, Finlandeză, Ebraică, Thailandeză și Ucraineană - mulțumită utilizatorilor și Weblate.</string>
|
||||
<string name="calls_prohibited_with_this_contact">Apelurile audio/video sunt interzise.</string>
|
||||
<string name="item_info_current">(prezent)</string>
|
||||
</resources>
|
||||
@@ -1530,7 +1530,7 @@
|
||||
<string name="multicast_discoverable_via_local_network">Yerel ağ üzerinden keşfedilebilir</string>
|
||||
<string name="info_row_updated_at">Kayıt güncellendi</string>
|
||||
<string name="smp_servers_use_server">Sunucu kullan</string>
|
||||
<string name="share_text_received_at">Şuradan alındı: %s</string>
|
||||
<string name="share_text_received_at">Alınma tarihi: %s</string>
|
||||
<string name="add_contact_tab">Kişi Ekle</string>
|
||||
<string name="v5_3_discover_join_groups_descr">- dizin hizmetine bağlan
|
||||
\n(BETADA!)
|
||||
@@ -1767,4 +1767,7 @@
|
||||
<string name="network_type_network_wifi">WiFi</string>
|
||||
<string name="v5_7_call_sounds_descr">Sesli ve görüntülü aramalara bağlanırken.</string>
|
||||
<string name="network_type_ethernet">Kablolu ethernet</string>
|
||||
<string name="settings_section_title_profile_images">Profil resimleri</string>
|
||||
<string name="v5_7_shape_profile_images">Profil resimlerini şekillendir</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Kare,daire, veya aralarında herhangi bir şey.</string>
|
||||
</resources>
|
||||
@@ -130,4 +130,46 @@
|
||||
<string name="la_authenticate">Xác thực</string>
|
||||
<string name="auth_unavailable">Quá trình xác thực không có sẵn</string>
|
||||
<string name="la_auth_failed">Quá trình xác thực đã thất bại</string>
|
||||
<string name="color_background">Phông nền</string>
|
||||
<string name="alert_title_msg_bad_hash">Hàm băm tin nhắn xấu</string>
|
||||
<string name="integrity_msg_bad_id">ID tin nhắn xấu</string>
|
||||
<string name="alert_title_msg_bad_id">ID tin nhắn xấu</string>
|
||||
<string name="notifications_mode_service_desc">Dịch vụ nền luôn luôn chạy - thông báo sẽ được hiển thị ngay khi nhận được tin nhắn.</string>
|
||||
<string name="v4_2_auto_accept_contact_requests">Tự động chấp nhận yêu cầu liên hệ</string>
|
||||
<string name="bad_desktop_address">Địa chỉ máy tính xấu</string>
|
||||
<string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>Thêm liên hệ</b>: để tạo liên kết mời mới, hoặc kết nối qua liên kết bạn nhận được.]]></string>
|
||||
<string name="integrity_msg_bad_hash">hàm băm tin nhắn xấu</string>
|
||||
<string name="available_in_v51">"
|
||||
\nCó sẵn ở v5.1"</string>
|
||||
<string name="auto_accept_contact">Tự động chấp nhận</string>
|
||||
<string name="back">Quay về</string>
|
||||
<string name="auto_accept_images">Tự động chấp nhận hình ảnh</string>
|
||||
<string name="audio_device_bluetooth">Bluetooth</string>
|
||||
<string name="v5_4_better_groups">Nhóm tốt hơn</string>
|
||||
<string name="v5_4_block_group_members">Chặn thành viên nhóm</string>
|
||||
<string name="rcv_group_event_member_blocked">đã chặn %s</string>
|
||||
<string name="v5_1_better_messages">Tin nhắn tốt hơn</string>
|
||||
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>Xin lưu ý</b>: việc sử dụng cùng một cơ sở dữ liệu trên hai thiết bị sẽ phá vỡ quá trình giải mã tin nhắn từ các kết nối của bạn, như một biện pháp bảo vệ.]]></string>
|
||||
<string name="create_group_button_to_create_new_group"><![CDATA[<b>Tạo nhóm</b>: để tạo một nhóm mới.]]></string>
|
||||
<string name="onboarding_notifications_mode_off_desc"><![CDATA[<b>Tốt nhất cho pin</b>. Bạn sẽ chỉ nhận được thông báo khi ứng dụng đang chạy (KHÔNG có dịch vụ nền).]]></string>
|
||||
<string name="impossible_to_recover_passphrase"><![CDATA[<b>Xin lưu ý</b>: bạn sẽ KHÔNG thể khôi phục hoặc thay đổi passphrase nếu bạn làm mất nó.]]></string>
|
||||
<string name="member_blocked_by_admin">Bị chặn bởi quản trị viên</string>
|
||||
<string name="block_member_button">Chặn thành viên</string>
|
||||
<string name="member_info_member_blocked">đã chặn</string>
|
||||
<string name="blocked_by_admin_item_description">bị chặn bởi quản trị viên</string>
|
||||
<string name="blocked_item_description">đã chặn</string>
|
||||
<string name="turning_off_service_and_periodic">Tính năng tối ưu hóa pin đang được kích hoạt, tắt dịch vụ nền và các yêu cầu định kỳ về tin nhắn mới. Bạn có thể kích hoạt lại chúng thông qua cài đặt.</string>
|
||||
<string name="it_can_disabled_via_settings_notifications_still_shown"><![CDATA[<b>Có thể tắt thông qua cài đặt</b> - thông báo vẫn sẽ được hiển thị khi ứng dụng đang chạy.]]></string>
|
||||
<string name="block_member_question">Chặn thành viên?</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">Cả bạn và liên hệ của bạn đều có thể xóa tin nhắn đã gửi mà không thể hoàn tác. (24 tiếng)</string>
|
||||
<string name="block_for_all">Chặn tất cả</string>
|
||||
<string name="block_for_all_question">Chặn thành viên cho tất cả?</string>
|
||||
<string name="block_member_confirmation">Chặn</string>
|
||||
<string name="both_you_and_your_contact_can_send_voice">Cả bạn và liên hệ của bạn đều có thể gửi tin nhắn thoại.</string>
|
||||
<string name="both_you_and_your_contact_can_make_calls">Cả bạn và liên hệ của bạn đều có thể thực hiện cuộc gọi.</string>
|
||||
<string name="bold_text">in đậm</string>
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">Cả bạn và liên hệ của bạn đều có thể gửi tin nhắn tự xóa.</string>
|
||||
<string name="both_you_and_your_contact_can_add_message_reactions">Cả bạn và liên hệ của bạn đều có thể thả cảm xúc tin nhắn.</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Xin lưu ý</b>: relay tin nhắn và tệp được kết nối thông qua SOCKS proxy. Các cuộc gọi và bản xem trước liên kết sử dụng kết nối trực tiếp.]]></string>
|
||||
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b>Tốt cho pin</b>. Dịch vụ nền kiểm tra tin nhắn 10 phút một lần. Bạn có thể bỏ lỡ các cuộc gọi hoặc tin nhắn khẩn cấp.]]></string>
|
||||
</resources>
|
||||
@@ -1766,4 +1766,7 @@
|
||||
<string name="v5_7_new_interface_languages">立陶宛语用户界面</string>
|
||||
<string name="v5_7_call_sounds_descr">连接音频和视频通话时。</string>
|
||||
<string name="v5_7_quantum_resistant_encryption_descr">将在私聊中启用!</string>
|
||||
<string name="settings_section_title_profile_images">个人资料图</string>
|
||||
<string name="v5_7_shape_profile_images">改变个人资料图形状</string>
|
||||
<string name="v5_7_shape_profile_images_descr">方形、圆形、或两者之间的任意形状</string>
|
||||
</resources>
|
||||
@@ -453,7 +453,11 @@ const processCommand = (function () {
|
||||
// For opus (where encodedFrame.type is not set) this is the TOC byte from
|
||||
// https://tools.ietf.org/html/rfc6716#section-3.1
|
||||
var _a;
|
||||
const capabilities = RTCRtpSender.getCapabilities("video");
|
||||
// Using RTCRtpReceiver instead of RTCRtpSender, see these lines:
|
||||
// - if (!is_recv_codec && !is_send_codec) {
|
||||
// + if (!is_recv_codec) {
|
||||
// https://webrtc.googlesource.com/src.git/+/db2f52ba88cf9f98211df2dabb3f8aca9251c4a2%5E%21/
|
||||
const capabilities = RTCRtpReceiver.getCapabilities("video");
|
||||
if (capabilities) {
|
||||
const { codecs } = capabilities;
|
||||
const selectedCodecIndex = codecs.findIndex((c) => c.mimeType === "video/VP8");
|
||||
@@ -464,7 +468,13 @@ const processCommand = (function () {
|
||||
// Firefox doesn't have this function implemented:
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1396922
|
||||
if (((_a = t.sender.track) === null || _a === void 0 ? void 0 : _a.kind) === "video" && t.setCodecPreferences) {
|
||||
t.setCodecPreferences(codecs);
|
||||
try {
|
||||
t.setCodecPreferences(codecs);
|
||||
}
|
||||
catch (error) {
|
||||
// Shouldn't be here but in case something goes wrong, it will allow to make a call with auto-selected codecs
|
||||
console.log("Failed to set codec preferences, trying without any preferences: " + error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+28
@@ -9,6 +9,7 @@ import java.io.File
|
||||
import java.net.URI
|
||||
import java.net.URLEncoder
|
||||
import chat.simplex.res.MR
|
||||
import java.awt.Desktop
|
||||
|
||||
actual fun UriHandler.sendEmail(subject: String, body: CharSequence) {
|
||||
val subjectEncoded = URLEncoder.encode(subject, "UTF-8").replace("+", "%20")
|
||||
@@ -41,3 +42,30 @@ actual fun shareFile(text: String, fileSource: CryptoFile) {
|
||||
}.launch(fileSource.filePath)
|
||||
}
|
||||
}
|
||||
|
||||
actual fun openFile(fileSource: CryptoFile) {
|
||||
try {
|
||||
val filePath = filePathForShare(fileSource) ?: return
|
||||
Desktop.getDesktop().open(File(filePath))
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to open the file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
}
|
||||
}
|
||||
|
||||
fun filePathForShare(fileSource: CryptoFile): String? {
|
||||
return if (fileSource.cryptoArgs != null) {
|
||||
val tmpFile = File(tmpDir, fileSource.filePath)
|
||||
tmpFile.deleteOnExit()
|
||||
try {
|
||||
decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs ?: return null, tmpFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
return null
|
||||
}
|
||||
tmpFile.absolutePath
|
||||
} else {
|
||||
getAppFilePath(fileSource.filePath)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-14
@@ -59,20 +59,7 @@ actual fun copyItemToClipboard(cItem: ChatItem, clipboard: ClipboardManager) = w
|
||||
}
|
||||
|
||||
if (fileSource != null) {
|
||||
val filePath: String = if (fileSource.cryptoArgs != null) {
|
||||
val tmpFile = File(tmpDir, fileSource.filePath)
|
||||
tmpFile.deleteOnExit()
|
||||
try {
|
||||
decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs ?: return@withLongRunningApi, tmpFile.absolutePath)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
|
||||
AlertManager.shared.showAlertMsg(title = generalGetString(MR.strings.error), text = e.stackTraceToString())
|
||||
return@withLongRunningApi
|
||||
}
|
||||
tmpFile.absolutePath
|
||||
} else {
|
||||
getAppFilePath(fileSource.filePath)
|
||||
}
|
||||
val filePath = filePathForShare(fileSource) ?: return@withLongRunningApi
|
||||
when {
|
||||
desktopPlatform.isWindows() -> clipboard.setText(AnnotatedString("\"${File(filePath).absolutePath}\""))
|
||||
else -> clipboard.setText(AnnotatedString(filePath))
|
||||
|
||||
@@ -26,11 +26,11 @@ android.enableJetifier=true
|
||||
kotlin.mpp.androidSourceSetLayoutVersion=2
|
||||
kotlin.jvm.target=11
|
||||
|
||||
android.version_name=5.7
|
||||
android.version_code=200
|
||||
android.version_name=5.8-beta.1
|
||||
android.version_code=209
|
||||
|
||||
desktop.version_name=5.7
|
||||
desktop.version_code=41
|
||||
desktop.version_name=5.8-beta.1
|
||||
desktop.version_code=46
|
||||
|
||||
kotlin.version=1.9.23
|
||||
gradle.plugin.version=8.2.0
|
||||
|
||||
@@ -14,6 +14,7 @@ module Directory.Events
|
||||
DirectoryRole (..),
|
||||
SDirectoryRole (..),
|
||||
crDirectoryEvent,
|
||||
directoryCmdTag,
|
||||
viewName,
|
||||
)
|
||||
where
|
||||
@@ -21,6 +22,8 @@ where
|
||||
import Control.Applicative ((<|>))
|
||||
import Data.Attoparsec.Text (Parser)
|
||||
import qualified Data.Attoparsec.Text as A
|
||||
import Data.Char (isSpace)
|
||||
import Data.Either (fromRight)
|
||||
import Data.Functor (($>))
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
@@ -34,13 +37,11 @@ import Simplex.Chat.Types
|
||||
import Simplex.Chat.Types.Shared
|
||||
import Simplex.Messaging.Encoding.String
|
||||
import Simplex.Messaging.Util ((<$?>))
|
||||
import Data.Char (isSpace)
|
||||
import Data.Either (fromRight)
|
||||
|
||||
data DirectoryEvent
|
||||
= DEContactConnected Contact
|
||||
| DEGroupInvitation {contact :: Contact, groupInfo :: GroupInfo, fromMemberRole :: GroupMemberRole, memberRole :: GroupMemberRole}
|
||||
| DEServiceJoinedGroup {contactId :: ContactId, groupInfo :: GroupInfo, hostMember :: GroupMember}
|
||||
| DEServiceJoinedGroup {contactId :: ContactId, groupInfo :: GroupInfo, hostMember :: GroupMember}
|
||||
| DEGroupUpdated {contactId :: ContactId, fromGroup :: GroupInfo, toGroup :: GroupInfo}
|
||||
| DEContactRoleChanged GroupInfo ContactId GroupMemberRole -- contactId here is the contact whose role changed
|
||||
| DEServiceRoleChanged GroupInfo GroupMemberRole
|
||||
@@ -140,25 +141,26 @@ directoryCmdP =
|
||||
cmdStrP =
|
||||
(tagP >>= \(ADCT u t) -> ADC u <$> (cmdP t <|> pure (DCCommandError t)))
|
||||
<|> pure (ADC SDRUser DCUnknownCommand)
|
||||
tagP = A.takeTill (== ' ') >>= \case
|
||||
"help" -> u DCHelp_
|
||||
"h" -> u DCHelp_
|
||||
"next" -> u DCSearchNext_
|
||||
"all" -> u DCAllGroups_
|
||||
"new" -> u DCRecentGroups_
|
||||
"submit" -> u DCSubmitGroup_
|
||||
"confirm" -> u DCConfirmDuplicateGroup_
|
||||
"list" -> u DCListUserGroups_
|
||||
"ls" -> u DCListUserGroups_
|
||||
"delete" -> u DCDeleteGroup_
|
||||
"approve" -> su DCApproveGroup_
|
||||
"reject" -> su DCRejectGroup_
|
||||
"suspend" -> su DCSuspendGroup_
|
||||
"resume" -> su DCResumeGroup_
|
||||
"last" -> su DCListLastGroups_
|
||||
"exec" -> su DCExecuteCommand_
|
||||
"x" -> su DCExecuteCommand_
|
||||
_ -> fail "bad command tag"
|
||||
tagP =
|
||||
A.takeTill (== ' ') >>= \case
|
||||
"help" -> u DCHelp_
|
||||
"h" -> u DCHelp_
|
||||
"next" -> u DCSearchNext_
|
||||
"all" -> u DCAllGroups_
|
||||
"new" -> u DCRecentGroups_
|
||||
"submit" -> u DCSubmitGroup_
|
||||
"confirm" -> u DCConfirmDuplicateGroup_
|
||||
"list" -> u DCListUserGroups_
|
||||
"ls" -> u DCListUserGroups_
|
||||
"delete" -> u DCDeleteGroup_
|
||||
"approve" -> su DCApproveGroup_
|
||||
"reject" -> su DCRejectGroup_
|
||||
"suspend" -> su DCSuspendGroup_
|
||||
"resume" -> su DCResumeGroup_
|
||||
"last" -> su DCListLastGroups_
|
||||
"exec" -> su DCExecuteCommand_
|
||||
"x" -> su DCExecuteCommand_
|
||||
_ -> fail "bad command tag"
|
||||
where
|
||||
u = pure . ADCT SDRUser
|
||||
su = pure . ADCT SDRSuperUser
|
||||
@@ -192,3 +194,23 @@ directoryCmdP =
|
||||
|
||||
viewName :: String -> String
|
||||
viewName n = if ' ' `elem` n then "'" <> n <> "'" else n
|
||||
|
||||
directoryCmdTag :: DirectoryCmd r -> Text
|
||||
directoryCmdTag = \case
|
||||
DCHelp -> "help"
|
||||
DCSearchGroup _ -> "search"
|
||||
DCSearchNext -> "next"
|
||||
DCAllGroups -> "all"
|
||||
DCRecentGroups -> "new"
|
||||
DCSubmitGroup _ -> "submit"
|
||||
DCConfirmDuplicateGroup {} -> "confirm"
|
||||
DCListUserGroups -> "list"
|
||||
DCDeleteGroup {} -> "delete"
|
||||
DCApproveGroup {} -> "approve"
|
||||
DCRejectGroup {} -> "reject"
|
||||
DCSuspendGroup {} -> "suspend"
|
||||
DCResumeGroup {} -> "resume"
|
||||
DCListLastGroups _ -> "last"
|
||||
DCExecuteCommand _ -> "exec"
|
||||
DCUnknownCommand -> "unknown"
|
||||
DCCommandError _ -> "error"
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
{-# LANGUAGE DuplicateRecordFields #-}
|
||||
{-# LANGUAGE GADTs #-}
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
{-# LANGUAGE NamedFieldPuns #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE MultiWayIf #-}
|
||||
|
||||
module Directory.Service
|
||||
( welcomeGetOpts,
|
||||
@@ -15,6 +15,7 @@ where
|
||||
import Control.Concurrent (forkIO)
|
||||
import Control.Concurrent.Async
|
||||
import Control.Concurrent.STM
|
||||
import Control.Logger.Simple
|
||||
import Control.Monad
|
||||
import qualified Data.ByteString.Char8 as B
|
||||
import Data.Maybe (fromMaybe, maybeToList)
|
||||
@@ -37,7 +38,7 @@ import Simplex.Chat.Options
|
||||
import Simplex.Chat.Protocol (MsgContent (..))
|
||||
import Simplex.Chat.Types
|
||||
import Simplex.Chat.Types.Shared
|
||||
import Simplex.Chat.View (serializeChatResponse, simplexChatContact)
|
||||
import Simplex.Chat.View (serializeChatResponse, simplexChatContact, viewContactName, viewGroupName)
|
||||
import Simplex.Messaging.Encoding.String
|
||||
import Simplex.Messaging.TMap (TMap)
|
||||
import qualified Simplex.Messaging.TMap as TM
|
||||
@@ -96,9 +97,11 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
DEUnsupportedMessage _ct _ciId -> pure ()
|
||||
DEItemEditIgnored _ct -> pure ()
|
||||
DEItemDeleteIgnored _ct -> pure ()
|
||||
DEContactCommand ct ciId aCmd -> case aCmd of
|
||||
ADC SDRUser cmd -> deUserCommand env ct ciId cmd
|
||||
ADC SDRSuperUser cmd -> deSuperUserCommand ct ciId cmd
|
||||
DEContactCommand ct ciId (ADC sUser cmd) -> do
|
||||
logInfo $ "command received " <> directoryCmdTag cmd
|
||||
case sUser of
|
||||
SDRUser -> deUserCommand env ct ciId cmd
|
||||
SDRSuperUser -> deSuperUserCommand ct ciId cmd
|
||||
where
|
||||
withSuperUsers action = void . forkIO $ forM_ superUsers $ \KnownContact {contactId} -> action contactId
|
||||
notifySuperUsers s = withSuperUsers $ \contactId -> sendMessage' cc contactId s
|
||||
@@ -107,7 +110,7 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
withGroupReg GroupInfo {groupId, localDisplayName} err action = do
|
||||
atomically (getGroupReg st groupId) >>= \case
|
||||
Just gr -> action gr
|
||||
Nothing -> putStrLn $ T.unpack $ "Error: " <> err <> ", group: " <> localDisplayName <> ", can't find group registration ID " <> tshow groupId
|
||||
Nothing -> logError $ "Error: " <> err <> ", group: " <> localDisplayName <> ", can't find group registration ID " <> tshow groupId
|
||||
groupInfoText GroupProfile {displayName = n, fullName = fn, description = d} =
|
||||
n <> (if n == fn || T.null fn then "" else " (" <> fn <> ")") <> maybe "" ("\nWelcome message:\n" <>) d
|
||||
userGroupReference gr GroupInfo {groupProfile = GroupProfile {displayName}} = userGroupReference' gr displayName
|
||||
@@ -152,23 +155,25 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
|
||||
deContactConnected :: Contact -> IO ()
|
||||
deContactConnected ct = when (contactDirect ct) $ do
|
||||
unless testing $ putStrLn $ T.unpack (localDisplayName' ct) <> " connected"
|
||||
logInfo $ (viewContactName ct) <> " connected"
|
||||
sendMessage cc ct $
|
||||
"Welcome to " <> serviceName <> " service!\n\
|
||||
\Send a search string to find groups or */help* to learn how to add groups to directory.\n\n\
|
||||
\For example, send _privacy_ to find groups about privacy.\n\
|
||||
\Or send */all* or */new* to list groups.\n\n\
|
||||
\Content and privacy policy: https://simplex.chat/docs/directory.html"
|
||||
("Welcome to " <> serviceName <> " service!\n")
|
||||
<> "Send a search string to find groups or */help* to learn how to add groups to directory.\n\n\
|
||||
\For example, send _privacy_ to find groups about privacy.\n\
|
||||
\Or send */all* or */new* to list groups.\n\n\
|
||||
\Content and privacy policy: https://simplex.chat/docs/directory.html"
|
||||
|
||||
deGroupInvitation :: Contact -> GroupInfo -> GroupMemberRole -> GroupMemberRole -> IO ()
|
||||
deGroupInvitation ct g@GroupInfo {groupProfile = GroupProfile {displayName, fullName}} fromMemberRole memberRole = do
|
||||
logInfo $ "invited to group " <> viewGroupName g <> " by " <> viewContactName ct
|
||||
case badRolesMsg $ groupRolesStatus fromMemberRole memberRole of
|
||||
Just msg -> sendMessage cc ct msg
|
||||
Nothing -> getDuplicateGroup g >>= \case
|
||||
Just DGUnique -> processInvitation ct g
|
||||
Just DGRegistered -> askConfirmation
|
||||
Just DGReserved -> sendMessage cc ct $ groupAlreadyListed g
|
||||
Nothing -> sendMessage cc ct "Error: getDuplicateGroup. Please notify the developers."
|
||||
Nothing ->
|
||||
getDuplicateGroup g >>= \case
|
||||
Just DGUnique -> processInvitation ct g
|
||||
Just DGRegistered -> askConfirmation
|
||||
Just DGReserved -> sendMessage cc ct $ groupAlreadyListed g
|
||||
Nothing -> sendMessage cc ct "Error: getDuplicateGroup. Please notify the developers."
|
||||
where
|
||||
askConfirmation = do
|
||||
ugrId <- addGroupReg st ct g GRSPendingConfirmation
|
||||
@@ -205,7 +210,8 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
_ -> Nothing
|
||||
|
||||
deServiceJoinedGroup :: ContactId -> GroupInfo -> GroupMember -> IO ()
|
||||
deServiceJoinedGroup ctId g owner =
|
||||
deServiceJoinedGroup ctId g owner = do
|
||||
logInfo $ "service joined group " <> viewGroupName g
|
||||
withGroupReg g "joined group" $ \gr ->
|
||||
when (ctId `isOwner` gr) $ do
|
||||
setGroupRegOwner st gr owner
|
||||
@@ -214,7 +220,8 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
sendChatCmd cc (APICreateGroupLink groupId GRMember) >>= \case
|
||||
CRGroupLinkCreated {connReqContact} -> do
|
||||
setGroupStatus st gr GRSPendingUpdate
|
||||
notifyOwner gr
|
||||
notifyOwner
|
||||
gr
|
||||
"Created the public link to join the group via this directory service that is always online.\n\n\
|
||||
\Please add it to the group welcome message.\n\
|
||||
\For example, add:"
|
||||
@@ -228,24 +235,26 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
_ -> notifyOwner gr $ unexpectedError "can't create group link"
|
||||
|
||||
deGroupUpdated :: ContactId -> GroupInfo -> GroupInfo -> IO ()
|
||||
deGroupUpdated ctId fromGroup toGroup =
|
||||
deGroupUpdated ctId fromGroup toGroup = do
|
||||
logInfo $ "group updated " <> viewGroupName toGroup
|
||||
unless (sameProfile p p') $ do
|
||||
withGroupReg toGroup "group updated" $ \gr -> do
|
||||
let userGroupRef = userGroupReference gr toGroup
|
||||
readTVarIO (groupRegStatus gr) >>= \case
|
||||
GRSPendingConfirmation -> pure ()
|
||||
GRSProposed -> pure ()
|
||||
GRSPendingUpdate -> groupProfileUpdate >>= \case
|
||||
GPNoServiceLink ->
|
||||
when (ctId `isOwner` gr) $ notifyOwner gr $ "The profile updated for " <> userGroupRef <> ", but the group link is not added to the welcome message."
|
||||
GPServiceLinkAdded
|
||||
| ctId `isOwner` gr -> groupLinkAdded gr
|
||||
| otherwise -> notifyOwner gr "The group link is added by another group member, your registration will not be processed.\n\nPlease update the group profile yourself."
|
||||
GPServiceLinkRemoved -> when (ctId `isOwner` gr) $ notifyOwner gr $ "The group link of " <> userGroupRef <> " is removed from the welcome message, please add it."
|
||||
GPHasServiceLink -> when (ctId `isOwner` gr) $ groupLinkAdded gr
|
||||
GPServiceLinkError -> do
|
||||
when (ctId `isOwner` gr) $ notifyOwner gr $ "Error: " <> serviceName <> " has no group link for " <> userGroupRef <> ". Please report the error to the developers."
|
||||
putStrLn $ "Error: no group link for " <> userGroupRef
|
||||
GRSPendingUpdate ->
|
||||
groupProfileUpdate >>= \case
|
||||
GPNoServiceLink ->
|
||||
when (ctId `isOwner` gr) $ notifyOwner gr $ "The profile updated for " <> userGroupRef <> ", but the group link is not added to the welcome message."
|
||||
GPServiceLinkAdded
|
||||
| ctId `isOwner` gr -> groupLinkAdded gr
|
||||
| otherwise -> notifyOwner gr "The group link is added by another group member, your registration will not be processed.\n\nPlease update the group profile yourself."
|
||||
GPServiceLinkRemoved -> when (ctId `isOwner` gr) $ notifyOwner gr $ "The group link of " <> userGroupRef <> " is removed from the welcome message, please add it."
|
||||
GPHasServiceLink -> when (ctId `isOwner` gr) $ groupLinkAdded gr
|
||||
GPServiceLinkError -> do
|
||||
when (ctId `isOwner` gr) $ notifyOwner gr $ "Error: " <> serviceName <> " has no group link for " <> userGroupRef <> ". Please report the error to the developers."
|
||||
logError $ "Error: no group link for " <> T.pack userGroupRef
|
||||
GRSPendingApproval n -> processProfileChange gr $ n + 1
|
||||
GRSActive -> processProfileChange gr 1
|
||||
GRSSuspended -> processProfileChange gr 1
|
||||
@@ -288,7 +297,7 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
notifyOwner gr $ "The group " <> userGroupRef <> " is updated!\nIt is hidden from the directory until approved."
|
||||
notifySuperUsers $ "The group " <> groupRef <> " is updated."
|
||||
checkRolesSendToApprove gr n'
|
||||
GPServiceLinkError -> putStrLn $ "Error: no group link for " <> groupRef <> " pending approval."
|
||||
GPServiceLinkError -> logError $ "Error: no group link for " <> T.pack groupRef <> " pending approval."
|
||||
groupProfileUpdate = profileUpdate <$> sendChatCmd cc (APIGetGroupLink groupId)
|
||||
where
|
||||
profileUpdate = \case
|
||||
@@ -297,7 +306,7 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
groupLink2 = safeDecodeUtf8 $ strEncode $ simplexChatContact connReqContact
|
||||
hadLinkBefore = groupLink1 `isInfix` description p || groupLink2 `isInfix` description p
|
||||
hasLinkNow = groupLink1 `isInfix` description p' || groupLink2 `isInfix` description p'
|
||||
in if
|
||||
in if
|
||||
| hadLinkBefore && hasLinkNow -> GPHasServiceLink
|
||||
| hadLinkBefore -> GPServiceLinkRemoved
|
||||
| hasLinkNow -> GPServiceLinkAdded
|
||||
@@ -311,18 +320,20 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
|
||||
sendToApprove :: GroupInfo -> GroupReg -> GroupApprovalId -> IO ()
|
||||
sendToApprove GroupInfo {groupProfile = p@GroupProfile {displayName, image = image'}} GroupReg {dbGroupId, dbContactId} gaId = do
|
||||
ct_ <- getContact cc dbContactId
|
||||
ct_ <- getContact cc dbContactId
|
||||
gr_ <- getGroupAndSummary cc dbGroupId
|
||||
let membersStr = maybe "" (\(_, s) -> "_" <> tshow (currentMembers s) <> " members_\n") gr_
|
||||
text = maybe ("The group ID " <> tshow dbGroupId <> " submitted: ") (\c -> localDisplayName' c <> " submitted the group ID " <> tshow dbGroupId <> ": ") ct_
|
||||
<> "\n" <> groupInfoText p <> "\n" <> membersStr <> "\nTo approve send:"
|
||||
text =
|
||||
maybe ("The group ID " <> tshow dbGroupId <> " submitted: ") (\c -> localDisplayName' c <> " submitted the group ID " <> tshow dbGroupId <> ": ") ct_
|
||||
<> ("\n" <> groupInfoText p <> "\n" <> membersStr <> "\nTo approve send:")
|
||||
msg = maybe (MCText text) (\image -> MCImage {text, image}) image'
|
||||
withSuperUsers $ \cId -> do
|
||||
sendComposedMessage' cc cId Nothing msg
|
||||
sendMessage' cc cId $ "/approve " <> show dbGroupId <> ":" <> viewName (T.unpack displayName) <> " " <> show gaId
|
||||
|
||||
deContactRoleChanged :: GroupInfo -> ContactId -> GroupMemberRole -> IO ()
|
||||
deContactRoleChanged g@GroupInfo {membership = GroupMember {memberRole = serviceRole}} ctId contactRole =
|
||||
deContactRoleChanged g@GroupInfo {membership = GroupMember {memberRole = serviceRole}} ctId contactRole = do
|
||||
logInfo $ "contact ID " <> tshow ctId <> " role changed in group " <> viewGroupName g <> " to " <> tshow contactRole
|
||||
withGroupReg g "contact role changed" $ \gr -> do
|
||||
let userGroupRef = userGroupReference gr g
|
||||
uCtRole = "Your role in the group " <> userGroupRef <> " is changed to " <> ctRole
|
||||
@@ -348,6 +359,7 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
|
||||
deServiceRoleChanged :: GroupInfo -> GroupMemberRole -> IO ()
|
||||
deServiceRoleChanged g serviceRole = do
|
||||
logInfo $ "service role changed in group " <> viewGroupName g <> " to " <> tshow serviceRole
|
||||
withGroupReg g "service role changed" $ \gr -> do
|
||||
let userGroupRef = userGroupReference gr g
|
||||
uSrvRole = serviceName <> " role in the group " <> userGroupRef <> " is changed to " <> srvRole
|
||||
@@ -371,11 +383,12 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
srvRole = "*" <> B.unpack (strEncode serviceRole) <> "*"
|
||||
suSrvRole = "(" <> serviceName <> " role is changed to " <> srvRole <> ")."
|
||||
whenContactIsOwner gr action =
|
||||
getGroupMember gr >>=
|
||||
mapM_ (\cm@GroupMember {memberRole} -> when (memberRole == GROwner && memberActive cm) action)
|
||||
getGroupMember gr
|
||||
>>= mapM_ (\cm@GroupMember {memberRole} -> when (memberRole == GROwner && memberActive cm) action)
|
||||
|
||||
deContactRemovedFromGroup :: ContactId -> GroupInfo -> IO ()
|
||||
deContactRemovedFromGroup ctId g =
|
||||
deContactRemovedFromGroup ctId g = do
|
||||
logInfo $ "contact ID " <> tshow ctId <> " removed from group " <> viewGroupName g
|
||||
withGroupReg g "contact removed" $ \gr -> do
|
||||
when (ctId `isOwner` gr) $ do
|
||||
setGroupStatus st gr GRSRemoved
|
||||
@@ -383,7 +396,8 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
notifySuperUsers $ "The group " <> groupReference g <> " is de-listed (group owner is removed)."
|
||||
|
||||
deContactLeftGroup :: ContactId -> GroupInfo -> IO ()
|
||||
deContactLeftGroup ctId g =
|
||||
deContactLeftGroup ctId g = do
|
||||
logInfo $ "contact ID " <> tshow ctId <> " left group " <> viewGroupName g
|
||||
withGroupReg g "contact left" $ \gr -> do
|
||||
when (ctId `isOwner` gr) $ do
|
||||
setGroupStatus st gr GRSRemoved
|
||||
@@ -391,7 +405,8 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
notifySuperUsers $ "The group " <> groupReference g <> " is de-listed (group owner left)."
|
||||
|
||||
deServiceRemovedFromGroup :: GroupInfo -> IO ()
|
||||
deServiceRemovedFromGroup g =
|
||||
deServiceRemovedFromGroup g = do
|
||||
logInfo $ "service removed from group " <> viewGroupName g
|
||||
withGroupReg g "service removed" $ \gr -> do
|
||||
setGroupStatus st gr GRSRemoved
|
||||
notifyOwner gr $ serviceName <> " is removed from the group " <> userGroupReference gr g <> ".\n\nThe group is no longer listed in the directory."
|
||||
@@ -402,11 +417,15 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
DCHelp ->
|
||||
sendMessage cc ct $
|
||||
"You must be the owner to add the group to the directory:\n\
|
||||
\1. Invite " <> serviceName <> " bot to your group as *admin* (you can send `/list` to see all groups you submitted).\n\
|
||||
\2. " <> serviceName <> " bot will create a public group link for the new members to join even when you are offline.\n\
|
||||
\3. You will then need to add this link to the group welcome message.\n\
|
||||
\4. Once the link is added, service admins will approve the group (it can take up to 24 hours), and everybody will be able to find it in directory.\n\n\
|
||||
\Start from inviting the bot to your group as admin - it will guide you through the process"
|
||||
\1. Invite "
|
||||
<> serviceName
|
||||
<> " bot to your group as *admin* (you can send `/list` to see all groups you submitted).\n\
|
||||
\2. "
|
||||
<> serviceName
|
||||
<> " bot will create a public group link for the new members to join even when you are offline.\n\
|
||||
\3. You will then need to add this link to the group welcome message.\n\
|
||||
\4. Once the link is added, service admins will approve the group (it can take up to 24 hours), and everybody will be able to find it in directory.\n\n\
|
||||
\Start from inviting the bot to your group as admin - it will guide you through the process"
|
||||
DCSearchGroup s -> withFoundListedGroups (Just s) $ sendSearchResults s
|
||||
DCSearchNext ->
|
||||
atomically (TM.lookup (contactId' ct) searchRequests) >>= \case
|
||||
@@ -434,13 +453,13 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
Nothing -> sendReply $ "Group ID " <> show ugrId <> " not found"
|
||||
Just g@GroupInfo {groupProfile = GroupProfile {displayName}}
|
||||
| displayName == gName ->
|
||||
readTVarIO groupRegStatus >>= \case
|
||||
GRSPendingConfirmation -> do
|
||||
getDuplicateGroup g >>= \case
|
||||
Nothing -> sendMessage cc ct "Error: getDuplicateGroup. Please notify the developers."
|
||||
Just DGReserved -> sendMessage cc ct $ groupAlreadyListed g
|
||||
_ -> processInvitation ct g
|
||||
_ -> sendReply $ "Error: the group ID " <> show ugrId <> " (" <> T.unpack displayName <> ") is not pending confirmation."
|
||||
readTVarIO groupRegStatus >>= \case
|
||||
GRSPendingConfirmation -> do
|
||||
getDuplicateGroup g >>= \case
|
||||
Nothing -> sendMessage cc ct "Error: getDuplicateGroup. Please notify the developers."
|
||||
Just DGReserved -> sendMessage cc ct $ groupAlreadyListed g
|
||||
_ -> processInvitation ct g
|
||||
_ -> sendReply $ "Error: the group ID " <> show ugrId <> " (" <> T.unpack displayName <> ") is not pending confirmation."
|
||||
| otherwise -> sendReply $ "Group ID " <> show ugrId <> " has the display name " <> T.unpack displayName
|
||||
DCListUserGroups ->
|
||||
atomically (getUserGroupRegs st $ contactId' ct) >>= \grs -> do
|
||||
@@ -462,7 +481,7 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
let gs' = takeTop searchResults gs
|
||||
moreGroups = length gs - length gs'
|
||||
more = if moreGroups > 0 then ", sending top " <> show (length gs') else ""
|
||||
sendReply $ "Found " <> show (length gs) <> " group(s)" <> more <> "."
|
||||
sendReply $ "Found " <> show (length gs) <> " group(s)" <> more <> "."
|
||||
updateSearchRequest (STSearch s) $ groupIds gs'
|
||||
sendFoundGroups gs' moreGroups
|
||||
sendAllGroups takeFirst sortName searchType = \case
|
||||
@@ -499,74 +518,76 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
msg = maybe (MCText text) (\image -> MCImage {text, image}) image_
|
||||
sendComposedMessage cc ct Nothing msg
|
||||
when (moreGroups > 0) $
|
||||
sendComposedMessage cc ct Nothing $ MCText $ "Send */next* or just *.* for " <> tshow moreGroups <> " more result(s)."
|
||||
sendComposedMessage cc ct Nothing $
|
||||
MCText $
|
||||
"Send */next* or just *.* for " <> tshow moreGroups <> " more result(s)."
|
||||
|
||||
deSuperUserCommand :: Contact -> ChatItemId -> DirectoryCmd 'DRSuperUser -> IO ()
|
||||
deSuperUserCommand ct ciId cmd
|
||||
| superUser `elem` superUsers = case cmd of
|
||||
DCApproveGroup {groupId, displayName = n, groupApprovalId} -> do
|
||||
getGroupAndReg groupId n >>= \case
|
||||
Nothing -> sendReply $ "The group " <> groupRef <> " not found (getGroupAndReg)."
|
||||
Just (g, gr) ->
|
||||
readTVarIO (groupRegStatus gr) >>= \case
|
||||
GRSPendingApproval gaId
|
||||
| gaId == groupApprovalId -> do
|
||||
getDuplicateGroup g >>= \case
|
||||
Nothing -> sendReply "Error: getDuplicateGroup. Please notify the developers."
|
||||
Just DGReserved -> sendReply $ "The group " <> groupRef <> " is already listed in the directory."
|
||||
_ -> do
|
||||
getGroupRolesStatus g gr >>= \case
|
||||
Just GRSOk -> do
|
||||
setGroupStatus st gr GRSActive
|
||||
sendReply "Group approved!"
|
||||
notifyOwner gr $ "The group " <> userGroupReference' gr n <> " is approved and listed in directory!\nPlease note: if you change the group profile it will be hidden from directory until it is re-approved."
|
||||
Just GRSServiceNotAdmin -> replyNotApproved serviceNotAdmin
|
||||
Just GRSContactNotOwner -> replyNotApproved "user is not an owner."
|
||||
Just GRSBadRoles -> replyNotApproved $ "user is not an owner, " <> serviceNotAdmin
|
||||
Nothing -> sendReply "Error: getGroupRolesStatus. Please notify the developers."
|
||||
where
|
||||
replyNotApproved reason = sendReply $ "Group is not approved: " <> reason
|
||||
serviceNotAdmin = serviceName <> " is not an admin."
|
||||
| otherwise -> sendReply "Incorrect approval code"
|
||||
_ -> sendReply $ "Error: the group " <> groupRef <> " is not pending approval."
|
||||
where
|
||||
groupRef = groupReference' groupId n
|
||||
DCRejectGroup _gaId _gName -> pure ()
|
||||
DCSuspendGroup groupId gName -> do
|
||||
let groupRef = groupReference' groupId gName
|
||||
getGroupAndReg groupId gName >>= \case
|
||||
Nothing -> sendReply $ "The group " <> groupRef <> " not found (getGroupAndReg)."
|
||||
Just (_, gr) ->
|
||||
readTVarIO (groupRegStatus gr) >>= \case
|
||||
GRSActive -> do
|
||||
setGroupStatus st gr GRSSuspended
|
||||
notifyOwner gr $ "The group " <> userGroupReference' gr gName <> " is suspended and hidden from directory. Please contact the administrators."
|
||||
sendReply "Group suspended!"
|
||||
_ -> sendReply $ "The group " <> groupRef <> " is not active, can't be suspended."
|
||||
DCResumeGroup groupId gName -> do
|
||||
let groupRef = groupReference' groupId gName
|
||||
getGroupAndReg groupId gName >>= \case
|
||||
Nothing -> sendReply $ "The group " <> groupRef <> " not found (getGroupAndReg)."
|
||||
Just (_, gr) ->
|
||||
readTVarIO (groupRegStatus gr) >>= \case
|
||||
GRSSuspended -> do
|
||||
setGroupStatus st gr GRSActive
|
||||
notifyOwner gr $ "The group " <> userGroupReference' gr gName <> " is listed in the directory again!"
|
||||
sendReply "Group listing resumed!"
|
||||
_ -> sendReply $ "The group " <> groupRef <> " is not suspended, can't be resumed."
|
||||
DCListLastGroups count ->
|
||||
readTVarIO (groupRegs st) >>= \grs -> do
|
||||
sendReply $ show (length grs) <> " registered group(s)" <> (if length grs > count then ", showing the last " <> show count else "")
|
||||
void . forkIO $ forM_ (reverse $ take count grs) $ \gr@GroupReg {dbGroupId, dbContactId} -> do
|
||||
ct_ <- getContact cc dbContactId
|
||||
let ownerStr = "Owner: " <> maybe "getContact error" localDisplayName' ct_
|
||||
sendGroupInfo ct gr dbGroupId $ Just ownerStr
|
||||
DCExecuteCommand cmdStr ->
|
||||
sendChatCmdStr cc cmdStr >>= \r -> do
|
||||
ts <- getCurrentTime
|
||||
tz <- getCurrentTimeZone
|
||||
sendReply $ serializeChatResponse (Nothing, Just user) ts tz Nothing r
|
||||
DCCommandError tag -> sendReply $ "Command error: " <> show tag
|
||||
DCApproveGroup {groupId, displayName = n, groupApprovalId} ->
|
||||
getGroupAndReg groupId n >>= \case
|
||||
Nothing -> sendReply $ "The group " <> groupRef <> " not found (getGroupAndReg)."
|
||||
Just (g, gr) ->
|
||||
readTVarIO (groupRegStatus gr) >>= \case
|
||||
GRSPendingApproval gaId
|
||||
| gaId == groupApprovalId -> do
|
||||
getDuplicateGroup g >>= \case
|
||||
Nothing -> sendReply "Error: getDuplicateGroup. Please notify the developers."
|
||||
Just DGReserved -> sendReply $ "The group " <> groupRef <> " is already listed in the directory."
|
||||
_ -> do
|
||||
getGroupRolesStatus g gr >>= \case
|
||||
Just GRSOk -> do
|
||||
setGroupStatus st gr GRSActive
|
||||
sendReply "Group approved!"
|
||||
notifyOwner gr $ "The group " <> userGroupReference' gr n <> " is approved and listed in directory!\nPlease note: if you change the group profile it will be hidden from directory until it is re-approved."
|
||||
Just GRSServiceNotAdmin -> replyNotApproved serviceNotAdmin
|
||||
Just GRSContactNotOwner -> replyNotApproved "user is not an owner."
|
||||
Just GRSBadRoles -> replyNotApproved $ "user is not an owner, " <> serviceNotAdmin
|
||||
Nothing -> sendReply "Error: getGroupRolesStatus. Please notify the developers."
|
||||
where
|
||||
replyNotApproved reason = sendReply $ "Group is not approved: " <> reason
|
||||
serviceNotAdmin = serviceName <> " is not an admin."
|
||||
| otherwise -> sendReply "Incorrect approval code"
|
||||
_ -> sendReply $ "Error: the group " <> groupRef <> " is not pending approval."
|
||||
where
|
||||
groupRef = groupReference' groupId n
|
||||
DCRejectGroup _gaId _gName -> pure ()
|
||||
DCSuspendGroup groupId gName -> do
|
||||
let groupRef = groupReference' groupId gName
|
||||
getGroupAndReg groupId gName >>= \case
|
||||
Nothing -> sendReply $ "The group " <> groupRef <> " not found (getGroupAndReg)."
|
||||
Just (_, gr) ->
|
||||
readTVarIO (groupRegStatus gr) >>= \case
|
||||
GRSActive -> do
|
||||
setGroupStatus st gr GRSSuspended
|
||||
notifyOwner gr $ "The group " <> userGroupReference' gr gName <> " is suspended and hidden from directory. Please contact the administrators."
|
||||
sendReply "Group suspended!"
|
||||
_ -> sendReply $ "The group " <> groupRef <> " is not active, can't be suspended."
|
||||
DCResumeGroup groupId gName -> do
|
||||
let groupRef = groupReference' groupId gName
|
||||
getGroupAndReg groupId gName >>= \case
|
||||
Nothing -> sendReply $ "The group " <> groupRef <> " not found (getGroupAndReg)."
|
||||
Just (_, gr) ->
|
||||
readTVarIO (groupRegStatus gr) >>= \case
|
||||
GRSSuspended -> do
|
||||
setGroupStatus st gr GRSActive
|
||||
notifyOwner gr $ "The group " <> userGroupReference' gr gName <> " is listed in the directory again!"
|
||||
sendReply "Group listing resumed!"
|
||||
_ -> sendReply $ "The group " <> groupRef <> " is not suspended, can't be resumed."
|
||||
DCListLastGroups count ->
|
||||
readTVarIO (groupRegs st) >>= \grs -> do
|
||||
sendReply $ show (length grs) <> " registered group(s)" <> (if length grs > count then ", showing the last " <> show count else "")
|
||||
void . forkIO $ forM_ (reverse $ take count grs) $ \gr@GroupReg {dbGroupId, dbContactId} -> do
|
||||
ct_ <- getContact cc dbContactId
|
||||
let ownerStr = "Owner: " <> maybe "getContact error" localDisplayName' ct_
|
||||
sendGroupInfo ct gr dbGroupId $ Just ownerStr
|
||||
DCExecuteCommand cmdStr ->
|
||||
sendChatCmdStr cc cmdStr >>= \r -> do
|
||||
ts <- getCurrentTime
|
||||
tz <- getCurrentTimeZone
|
||||
sendReply $ serializeChatResponse (Nothing, Just user) ts tz Nothing r
|
||||
DCCommandError tag -> sendReply $ "Command error: " <> show tag
|
||||
| otherwise = sendReply "You are not allowed to use this command"
|
||||
where
|
||||
superUser = KnownContact {contactId = contactId' ct, localDisplayName = localDisplayName' ct}
|
||||
@@ -577,8 +598,9 @@ directoryService st DirectoryOpts {superUsers, serviceName, searchResults, testi
|
||||
getGroup cc gId
|
||||
$>>= \g@GroupInfo {groupProfile = GroupProfile {displayName}} ->
|
||||
if displayName == gName
|
||||
then atomically (getGroupReg st gId)
|
||||
$>>= \gr -> pure $ Just (g, gr)
|
||||
then
|
||||
atomically (getGroupReg st gId)
|
||||
$>>= \gr -> pure $ Just (g, gr)
|
||||
else pure Nothing
|
||||
|
||||
sendGroupInfo :: Contact -> GroupReg -> GroupId -> Maybe Text -> IO ()
|
||||
|
||||
@@ -14,7 +14,7 @@ permalink: "/blog/20221206-simplex-chat-v4.3-voice-messages.html"
|
||||
|
||||
## SimpleX Chat reviews
|
||||
|
||||
Since we published [the security assessment of SimpleX Chat](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html) completed by Trail of Bits in November, several sites published the reviews and included it in their recommendations:
|
||||
Since we published [the security assessment of SimpleX Chat](./20221108-simplex-chat-v4.2-security-audit-new-website.md) completed by Trail of Bits in November, several sites published the reviews and included it in their recommendations:
|
||||
|
||||
- Privacy Guides added SimpleX Chat to [the recommended private and secure messengers](https://www.privacyguides.org/real-time-communication/#simplex-chat).
|
||||
- Mike Kuketz – a well-known security expert – published [the review of SimpleX Chat](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/) and added it to [the messenger matrix](https://www.messenger-matrix.de).
|
||||
|
||||
@@ -42,7 +42,7 @@ Many large tech companies prioritizing value extraction over value creation earn
|
||||
|
||||
We started working full-time on the project in 2021 when [Portman Wills](https://www.linkedin.com/in/portmanwills/) and [Peter Briffett](https://www.linkedin.com/in/peterbriffett/) (the founders of [Wagestream](https://wagestream.com/en/) where I led the engineering team) supported the company very early on, and several other angel investors joined later. In July 2022 SimpleX Chat raised a pre-seed funding from the VC fund [Village Global](https://www.villageglobal.vc) - its co-founder [Ben Casnocha](https://casnocha.com) was very excited about our vision of privacy-first fully decentralized messaging and community platform, both for the individual users and for the companies, independent of any crypto-currencies, that might grow to replace large centralized platforms, such as WhatsApp, Telegram and Signal.
|
||||
|
||||
Overall we raised from our investors approximately $370,000 for a small share of the company to allow the project team working full time for almost two years, funding product design and development, infrastructure, and also [the security assessment by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). A large part of this money is not spent yet.
|
||||
Overall we raised from our investors approximately $370,000 for a small share of the company to allow the project team working full time for almost two years, funding product design and development, infrastructure, and also [the security assessment by Trail of Bits](./20221108-simplex-chat-v4.2-security-audit-new-website.md). A large part of this money is not spent yet.
|
||||
|
||||
The project was hugely supported by the users as well - collectively, [you donated](https://github.com/simplex-chat/simplex-chat#help-us-with-donations) over $25,000. Without these donations the investment we raised would not be possible, because we believe that voluntary user donations can sustain the project in the long term – it already covers all infrastructure costs. There are only two ways an Internet service can exist - either users are paying for it, or the users data becomes the product for the real customers, as happened with many large Internet companies. In the latter case the users are losing much more money than they are saving by giving away their privacy and the rights to the content they create on the centralized platforms.
|
||||
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ Other limitations of the desktop app:
|
||||
- you cannot send voice messages.
|
||||
- there is no support for calls yet.
|
||||
|
||||
You can download the desktop app for Linux and Mac via [downloads page](https://simplex.chat/downloads). Windows version will be available soon.
|
||||
You can download the desktop app for Linux and Mac via [downloads page](../docs/DOWNLOADS.md). Windows version will be available soon.
|
||||
|
||||
## Group directory service and other group improvements
|
||||
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ This is only possible when both devices are connected to the same local network.
|
||||
|
||||
**On desktop**
|
||||
|
||||
If you don't have desktop app installed yet, [download it](https://simplex.chat/downloads/) and create any chat profile - you don't need to use it, and when you create it there are no server requests sent and no accounts are created. Think about it as about user profile on your computer.
|
||||
If you don't have desktop app installed yet, [download it](../docs/DOWNLOADS.md) and create any chat profile - you don't need to use it, and when you create it there are no server requests sent and no accounts are created. Think about it as about user profile on your computer.
|
||||
|
||||
Then in desktop app settings choose *Link a mobile* - it will show a QR code.
|
||||
|
||||
|
||||
+9
-7
@@ -10,6 +10,8 @@ permalink: "/blog/20240314-simplex-chat-v5-6-quantum-resistance-signal-double-ra
|
||||
|
||||
# SimpleX Chat v5.6 beta: adding quantum resistance to Signal double ratchet algorithm
|
||||
|
||||
**Published:** Mar 14, 2024
|
||||
|
||||
This is a major upgrade for SimpleX messaging protocols, we are really proud to present the results of the hard work of our whole team on the [Pi day](https://en.wikipedia.org/wiki/Pi_Day).
|
||||
|
||||
This post also covers various aspects of end-to-end encryption, compares different messengers, and explains why and how quantum-resistant encryption is added to SimpleX Chat:
|
||||
@@ -17,12 +19,12 @@ This post also covers various aspects of end-to-end encryption, compares differe
|
||||
- [Why do we need end-to-end encryption?](#why-do-we-need-end-to-end-encryption)
|
||||
- [Why is encryption even allowed?](#why-is-encryption-even-allowed)
|
||||
- [End-to-end encryption security: attacks and defense.](#end-to-end-encryption-security-attacks-and-defense)
|
||||
- Compromised message size - mitigated by padding messages to a fixed block size.
|
||||
- Compromised confidentiality - mitigated by repudiation (deniability).
|
||||
- Compromised message keys - mitigated by forward secrecy.
|
||||
- Compromised long-term or session - mitigated by break-in recovery.
|
||||
- Man-in-the-middle attack - mitigated by two-factor key exchange.
|
||||
- "Record now, decrypt later" attacks - mitigated by post-quantum cryptography.
|
||||
1. Compromised message size - mitigated by padding messages to a fixed block size.
|
||||
2. Compromised confidentiality - mitigated by repudiation (deniability).
|
||||
3. Compromised message keys - mitigated by forward secrecy.
|
||||
4. Compromised long-term or session - mitigated by break-in recovery.
|
||||
5. Man-in-the-middle attack - mitigated by two-factor key exchange.
|
||||
6. "Record now, decrypt later" attacks - mitigated by post-quantum cryptography.
|
||||
- [How secure is encryption in different messengers?](#how-secure-is-end-to-end-encryption-in-different-messengers)
|
||||
- [Adding quantum resistance to Signal double ratchet algorithm.](#adding-quantum-resistance-to-signal-double-ratchet-algorithm)
|
||||
- [When can you start using quantum resistant chats?](#when-can-you-start-using-quantum-resistant-chats)
|
||||
@@ -101,7 +103,7 @@ This attack is much less understood by the users, and forward secrecy does not p
|
||||
|
||||
Out of all encryption algorithms known to us only _Signal double ratchet algorithm_ (also referred to as _Signal algorithm_ or _double ratchet algorithm_, which is not the same as Signal messaging platform and protocols) provides the ability for the encryption security to recover after break-ins attacks. This recovery happens automatically and transparently to the users, without them doing anything special or even knowing about break-in, by simply sending messages. Every time one of the communication parties replies to another party message, new random keys are generated and previously stolen keys become useless.
|
||||
|
||||
Double ratchet algorithm is used in Signal, Cwtch and SimpleX Chat. This is why you cannot use SimpleX Chat profile on more than one device at the same time - the encryption scheme rotates the long term keys, randomly, and keys on another device become useless, as they would become useless for the attacker who stole them. Security always has some costs to the convenience.
|
||||
Double ratchet algorithm is used in Signal, Cwtch and SimpleX Chat. But Signal app by allowing to use the same profile on multiple devices compromises the break-in recovery function of Signal algorithm, as explained in [this paper](https://eprint.iacr.org/2021/626.pdf). Because of break-in recovery you cannot use SimpleX Chat profile on more than one device at the same time - the encryption scheme rotates the long term keys, randomly, and keys on another device become useless, as they would become useless for the attacker who stole them. Security always has some costs to the convenience.
|
||||
|
||||
### 5. Man-in-the-middle attack - mitigated by two-factor key exchange
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ For example, while WhatsApp messages are [end-to-end encrypted](https://faq.what
|
||||
|
||||
This is called [metadata](https://en.wikipedia.org/wiki/Metadata). It reveals a wealth of information about you and your connections, and in the hands of a centralized monopoly, this can and does get misused in incredibly dangerous ways. Once such metadata is logged, it can create very detailed profiles about who you are, everywhere you’ve been, and everyone you’ve ever spoken to. In settling for apps that normalize this while giving you the illusion of privacy in their marketing, we are doing ourselves a disservice by accepting this as the default. Collectively, we aren’t doing enough to protect ourselves and our social graph from this invasive overreach.
|
||||
|
||||
When stored, aggregated and analyzed, this metadata provides ample information that could potentially incriminate someone or be submitted to authorities. When WhatsApp and Facebook Messenger enabled end-to-end encryption for messages, of course it was a welcome and widely celebrated change. But it’s important to remember that not all end-to-end encryption utilizes the same standards, [some implementations are more secure](https://simplex.chat/blog/20240314-simplex-chat-v5-6-quantum-resistance-signal-double-ratchet-algorithm.html#how-secure-is-end-to-end-encryption-in-different-messengers) than others, so it’s something that shouldn’t necessarily be accepted at face value. More importantly: collecting and storing an obscene amount of metadata should invite global scrutiny, considering this data is often combined with whatever other information companies like Meta harvest about your identity (which is [a lot](https://www.vox.com/recode/23172691/meta-tracking-privacy-hospitals).)
|
||||
When stored, aggregated and analyzed, this metadata provides ample information that could potentially incriminate someone or be submitted to authorities. When WhatsApp and Facebook Messenger enabled end-to-end encryption for messages, of course it was a welcome and widely celebrated change. But it’s important to remember that not all end-to-end encryption utilizes the same standards, [some implementations are more secure](./20240314-simplex-chat-v5-6-quantum-resistance-signal-double-ratchet-algorithm.md#how-secure-is-end-to-end-encryption-in-different-messengers) than others, so it’s something that shouldn’t necessarily be accepted at face value. More importantly: collecting and storing an obscene amount of metadata should invite global scrutiny, considering this data is often combined with whatever other information companies like Meta harvest about your identity (which is [a lot](https://www.vox.com/recode/23172691/meta-tracking-privacy-hospitals).)
|
||||
|
||||
<img src="./images/20240416-metadata.png" class="float-to-right" width="38%">
|
||||
|
||||
@@ -45,8 +45,8 @@ But we also need to acknowledge that the world is becoming increasingly dangerou
|
||||
|
||||
End-to-end encryption is a solid start, but it's just the beginning of our pursuit for true privacy and security. True privacy means that even when legal demands come knocking, there's no useful metadata to hand over. It's not enough to just protect the content of messages; we need consistent innovation in protecting metadata too.
|
||||
|
||||
Changing ingrained habits is tough, but your privacy is always worth the fight. Although giants like WhatsApp and Telegram may dominate global messaging for now, increasing concerns about data harvesting and AI-driven surveillance are fueling demand for alternatives. SimpleX Chat aims to be one of those strong alternatives, hence its radical focus on a decentralized framework with no user identifiers (in other words, nothing that uniquely identifies users on the protocol level to their contacts or to the relays) and extra optionality (self-hosting an [SMP server](https://simplex.chat/docs/server.html) or [XFTP server](https://simplex.chat/docs/xftp-server.html), access via Tor, [chat profiles](https://simplex.chat/docs/guide/chat-profiles.html) with incognito mode, etc.)
|
||||
Changing ingrained habits is tough, but your privacy is always worth the fight. Although giants like WhatsApp and Telegram may dominate global messaging for now, increasing concerns about data harvesting and AI-driven surveillance are fueling demand for alternatives. SimpleX Chat aims to be one of those strong alternatives, hence its radical focus on a decentralized framework with no user identifiers (in other words, nothing that uniquely identifies users on the protocol level to their contacts or to the relays) and extra optionality (self-hosting an [SMP server](../docs/SERVER.md) or [XFTP server](../docs/XFTP-SERVER.md), access via Tor, [chat profiles](../docs/guide/chat-profiles.md) with incognito mode, etc.)
|
||||
|
||||
As of today, most messaging alternatives, including SimpleX, will have some limitations. But with the limited resources we have, we are committed to daily progress towards creating a truly private messenger that anyone can use while maintaining the features that users have come to know and love in messaging interfaces. We want to be the prime example of a messenger that achieves genuine privacy without compromising it for convenience. We need to be able to reliably move away from small and niche use cases to endorsing and enforcing global standards for privacy and making it accessible for all users regardless of their technical expertise.
|
||||
|
||||
We’re grateful for the users and [donors](https://github.com/simplex-chat/simplex-chat#help-us-with-donations) who have been following along on this journey thus far and helping with feedback, anything from bug reports to identifying potential risks. Building in the open has always been a necessity for transparency and ongoing [auditability](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html), because we don’t want anyone to just take our word for it. [See for yourself](https://github.com/simplex-chat) and engage in the discussions. We fully expect you to hold us accountable to our word.
|
||||
We’re grateful for the users and [donors](https://github.com/simplex-chat/simplex-chat#help-us-with-donations) who have been following along on this journey thus far and helping with feedback, anything from bug reports to identifying potential risks. Building in the open has always been a necessity for transparency and ongoing [auditability](./20221108-simplex-chat-v4.2-security-audit-new-website.md), because we don’t want anyone to just take our word for it. [See for yourself](https://github.com/simplex-chat) and engage in the discussions. We fully expect you to hold us accountable to our word.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user